android - Android gradle plugin v3.3.0 -> 使用 proguard 时找不到 R$raw
问题描述
刚刚更新到 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?我们使用assembleRelease
CI 管道中的任何地方来构建我们的 apk。
导致任务中断的 android gradle 插件 3.3.0 发生了什么变化
assembleRelease
?我们使用assembleRelease
CI 管道中的任何地方来构建我们的 apk。有什么建议可以让“assembleRelease”再次工作吗?(更新 Proguard 配置?启用 R8?)
解决方案
assembleRelease
和有什么区别:app:assembleRelease
前者在assembleRelease
相对于当前级别的所有模块上运行任务。后者app
仅在模块(及其依赖项)上运行它。
为什么切换到 android gradle plugin 3.3.0 会影响我必须调用哪个任务来构建我的 apk?我们使用
assembleRelease
CI 管道中的任何地方来构建我们的 apk。
该问题没有足够的信息可以肯定地说,但发行说明中列出了许多更改。例如,此问题可能与:
更快地为库项目生成 R 类:以前,Android Gradle 插件会
R.java
为项目的每个依赖项生成一个文件,然后将这些 R 类与应用程序的其他类一起编译。该插件现在直接生成一个包含应用程序编译的 R 类的 JAR,而无需先构建中间R.java
类。此优化可能会显着提高包含许多库子项目和依赖项的项目的构建性能,并提高 Android Studio 中的索引速度。
推荐阅读
- typescript - thunkAPI.getState 不是函数:reduxtoolkit 和 jest 出错
- terraform - 如何设置具有托管节点组的 EKS 集群以在所有命名空间上拥有私有 docker hub 访问权限?
- python - python枕头的问题,不太确定是什么问题
- javascript - javascript getMonth() 关闭 2?
- flutter - 在 Flutter 中变量类型前使用 `late` 关键字和变量类型后使用 `?` 标记有什么区别?
- image - 如何设置 LogicalScreenDescriptor 和 ImageDescriptor gif 元数据
- python - 是否可以在 django 中返回 pandas null 检查 (df.isnull().sum()) 结果并显示在屏幕上?
- c++ - 错误:候选构造函数不可行:需要 5 个参数,但提供了 0 个
- flutter - 使用 Dart / Flutter,我将如何比较两个文本字段的值以提供持续时间输出?
- swift - 如何在 macOS SwiftUI 视图中读取和访问鼠标光标位置?