Android 升级Gradle插件后,在发布版本中更改XML资源名称
将Gradle插件升级到4.2.0之后(在此之前,我没有这个问题),在构建发布版本时,XML资源文件的名称似乎发生了变化,例如从Android 升级Gradle插件后,在发布版本中更改XML资源名称,android,android-gradle-plugin,proguard,android-r8,Android,Android Gradle Plugin,Proguard,Android R8,将Gradle插件升级到4.2.0之后(在此之前,我没有这个问题),在构建发布版本时,XML资源文件的名称似乎发生了变化,例如从res/XML/settings\u master\u switch\u 1.XML到res/cb1.XML 这给我编写的库带来了一个问题,因为它采用了xml中给定的资源名称 <com.smp.masterswitchpreference.MasterSwitchPreference .. app:ms_includedPrefScr
res/XML/settings\u master\u switch\u 1.XML
到res/cb1.XML
这给我编写的库带来了一个问题,因为它采用了xml中给定的资源名称
<com.smp.masterswitchpreference.MasterSwitchPreference
..
app:ms_includedPrefScreen="@xml/settings_master_switch_1" />
该库的用户只需
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
甚至使用minifyEnabled false
生成问题
可以在此处找到带有演示应用程序的库
所以我假设我必须在这个库的使用者中添加某种类型的R8/Proguard或Gradle设置,以不更改xml资源的名称?这个规则是什么
我已经尝试在消费者应用程序的res/raw/keep.xml
中定义要保留的资源-
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@xml/settings_master_switch_1,@xml/settings_master_switch_2,@drawable/ic_baseline_cake_24.xml" />
如果没有成功,插件仍然会重命名XML资源。通常,人们可能希望保留class
R
:
-verbose
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}
-详细
-keepattributes内部类
-继续上课**
-继续上课**.R$*{
;
}
但为了保留特定的资源,还可以注释:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@xml/settings_master_switch_1" />
在我的例子中,我需要做的就是将attr声明从整数更改为字符串:
<attr name="ms_includedPrefScreen" format="string"/>
<attr name="ms_excludedPrefScreen" format="string"/>
我在消费者应用程序中尝试了这两种方法,但不幸的是,这两种方法都不适用于Gradle插件4.2.0,因此资源被重命名。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@xml/settings_master_switch_1" />
<attr name="ms_includedPrefScreen" format="string"/>
<attr name="ms_excludedPrefScreen" format="string"/>
app:ms_includedPrefScreen="xml/settings_master_switch_1"