使用 AppCompat 库时 Android 中无法重现的构建
Irreproducible builds in Android when using AppCompat library
我试图创建可重现的 Android 构建,但被 AppCompat 库中的可绘制资源阻止了。
可绘制对象 abc_ic_menu_cut_mtrl_alpha.png
和 abc_ic_menu_copy_mtrl_am_alpha.png
在针对相同代码库的不同构建的工件 apk 文件中的文件夹 res/drawable-ldrtl-xxxhdpi-v17
和 res/drawable-xxxhdpi-v4
中出现和消失。
我正在使用 androidx.appcompat:appcompat:1.1.0
、com.android.tools.build:gradle:3.5.1
和 Gradle 5.4.1,并没有直接引用这些资源。
shrinkResources
不会影响结果,因为我同时使用 true
和 false
进行了测试。在true
的时候,我尝试添加keep.xml
来丢弃或者保留这些资源,但是结果是一样的,都没有完全移除。
我怀疑它是由 Gradle merge resources 引起的,但找不到相关的日志或映射报告。
我注意到这些drawable可能显示的是Rtl文件夹,所以我也尝试了android:supportsRtl="false"
。但问题依然存在,来自 AppCompat 的 rtl 资源仍然存在。
原来是我在项目中使用了booster framework,在创建神器apks时随机删除了资源。
我已经为他们创建了一个问题 https://github.com/didi/booster/issues/103,并解决了这个问题。
我试图创建可重现的 Android 构建,但被 AppCompat 库中的可绘制资源阻止了。
可绘制对象 abc_ic_menu_cut_mtrl_alpha.png
和 abc_ic_menu_copy_mtrl_am_alpha.png
在针对相同代码库的不同构建的工件 apk 文件中的文件夹 res/drawable-ldrtl-xxxhdpi-v17
和 res/drawable-xxxhdpi-v4
中出现和消失。
我正在使用 androidx.appcompat:appcompat:1.1.0
、com.android.tools.build:gradle:3.5.1
和 Gradle 5.4.1,并没有直接引用这些资源。
shrinkResources
不会影响结果,因为我同时使用 true
和 false
进行了测试。在true
的时候,我尝试添加keep.xml
来丢弃或者保留这些资源,但是结果是一样的,都没有完全移除。
我怀疑它是由 Gradle merge resources 引起的,但找不到相关的日志或映射报告。
我注意到这些drawable可能显示的是Rtl文件夹,所以我也尝试了android:supportsRtl="false"
。但问题依然存在,来自 AppCompat 的 rtl 资源仍然存在。
原来是我在项目中使用了booster framework,在创建神器apks时随机删除了资源。 我已经为他们创建了一个问题 https://github.com/didi/booster/issues/103,并解决了这个问题。