Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 升级Gradle插件后,在发布版本中更改XML资源名称_Android_Android Gradle Plugin_Proguard_Android R8 - Fatal编程技术网

Android 升级Gradle插件后,在发布版本中更改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

将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_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"