Android Studio 4.2开始在发布构建中重命名APK中的资源。

3

最近我从Android Studio 4.1.3升级到了4.2.1,但在release模式下编译APK时,发现res/文件夹中的所有内容(可以称之为“混淆”吗?)都被重命名了。

在debug模式下与旧版本保持一致。我使用gradlew assembleRelease控制台构建。

我没有找到任何关于发生这种情况的官方更改日志或解释。尝试通过在app/build.gradle中添加shrinkResources false以及使用res/raw/keep.xml来禁用它,即使将minifyEnabled false,资源也会被重命名。

当我将apk安装到设备上后,所有的图标和图片似乎都正常显示,但我的应用分发Web工具无法再显示应用程序图标。

是否有人遇到了相同的问题并知道如何在发布构建中关闭此功能?

2个回答

8
默认情况下,行为已在 Android Gradle 插件 4.2 中启用,并且可以通过将 android.enableResourceOptimizations=false 添加到 gradle.properties 文件中来禁用该行为。
有关参考,请查看https://github.com/godotengine/godot/pull/50665

1
我相信这是有意设计的。如果您更新了Android Gradle插件以及IDE本身,新版本将为每个模块创建唯一的资源命名空间。因此,假设您在某个布局中使用id R.id.some_id,但在同一布局中导入了某个库的另一个布局,该布局也使用相同的id R.id.some_id,则不再会有冲突,因为来自外部库的id将被重命名为该库唯一的名称(您的布局和外部布局实际上将具有2个不同的id)。我会搜索参考文献然后更新这个答案。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接