刚刚更新到Android Gradle插件3.3.0版
我们有以下设置(不确定哪些是重要的):
包含3个库模块(数据、域、实用程序)的应用程序项目(app)
已启用数据绑定(databinding.enabled true
Proguard已启用(proguardFiles 'proguard-rules.pro'
当我使用以下方法构建应用程序时:
./gradlew assembleDevRelease
我得到以下错误:
can't find referenced class my.package.data.R$raw
当我使用以下方法构建应用程序时:
./gradlew :app:assembleDevRelease
这个应用程序构建得很好,生成了一个模糊的*.apk,我可以安装它。
问题:
assembleRelease:app:assembleRelease之间有什么区别?
-为什么切换到android gradle plugin 3.3.0会影响我必须调用哪个任务来构建apk?我们使用ci管道中的assembleRelease来构建apk。
android gradle plugin 3.3.0中的哪些变化导致任务assembleRelease中断?我们使用ci管道中的assembleRelease来构建apk。
有什么建议可以让“assemblerelease”重新工作吗?(更新proguard配置?,启用r8?)

最佳答案

assembleRelease:app:assembleRelease之间有什么区别?
前者在相对于当前级别的所有模块上运行assembleRelease任务。后者仅在app模块上运行(及其依赖项)。
为什么切换到android gradle plugin 3.3.0会影响我必须调用哪个任务来构建apk?我们使用ci管道中的assembleRelease来构建apk。
这个问题没有足够的信息可以确定,但在release notes中列出了许多更改。例如,此问题可能与:
更快的库项目r类生成:以前,android gradle插件会为每个项目的依赖项生成一个R.java文件,然后将这些r类与应用程序的其他类一起编译。该插件现在直接生成一个包含应用程序编译的r类的jar,而不必首先构建中间的R.java类。这种优化可以显著提高包含许多库子项目和依赖项的项目的构建性能,并提高android studio中的索引速度。

08-17 10:49