今天Gradle升级了发现cordova项目报错了,如下
最后发现原来是因为android support library互相不兼容导致的,这些support library的版本不一致,导致项目中Crosswalk插件里面报了android:attr/fontVariationSettings not found等等这些错误,好了找到问题解决就快了:让这些support library强制统一版本就OK啦
在project中的build.gradle中
allprojects中放入
configurations.all { resolutionStrategy { eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.android.support') { details.useVersion "27.1.0" } }
}}
然后cordova build android后发现
郁闷啊,怎么不支持armeabi-v7a了?后来推测肯定是Crosswalk通过productFlavors打成多个apk包方式了,也就是共享模式,这样可以缩小apk包的体积,缺点是要打出多个apk包,不同cpu架构的手机装最适合的apk包,但这样子很不方便,查下config.xml吧
咦?不对啊
crossalk设置的明明是embedded模式而不是共享模式啊,好吧最后查到app的module中的build.gradle里面
if (Boolean.valueOf(cdvBuildMultipleApks)) { flavorDimensions "default" productFlavors { armv7 { versionCode defaultConfig.versionCode*10 + 2 ndk { abiFilters = ["armeabi-v7a"] } } arm64 { versionCode defaultConfig.versionCode*10 + 3 ndk { abiFilters = ["arm64-v8a"] } } x86 { versionCode defaultConfig.versionCode*10 + 4 ndk { abiFilters = ["x86"] } } x86_64 { versionCode defaultConfig.versionCode*10 + 5 ndk { abiFilters = ["x86_64"] } } } }
这段代码,说明cdvBuildMultipleApks肯定为true了,然后执行了上面这段代码,好吧那这样就去plugin里面改了:
创建一个.gradle文件,里面添加:ext.cdvBuildMultipleApks=false,保存,然后将该文件放至在platforms/android/cordova-plugin-crosswalk-webview里,我的目录里本来存在cordova-xwalk.gradle这个文件就直接把ext.cdvBuildMultipleApks=false添加在文件里面顶部就好了
最后cordova clean,然后重新编译下就好了