最近在android编译打包中遇到问题,这里记录下:
项目编译时出现
1、No resource identifier found for attribute 'appComponentFactory' in package 'android' 将项目根目中的build.gradle修改:
ext {
buildToolsVersion = "27.0.1"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.1.0"
}
继续编译,又出现:
2、Uncaught translation error: com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)
网上说在app/build.gradle文件的android中增加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
jackOptions { enabled true }
终于编译成功了,然鹅编译成功后发现连不上网路,于是继续修改:
《上诉错误网上也有说直接升级到androidx》
3、这些都解决了还会出现网路无法使用的情况
在AndroidMainfest.xml application中增加
android:usesCleartextTraffic="true"
至此项目正常编译、访问网路正常,本来以为就这样结束了,但是当
gradlew assembleRelease 打包时出现 jackOptions 不能使用的问题, 去掉jackOptions 不能编译,加上jackOptions 不能打包,难道就真的只有升级androidx ?考虑到项目升级到androidx工程比较大,于是又开始了新一轮的修改;
4、 invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)
这个问题有可能是项目中的其他第三方库升级到了androidx导致的, 于是通过
gradlew -q app:dependencies命令查看项目中的依赖,果然,项目中确实有
compile 'com.qiyukf.unicorn:unicorn:+' 升级到了androidx 导致
android.support.v4....包的冲突;
5、解决办法:将该库降版本 compile 'com.qiyukf.unicorn:unicorn:5.7.0',
于是上面提及的
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
jackOptions {
enabled true
}
都可删除,最终项目编译打包成功。(当然如果项目不是很庞大的可以升级到androidx)