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

前言

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容