美文网首页Android深入
Android - 升级 Android T 编译环境适配

Android - 升级 Android T 编译环境适配

作者: 我爱田Hebe | 来源:发表于2022-08-30 14:17 被阅读0次

    前言

    与时俱进,博学笃行。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

    相关文章

      网友评论

        本文标题:Android - 升级 Android T 编译环境适配

        本文链接:https://www.haomeiwen.com/subject/njvlnrtx.html