【问题标题】:Cordova CLI: Mismatch of CPU architectureCordova CLI:CPU 架构不匹配
【发布时间】:2018-04-02 10:36:54
【问题描述】:

很长一段时间以来,我一直在搜索 CLI 文档、SO 问题、Cordova 问题等,但我很困惑。

所以我使用 Crosswalk 为 Android 创建了一个简单的 Cordova 应用程序(cordova createcordova platform add androidcordova plugin add cordova-plugin-crosswalk-webviewcordova build android,没什么特别的)。默认情况下,这会在 cordova build 上生成一堆 apk,这很好。

但随后cordova run android --device 安装了arm64 apk,它在我的设备上启动时崩溃,并显示消息Mismatch of CPU Architecture - 带有指向商店的按钮GET CROSSWALK - 这不是我想要的。

我想指示cordova run android --device 安装和运行armv7 apk,如果通过adb install 手动安装,它运行得非常好。我该怎么做?

  • cordova v8.0.0
  • cordova-android v7.0.0
  • cordova-plugin-crosswalk-webview v2.4.0

注意事项:

  • 这是用于本地开发的 debug 构建,而不是 release
  • 使用 cordova-android@6.4.0 而不是 7.0.0 可以正常工作,它会安装正确的 apk。

谢谢!

【问题讨论】:

  • 按照这些步骤生成apk stackoverflow.com/a/26450074/4973660
  • 对不起@kirankumar,我不够清楚。它不是发布版本,而是用于本地开发的调试版本。此外,这些步骤表示ant 构建,而默认构建器(我想使用它,因为它是最新且推荐的)是gradle。我也未能指定使用cordova-android@6.4.0 的类似构建按预期工作。所以我看不出这些步骤在这里如何应用,也许我遗漏了什么?

标签: android cordova cpu-architecture crosswalk cordova-cli


【解决方案1】:

Crosswalk git 存储库报告相同问题:https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/issues/203

一些用户通过打开 android studio 并更改默认架构解决了问题,但我不知道 android studio 会更改哪些适合 cordova 的设置或配置。

我解决了这个问题。我发现该插件在我的 案子。 Android Studio 有问题。安卓工作室 3.0.1 默认使用 arm64Debug。为了解决这个问题,我采取了 在 Android Studio 中执行以下步骤:

  • 点击应用构建
  • 选择构建变体
  • 选择 armv7Debug

希望对你有帮助。

【讨论】:

  • 您好!不幸的是,我没有使用 Android Studio,而且 - 你没有任何方式知道这一点,但是 - 关于那个错误的最后评论是我的,我是 Teodor Sandu,很高兴见到你 :) 回到主题,它没有解决实际问题。 Android Studio 没有在内部使用cordova run,这是我想要使用的(因为它是一个 cli 命令,而不是我需要手动打开的程序,因为它确实可以一次性卸载、安装和启动,并且因为它基本上是应该使用cordova cli开箱即用)。谢谢你的时间,我很感激!
  • 您因提供上下文和可行的替代方案而获得了我的 +1 投票,即使这不是我想要的 - 也许对其他人来说就足够了。再次感谢:)
  • 你试过这个吗? https://github.com/MBuchalik/cordova-build-architecture 是一个插件,允许您通过 config.xml 设置所需的架构。它修补默认的cordova gradle文件。
  • 我也看到了,谢谢,但该插件参与构建过程,而不是安装:|
【解决方案2】:

我已经按照@Mtz 的建议解决了这个问题:

1)像这样安装https://github.com/MBuchalik/cordova-build-architecture插件添加到config.xml

<plugin name="cordova-build-architecture" spec="https://github.com/MBuchalik/cordova-build-architecture.git#v1.0.4" source="git" />

2) 将此首选项添加到 config.xml 中的 android 部分:

<preference default="arm" name="buildArchitecture" />

3)

cordova clean
cordova build (This step only generates one apk, armv7)
cordova run --devices

运行命令将只安装 armv7 版本,请记住在尝试之前从您的设备中删除所有 apk

【讨论】:

  • 已经有一段时间了,从那以后,为了方便起见,我坚持使用脚本中的adb(它可以从设备上卸载任何现有的.apk)。但是,这是我的问题最接近的答案。干得好,先生。
【解决方案3】:

默认情况下,Cordova 会生成一个 build.gradle 文件,该文件会根据您的程序行为或您安装的插件进行更改。

如果您只需要为 armv7 安装/运行您的 apk 以进行调试,请将 cdvBuildMultipleApks 属性设置为 false。

查看Setting Gradle Properties 以获取 cdvBuildMultipleApks 属性,以及 Build Environment UserGuide 以将其设置在正确的位置。

这也可能有帮助:here

【讨论】:

  • 感谢您的尝试,但这不是我要说的。 1:这不是关于构建,而是关于cordova run 没有为我的设备架构安装正确的apk - 它只是选择了错误的apk,尽管如果我通过adb install 手动安装它,好的一个已经构建并且可以完美运行。 2:我不想将cdvBuildMultipleApks 设置为false,因为生成的apk 太大(而且对我来说,发送20Mb+ 永远不会使用的代码并没有多大意义)。也就是说,谢谢你的时间!我很感激:)
  • 不客气。我想没有关于部署的魔法。我想如果你可以通过 CLI 来做到这一点,那将是完美的(比如:cordova run android --device --arm7),但你不能。您需要干预构建本身。希望有人能给你关于这个问题的另一种观点:)
猜你喜欢
  • 2019-11-27
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多