首页 > 解决方案 > Android gradle plugin v3.3.0 -> 使用 proguard 时找不到 R$raw

问题描述

刚刚更新到 Android gradle 插件版本 3.3.0

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

当我使用以下方法构建应用程序时:

./gradlew assembleDevRelease

我收到以下错误:

can't find referenced class my.package.data.R$raw

当我使用以下方法构建应用程序时:

./gradlew :app:assembleDevRelease

该应用程序构建良好,生成一个我可以安装的混淆 *.apk

问题:

- 为什么切换到 android gradle plugin 3.3.0 会影响我必须调用哪个任务来构建我的 apk?我们使用assembleReleaseCI 管道中的任何地方来构建我们的 apk。

标签: androidbuildandroid-gradle-pluginandroid-proguard

解决方案


assembleRelease和有什么区别:app:assembleRelease

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

为什么切换到 android gradle plugin 3.3.0 会影响我必须调用哪个任务来构建我的 apk?我们使用assembleReleaseCI 管道中的任何地方来构建我们的 apk。

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

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


推荐阅读