升级Gradle至3.2.0-alpha14后遇'android-manifest-metadata'创建失败报错
我来帮你一步步搞定这个问题——先解决升级Gradle后出现的编译报错,再修复Android 7.0设备无法启动的故障。
一、先搞定编译报错:Cannot create variant 'android-manifest-metadata' after configuration ':app:debugApiElements' has been resolved
这个错误核心原因是Google Services插件版本和新版Gradle构建插件不兼容,再加上旧版Crosswalk库的适配冲突,按下面的步骤调整:
升级Google Services插件版本
你根目录build.gradle里的com.google.gms:google-services用的是3.3.0,和Gradle 3.2.0-alpha14完全不匹配。建议直接升级到4.0.1(这个版本和Gradle 3.2.x系列适配性很好),修改后的配置如下:dependencies { classpath 'com.android.tools.build:gradle:3.2.0-alpha14' classpath 'com.google.gms:google-services:4.0.1' }处理Crosswalk库的兼容性冲突
你用的Crosswalk 23.53.589.4版本比较老,和新版Gradle的变体处理逻辑有冲突,给你两个可选方案:- 方案A:升级Crosswalk到更稳定的新版(比如24.53.595.0,这是最后几个支持Android 5.0+的稳定版本),替换依赖:
implementation 'org.xwalk:xwalk_core_library:24.53.595.0' - 方案B:如果不想升级Crosswalk,就在
android代码块里添加变体过滤规则,跳过冲突的变体:android { // 保留你原有的其他配置... variantFilter { variant -> def names = variant.flavors*.name if (names.contains("android-manifest-metadata")) { setIgnore(true) } } }
- 方案A:升级Crosswalk到更稳定的新版(比如24.53.595.0,这是最后几个支持Android 5.0+的稳定版本),替换依赖:
同步并清理项目
先执行File > Sync Project with Gradle Files,然后依次运行Build > Clean Project和Build > Rebuild Project,基本就能解决编译报错了。
二、修复Android 7.0设备无法启动的问题
编译通过后,针对Android 7.0(API 24)的启动故障,重点排查这几个常见点:
验证Multidex配置是否正确
你已经开了multiDexEnabled true,但还要确保Application类正确初始化Multidex:- 如果你的Application类继承自
Application,修改成这样:public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } - 如果不想自定义Application类,直接在Manifest里指定用
MultiDexApplication:<application android:name="android.support.multidex.MultiDexApplication" <!-- 保留你原有的其他属性 --> >
- 如果你的Application类继承自
适配Crosswalk在Android 7.0的运行问题
旧版Crosswalk在Android 7.0上容易出现权限或WebView兼容问题,试试这两个操作:- 确保Manifest里加了必要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 在启动XWalkActivity之前,添加这些适配参数:
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true); XWalkPreferences.setValue(XWalkPreferences.JAVASCRIPT_CAN_OPEN_WINDOW, true);
- 确保Manifest里加了必要的权限:
统一Firebase依赖版本
我注意到你Firebase的依赖版本不一致(比如firebase-auth是15.1.0,其他大多是15.0.x),这种版本差异可能导致初始化异常,建议统一成同一个版本,比如全部用15.0.2:implementation 'com.google.firebase:firebase-core:15.0.2' implementation 'com.google.firebase:firebase-appindexing:15.0.2' implementation 'com.google.firebase:firebase-config:15.0.2' implementation 'com.google.firebase:firebase-invites:15.0.2' implementation 'com.google.firebase:firebase-messaging:15.0.2' implementation 'com.google.firebase:firebase-auth:15.0.2' implementation 'com.google.firebase:firebase-database:15.0.2'
三、备选方案:如果不想用Alpha版Gradle插件
要是你觉得用Gradle 3.2.0-alpha14这种测试版太折腾,也可以回退到3.1.0稳定版,然后针对Android 7.0的问题做这些调整:
- 确保Multidex配置正确(同上)
- 升级Crosswalk到支持Android 7.0的版本
- 如果应用有HTTP请求,在Manifest的
application标签里添加android:usesCleartextTraffic="true"(Android 7.0默认禁止明文流量)
内容的提问来源于stack exchange,提问作者user7545314

