一个让人抓狂的问题--android(invokedynamic requires --min-sdk-version >= 26)

1,261 阅读1分钟
最近在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)