前言
与时俱进,博学笃行。Android T 都正式发版了,适配肯定是一坑又一坑。这里仅作 Android T 编译环境各种库尽可能低版本的适配。前面介绍的是适配中遇到的问题和解决思路,赶时间可以直接阅览最后的总结内容,有适配的配置要求。
SDK适配
升级Android T了,SDK肯定选择最新的 33 版本了。打开SDK管理器,安装最新的SDK带上源码,如图:
Gradle适配
低版本适配 Android T 主要适配 Gradle 工具和 Gradle 插件版本的适配,还有就是各种依赖库的适配。
倘若仅仅升级SDK而不进行依赖库文件的升级适配,Debug 编译很可能编译成功,然而在打包 Release 时,就会遇到下面的情况:
乍一看,资源和混淆编译问题,有位独出心裁的同学,把混淆去掉,竟然也能编译成功,不过,作为一个发版的应用,从安全的角度出发,混淆是不可能去掉的。
除了上面的编译错误信息还有下面的版本信息提示:
事实上,上面编译的中断并不能带来多少信息,不过也知道大方向是混淆方面的问题,通过
gradlew assembleRelease --stacktrace --info
编译能获取到详细的编译日志,大体上内容也是指向这两个错误提示。
针对于混淆版本错误提示情况下网上有部分解决办法:
替换掉\sdk\tools\proguard\lib下的proguard.jar
官网: https://sourceforge.net/projects/proguard/
下载最新的proguard版本
当然,这种解决办法本人是不会去尝试,作为团队开发,通过修改本地的混淆文件的升级办法不可取,况且,不确保能解决升级 T 的适配问题。
既然不能手动对本地混淆文件进行替换文件升级,那解决办法也很明显了,直接进行编译环境的混淆工具版本升级,让编译器自动更新混淆工具。
首先对 buildToolsVersion 进行升级,升级版本到 buildToolsVersion '33.0.0'
版本,编译,错误日志:
这里提示 Aidl 编译的错误信息,根据各方查证之下,最后在 stackoverflow 有类似的错误信息提示下得到启示(链接:stackoverflow.com/questions/2… ) 。找到问题,事实不是 Aidl 出问题,是 Gradle 版本不适配导致的问题。对 build.gradle 文件中的 dependencies 中的 com.android.tools.build:gradle
的版本进行升级。
这时候就面临着 gradle 版本的抉择了,对于一个很早就已经研发的产品,升级到最高版本很明显不是一个机智的选择,高版本往往意味着需要做更庞大的适配工作,还要面临期间新的bug,尝试了 7.2.2
的适配,然后编译提示:
这里抛出的错误信息是 gradle 工具版本的最低要求,在 gradle-wrapper.properties
文件中有自动下载地址:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
直接双击编译日志中的蓝色文件进行自动更新替换,gradle 工具升级为:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
下载完后自动sync, 然后,坑就这样一步一步越来越大
提示 maven 库使用了不安全链接,既然这样,那就在使用了 http
的库添加允许条件:
本以为这样就能编译通过了,然并卵。
产生了更离谱的问题了,就这样在适配的路上越走越歪。这与初衷不符,仔细的经过官方资料的查询之后,毅然决然的放弃适配最新版本的 gradle 。
在经过对本项目的依赖库的查证之下,最后选择了 6.5+ 的 Gradle 版本。Gradle 版本与其插件版本的相关资料信息,查阅官方文档:传送门 developer.android.com/studio/rele…
Gradle 选择的版本是: gradle-6.5-bin
gradle-wrapper.properties 配置的更新链接: distributionUrl=services.gradle.org/distributio…
插件版本根据官网选择的是: 4.1.2
build.gradle 配置为: classpath 'com.android.tools.build:gradle:4.1.2'
sync 的结果:
最后的结果很明显了,这里JDK编译环境适配的问题了,参考下方 JDK 编译适配。调整 JDK环境后 Sync:
提示 Build Tools 版本不适配,选择合适的版本:官方传送门:developer.android.com/studio/rele…
buildToolsVersion '29.0.2'
然后 Sync ,查看日志,逐步更新选择适配的其他依赖库(自行添加的依赖项),如
为 Android 资源混淆工具: classpath 'com.tencent.mm:AndResGuard-gradle-plugin: 1.2.+' (传送门: github.com/shwenzhang/…)
更新完后 Sync,愉快的发现,成功了: BUILD SUCCESSFUL in 12s
这是成功的第一步,也是适配上最重要的一步,接着进行 Release 编译,经过漫长的等待之后,这次 Android T 的适配工作完美成功。
JDK编译适配
在官方文档中,暂时显示了到 Android O 的 JDK 版本适配要求,事实上,Android S 以上需要 JDK 11 的编译环境,Android Studio 默认情况下,会自动安装使用 JDK 11 的编译环境。
传送门:source.android.com/source/requ…
倘若提示上述:
Could not create task ':minifyReleaseWithR8'.
的问题时,打开设置 File -> settings -> Gradle, 选择 Android Studio default JDK.
如果要使用命令行进行编译: gradlew assembleRelease
进行打包,还需要配置系统的 JDK 的环境。
依赖库适配
由于项目中会添加各种项目的依赖,毕竟不能重复造轮子,这里仅介绍遇到的公用依赖库必须升级的选项。
内存泄漏检测工具 :(直接剔除掉了)
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
Android 资源混淆工具:(参考Github库上的文档,直接更新到最新版本)
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.21'
其他依赖库根据日志进行适配。
总结
主要对 JDK、SDK、Gradle 三方面进行适配,其他依赖库查询相应文档进行适配。
JDK: JDK11 的编译环境
SDK:
compileSdkVersion 33
targetSdkVersion 33
Gradle:
插件(build.gradle):
classpath 'com.android.tools.build:gradle:4.1.2'
工具(gradle-wrapper.properties):
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
Build Tools:
buildToolsVersion '29.0.2'
作者:整鬟飘袖野风香
链接:https://juejin.cn/post/7132756683482202120
网友评论