Android Studio 4.2 开始在发布版本中重命名 APK 内的资源

Posted

技术标签:

【中文标题】Android Studio 4.2 开始在发布版本中重命名 APK 内的资源【英文标题】:Android Studio 4.2 started to rename resources inside APK in release build 【发布时间】:2021-09-12 13:52:21 【问题描述】:

最近我从 4.1.3 更新到 android Studio 4.2.1,当我在发布模式下构建时,发现 res/ 文件夹下的 APK 中的所有内容都重命名(我可以称之为“混淆”吗?)。

在调试中它与旧版本中的相同。我使用带有gradlew assembleRelease 的控制台构建。

我没有发现为什么会发生这种情况的变更日志或官方消息。尝试通过在 app/build.gradle 中添加 shrinkResources false 并使用 res/raw/keep.xml 来禁用它。即使minifyEnabled false 资源被重命名。

当我将 apk 安装到设备时,我的所有图标和图像似乎都像以前一样显示,但我的应用分发 Web 工具无法再显示应用图标。

任何人都有同样的情况并且知道如何在发布版本中将其关闭?

【问题讨论】:

【参考方案1】:

从 Android Gradle 插件 4.2 开始默认启用该行为,可以通过将 android.enableResourceOptimizations=false 添加到 gradle.properties 文件来禁用它。

参考https://github.com/godotengine/godot/pull/50665。

【讨论】:

【参考方案2】:

我相信这是设计使然。

如果您更新了 Android Gradle 插件以及 IDE 本身,则新版本会为每个模块创建唯一的资源命名空间。

假设你在某个布局中使用了 id R.id.some_id - 但在同一个布局中你导入了某个库的另一个布局,它使用相同的 id R.id.some_id,你将不再拥有 冲突,因为来自外部库的 id 将被重命名为该库唯一的名称(您的布局和外部布局实际上将有 2 个不同的 id)。我会搜索参考资料,然后更新这个答案。

【讨论】:

谢谢!是的,我更新到 Gradle 插件 6.7.1 和 build-tools:gradle 到 4.2.1。我在 res/ 下的图像和 xml 被重命名为 2-3 个带有扩展名的随机符号名称,例如 icon.png 变为 CD.png,或者 layout.xml 在 apk/res/ 中变为 -B.xml。我发现最近的一些谷歌应用程序也有同样的混淆,比如谷歌照片,所以是的,它一定是设计使然。现在,如果我只知道如何将其关闭以免破坏我的分发工具。 AGP 7.0.2 发出以下警告,“不推荐使用选项设置'android.enableResourceOptimizations=false'。当前默认值为'true'。它将在Android 8.0 版中删除Gradle 插件。”有点令人不安,因为这是我知道绕过资源文件名修改以便能够在运行时加载资源的唯一方法,例如context.getAssets().openXmlResourceParser("res/raw/myxmlres.bin").

以上是关于Android Studio 4.2 开始在发布版本中重命名 APK 内的资源的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 4.2 开始在发布版本中重命名 APK 内的资源

java.lang.NoClassDefFoundError:更新到 Android Studio 4.2 后的 javax/xml/bind/JAXBException

Android Studio安卓模拟器怎么用

android studio 4.2 无法安装android sdk

可调试过程中的android studio 4.2问题

苹果电脑获取Android Studio的发布版SHA1和开发版SHA1