Cordova CLI: Mismatch of CPU architecture
Asked Answered
R

3

9

I've been searching through CLI docs, SO questions, Cordova issues and more for quite some time, but I'm stumped.

So I've created a simple Cordova app for Android using Crosswalk (cordova create, cordova platform add android, cordova plugin add cordova-plugin-crosswalk-webview, cordova build android, nothing fancy). This, by default, generates a bunch of apk's on cordova build which is fine.

But then cordova run android --device installs the arm64 apk which crashes at startup on my device with the message Mismatch of CPU Architecture - with a button to the store to GET CROSSWALK - which is not what I want.

I'd like to instruct cordova run android --device to install and run the armv7 apk, which runs perfectly fine if installed manually via adb install. How can I do this?

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

Notes:

  • this is for a debug build for local development, not for release.
  • using [email protected] instead of 7.0.0 works fine, it installs the correct apk.

Thank you!

Renal answered 2/4, 2018 at 10:36 Comment(2)
follow this steps & generate the apk https://mcmap.net/q/135154/-how-to-create-a-signed-apk-file-using-cordova-command-line-interfaceExegete
I'm sorry @kirankumar, i wasn't clear enough. It's not a release build, but a debug build for local development. Also, those steps indicate an ant build, whereas the default builder (and which i'd like to use because it's the latest and recommended one) is gradle. Also i failed to specify that a similar build using [email protected] works as intended. So i don't see how those steps would apply here, maybe i am missing something?Renal
H
2

I've resolved this issue follow @Mtz recommendation:

1) Install https://github.com/MBuchalik/cordova-build-architecture plugin adding to config.xml like this

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

2) Add this preference to android section in config.xml:

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

3)

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

The run command will install only armv7 version, remember to remove all apk from your device before trying this

Hettiehetty answered 11/11, 2018 at 7:33 Comment(1)
It's been a while, and since then i stuck with adb from a script for convenience (it can uninstall any existing .apk from the device). However, this is the closest answer for my question. Well done, sir.Renal
M
3

Crosswalk git repository report same issue: https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/issues/203

Some user has resolved by open android studio and change default architecture, but i dont know what cordova suitable settings or configurations android studio change with that.

I solved the problem. I found that the plugin works correctly in my case. The problem was with the Android Studio. Android Studio 3.0.1 uses arm64Debug by default. To solve this problem I have taken the following steps in the Android Studio:

  • click on the app Build
  • Select Build Variant
  • Select armv7Debug

Hope it helps.

Mildredmildrid answered 16/4, 2018 at 7:37 Comment(4)
Hi there! Unfortunately i am not using Android Studio, and - you didn't have any way of knowing this but - the last comment on that bug is mine, i'm Teodor Sandu, nice to meet you :) Back on topic, it's not solving the actual issue. Android Studio is not using cordova run internally, which is what i wanted to use (because it's a cli command, not a program i need to open manually, because it does uninstall, install and launch in one go, and because it's basically what should work out of the box with cordova cli). Thank you for your time though, i appreciate it!Renal
You got a +1 vote from me for providing context and a working alternative, even though it's not what i was looking for - maybe for others it will suffice. Thanks again :)Renal
Have you tryed with this ? https://github.com/MBuchalik/cordova-build-architecture Is a plugin to allow you to set desired architecture via config.xml. It patch default cordova gradle file.Mildredmildrid
I've seen that as well, thanks, but that plugin is involved in the build process, not in the installation :|Renal
H
2

I've resolved this issue follow @Mtz recommendation:

1) Install https://github.com/MBuchalik/cordova-build-architecture plugin adding to config.xml like this

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

2) Add this preference to android section in config.xml:

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

3)

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

The run command will install only armv7 version, remember to remove all apk from your device before trying this

Hettiehetty answered 11/11, 2018 at 7:33 Comment(1)
It's been a while, and since then i stuck with adb from a script for convenience (it can uninstall any existing .apk from the device). However, this is the closest answer for my question. Well done, sir.Renal
R
1

By default, Cordova generate a build.gradle file which changes according to your program behavior or plugins you installed.

In case you only need to install/run your apk for armv7 for debug purpose set the cdvBuildMultipleApks property to false.

check out this Setting Gradle Properties for cdvBuildMultipleApks property and allso, Build Environment UserGuide for setting it in the currect place.

this may allso be helpfull aswell: here

Riana answered 10/4, 2018 at 13:47 Comment(2)
Thank you for trying, but that's not what i'm talking about. 1: it's not about the build, it's about cordova run not installing the correct apk for my device's architecture - it just chooses the wrong one, although the good one is built and works perfectly if i install it manually via adb install. 2: i do NOT want to set cdvBuildMultipleApks to false because the resulting apk is too large (and it doesn't quite make sense to me to ship 20Mb+ of code that will never be used). That said, thank you for your time! I appreciate it :)Renal
you're welcome. i guess there is no magics regarding to deployment. i guess if you could just do it through CLI it will be perfect (like: cordova run android --device --arm7) but you can't . you'll need to interfered with the build itself. hope some one will give you another point of view on this issue :)Riana

© 2022 - 2024 — McMap. All rights reserved.