Android gradle插件v3.3.0->使用Proguard时找不到R $ raw

时间:2019-01-16 12:11:43

标签: android build android-gradle android-proguard

仅更新至Android gradle插件版本3.3.0

我们有以下设置(不确定哪个重要):

  • 具有3个库模块(数据,域,utils)的应用程序项目(应用程序)

  • 已启用数据绑定(databinding.enabled true

  • 启用了防护(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。

  • 关于如何使“ assembleRelease”重新工作的任何建议? (更新Proguard配置?,启用R8吗?)

1 个答案:

答案 0 :(得分:2)

  

assembleRelease:app:assembleRelease有什么区别

前者在相对于当前级别的所有模块上运行assembleRelease任务。后者仅在app模块(及其依赖项)上运行。

  

为什么切换到android gradle插件3.3.0会影响构建apk必须调用的任务?我们在CI管道的任何地方都使用assembleRelease来构建apk。

该问题没有足够的信息可以肯定地说,但是release notes中列出了许多更改。例如,此问题可能与:

  

为库项目更快地生成R类:以前,Android Gradle插件会为项目的每个依赖项生成一个R.java文件,然后将这些R类与应用程序的其他类一起编译。现在,该插件会直接生成一个JAR,其中包含您应用程序的已编译R类,而无需首先构建中间R.java类。这种优化可以显着提高包含许多库子项目和依赖项的项目的构建性能,并提高Android Studio中的索引编制速度。