资源NotFoundException

时间:2017-05-22 17:54:57

标签: android proguard

我尝试构建apk的发布版本并在Honor 5x(api 23)上启动时出错:

Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class com.google.android.gms.common.SignInButton
File res/color/abc_hint_foreground_material_light.xml from color state list resource ID #0x7f0d01e7

同时app在模拟器(api 25)上没有崩溃。 我试图将此添加到proguard规则,但它没有帮助:

-dontwarn com.google.android.gms.**
-keep class com.google.android.gms.** { *; }
-keepclassmembers class **.R$* {
       public static <fields>;
}

构建类型:

release {
            shrinkResources true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            debuggable true
            minifyEnabled true
        }

我使用android studio 3.0 canary 1,支持库25.3.1,构建工具25.0.2和firebase-ui 1.2.0

请帮我找一个解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

I am facing similar problems when using "shrinkResources true".

Later I got help with reference to this section Customize which resources to keep复制文本。

  

如果您希望保留或丢弃某些特定资源,请创建一个   项目中带有标签的XML文件,并指定每个   保留在工具中的资源:保留属性,并将每个资源   在tools:discard属性中丢弃。这两个属性都接受   以逗号分隔的资源名称列表。您可以使用星号   字符作为通配符。

将白名单添加到路径“ res / raw /”中的“ keep.xml”文件中, 用来保留由于“ shrinkResources true”而丢失的资源。

例如“ res / raw / keep.xml”

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
    tools:discard="@layout/unused2" />