Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Incorrect APKs versionCode order when building multiple APKs for both 32bit and 64 bit platforms with crosswalk

I need to build the ionic/cordova application for both 32bit (armeabi-v7a and x86) and 64bit (arm64-v8a and x86_64) platforms. I build four separate APKs using commands ionic build android --release and ionic build android --release --xwalk64bit All goes well except that the versionCode (for version set to 0.0.11) is a little off - see below wrong versionCodes

The problem is that x86 and x86_64 must have higher versionCode then ARM apks. This is required because x86 devices are able to handle ARM libs but there is no ARM device able to handle x86 libs. So we must keep the version code of x86 APK higher than the one of ARM apk, and the right APK will go to the right device.

Here is what I'm looking for (and what I finally managed to create) - see below correct versionCodes

The problem is that the versionCode is set by both build.gradle and modified by crosswalk mobile-xwalk.gradle which gives the wrong versions using my build approach described above. I tried to set the versionCode using android-versionCode param in config.xml and using cdvVersionCode for build.gradle (see http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html#configuring-gradle) but no luck.

I end up to fix the problem by manually changing mobile-xwalk.gradle to set the correct versionCodes for 64bit apks (as shown on my second screenshot). This does not look like the optimal solution for me

Question - are there any better way to approach this problem?

like image 881
Alex Ryltsov Avatar asked Sep 08 '16 11:09

Alex Ryltsov


1 Answers

It seems there is a bug in cordova-plugin-crosswalk-webview. This code part from platforms/android/build.gradle (used to build 32-bit):

productFlavors {
        armv7 {
            versionCode defaultConfig.versionCode*10 + 2
            ndk {
                abiFilters "armeabi-v7a", ""
            }
        }
        x86 {
            versionCode defaultConfig.versionCode*10 + 4
            ndk {
                abiFilters "x86", ""
            }
        }
        all {
            ndk {
                abiFilters "all", ""
            }
        }
    }

here is versionCode*10 as seen... And this code part from platforms/android/cordova-plugin-crosswalk-webview/YOUR_APP_SUFFIX-xwalk.gradle (used to build 64-bit):

productFlavors {
            x86_64 {
                versionCode defaultConfig.versionCode + 6
                ndk {
                   abiFilters "x86_64", ""
                }
            }
            arm64 {
                versionCode defaultConfig.versionCode + 9
                ndk {
                    abiFilters "arm64-v8a", ""
                }
            }
        }

and here is just versionCode. So I usually change second file to versionCode*10 to solve PlayMarket issues

like image 121
Wishmaster Avatar answered Nov 09 '22 11:11

Wishmaster