刚刚更新到Android gradle插件版本3.3.0
我们有以下设置(不确定哪些是重要的):
-
具有3个库模块(数据、域、utils)的应用程序项目(应用程序)
-
启用数据绑定(
databinding.enabled true
) -
Proguard enabled(
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插件3.3.0会影响我必须调用哪个任务来构建我的apk?我们在CI管道中到处使用assembleRelease
来构建我们的apk
-
android gradle插件3.3.0中发生了什么变化,导致任务
assembleRelease
中断?我们在CI管道中到处使用assembleRelease
来构建我们的apk。 -
有什么建议可以让"assemblyRelease"重新工作吗?(更新Proguard配置?,启用R8?)
assembleRelease
和:app:assembleRelease
之间有什么区别
前者在相对于当前级别的所有模块上运行assembleRelease
任务。后者仅在app
模块上运行它(及其依赖项)。
为什么切换到android gradle插件3.3.0会影响我必须调用哪个任务来构建我的apk?我们在CI管道中到处使用
assembleRelease
来构建我们的apk。
这个问题没有足够的信息可以确定,但发布说明中列出了一些更改。例如,这个问题可能与有关
为库项目更快地生成R类:以前,Android Gradle插件会为您的每个项目的依赖项生成一个
R.java
文件,然后将这些R类与应用程序的其他类一起编译。该插件现在直接生成一个包含应用程序编译的R类的JAR,而无需首先构建中间的R.java
类。这种优化可能会显著提高包括许多库子项目和依赖项的项目的构建性能,并提高Android Studio中的索引速度。