Android Gradle Plugin(AGP) 升级 3.1.4 ,Gradle升级4.7过程记录

一.背景

作为GP开发者,紧跟Google的脚步,升级开发环境和编译环境,不仅可以提升编译效率,新工具,新特性也是开发者们所期待的,当然随着工具的升级App的质量也会提升。所以,项目定期推进技术升级,显得很有必要。

项目中原有的一些配置

  • Android Gradle Plugin(AGP)版本是2.3.1
  • Gradle的版本为gradle-3.5-all
  • Android Studio(3.1.3)
  • JDK-7

此次的目标是升级到

  • Android Gradle Plugin(AGP)版本是3.1.4
  • Gradle的版本为gradle-4.7-all
  • Android Studio(3.3 Canary 3)
  • JDK-8

二.升级过程中遇到的问题:

整体来说AGP升级有很多需要改变的地方,每个项目中都会踩到不同的坑。所以我只是简单的从我们项目中遇到的问题介绍一下:

2.1 不在需要configuration传递,compiler替换成api或者implementation

  • 升级以后,首先原来的compile变成了apiimplementation(当然还有其他几个,这里不细说)简单的来说,api引进来的组件允许向上传递,implementation引入进来的组件,不允许传递。其实就是访问隔离,当然也会提升编译速度。
  • configuration: 'release'也会自动传递。无需在像下面这种写法来传递了。
releaseCompile project(configuration: 'release', path: ':xxx-base-framework')
debugCompile project(configuration: 'debug', path: ':xxx-base-framework')
api project(':xxx-base-framework')

2.2 Dex Knife

因为项目庞大

  • Class的数量2.8万+
  • Method的数量在17万+

Dex Knife 主要是解决Gradle2.3版本时,会出现Too many classes in --main-dex-list, main dex capacity exceeded或者因为被挤出主Dex导致的类或者方法找不到问题。
当然当AGP升级到3.1.3之后,我们关闭了Dex Knife,让AGP自己去处理分包。效果还不错。暂时没出现问题。可能是有优化过吧。

  dexOptions {
    ...
    additionalParameters = [//dex参数详见 dx --help
                            '--multi-dex', //多分包
                            '--set-max-idx-number=55000', //每个包内方法数上限
                            //'--main-dex-list=' + projectDir +
                            //'/maindexlist.txt', //打包进主classes.dex的文件列表
                            //'--minimal-main-dex' //使上一句生效
    ...
    ]
  }

同时开启D8之后,Dex Size从原来的12.4M降低到了11.9M。还是可以的。下面说说D8的BUG吧。

  • Before D8 总计12.4M


    未开启D8
  • After D8 总计11.9M


    D8开启之后

2.3 D8 BUG

之前写的D8的相关文章:Android Studio 3.0+ 新Dex编译器D8与新混淆工具R8
当时因为编译不过暂时关闭了D8,(gradle.properties文件中增加:android.enableD8=false),我也在Google Issue提了相关的问题。科学上网: Provide better error message for syntax error in multiDexKeepFile

java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
app/build/intermediates/transforms/dexBuilder/othersAbroad/release/0.jar, 
app/build/intermediates/transforms/dexBuilder/othersAbroad/release/2.jar,
app/build/intermediates/transforms/dexBuilder/othersAbroad/release/3.jar, app/build/intermediates/transforms/dexBuilder/othersAbroad/release/4.jar

这其实关系到一个流程,AGP先将Java代码混淆并编译成jar包放到上述目录位置。然后D8会根据maindexlist.txt(app/build/intermediates/multi-dex/othersAbroad/release/maindexlist.txt)里的配置,编译成dex文件。当然配置列表由AGP生成。自己项目中扩展的maindexlist.txt一会被追加到上面的这个build目录中的maindexlist中。

 defaultConfig {
    ...
    multiDexEnabled true
    multiDexKeepFile file('multiDexKeep.txt')
    ...
    }

是因为我在multiDexKeep.txt中的错误写法如下:

com.xxx.xxx.SplashActivity.class
com.xxx.xxx.MainActivity.class

正确写法:

com/xxx/xxx/SplashActivity.class
com/xxx/xxx/MainActivity.class

开发者网站配置方法数超过 64K 的应用文章中是有提到的,只是在真正build的时候DX是直接忽略掉,D8是提示报错。但是没有准确提示。

2.4 aapt2的问题

这个问题很直接

  • 错误写法:
<resources>
  <style name="popup_animation">
    <item name="@android:windowEnterAnimation">@anim/popup_show</item>
    <item name="@android:windowExitAnimation">@anim/popup_hide</item>
  </style>
</resources>
  • 正确写法:
<resources>
  <style name="popup_animation">
    <item name="android:windowEnterAnimation">@anim/popup_show</item>
    <item name="android:windowExitAnimation">@anim/popup_hide</item>
  </style>
</resources>

好吧,到底改了什么?把android:windowEnterAnimation 前面的@去掉吧。

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

推荐阅读更多精彩内容