使用 AppCompat 库时 Android 中无法重现的构建

Irreproducible builds in Android when using AppCompat library

我试图创建可重现的 Android 构建,但被 AppCompat 库中的可绘制资源阻止了。

可绘制对象 abc_ic_menu_cut_mtrl_alpha.pngabc_ic_menu_copy_mtrl_am_alpha.png 在针对相同代码库的不同构建的工件 apk 文件中的文件夹 res/drawable-ldrtl-xxxhdpi-v17res/drawable-xxxhdpi-v4 中出现和消失。

我正在使用 androidx.appcompat:appcompat:1.1.0com.android.tools.build:gradle:3.5.1 和 Gradle 5.4.1,并没有直接引用这些资源。

shrinkResources 不会影响结果,因为我同时使用 truefalse 进行了测试。在true的时候,我尝试添加keep.xml来丢弃或者保留这些资源,但是结果是一样的,都没有完全移除。

我怀疑它是由 Gradle merge resources 引起的,但找不到相关的日志或映射报告。

我注意到这些drawable可能显示的是Rtl文件夹,所以我也尝试了android:supportsRtl="false"。但问题依然存在,来自 AppCompat 的 rtl 资源仍然存在。

原来是我在项目中使用了booster framework,在创建神器apks时随机删除了资源。 我已经为他们创建了一个问题 https://github.com/didi/booster/issues/103,并解决了这个问题。