小编Sny*_*rsK的帖子

selectableItemBackground作为layer-list中的项目

我已经从Google IO Schedule应用程序源(https://github.com/google/iosched)复制了一个文件

selected_navdrawer_item_background.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/backgroundColor">
        <shape>
            <solid android:color="#12000000" />
        </shape>
    </item>
    <item android:drawable="?android:selectableItemBackground"/>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我想用它来突出显示NavigationDrawer中当前选定的项目.我的问题是,当我启动我的应用程序时,它会引发异常.

这是我认为的重要路线.

caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #22:
<item> tag requires a 'drawable' attribute or child tag defining a drawable
Run Code Online (Sandbox Code Playgroud)

第22行是这一行

<item android:drawable="?android:selectableItemBackground"/>
Run Code Online (Sandbox Code Playgroud)

我不知道问题是什么,我从源头复制了它而没有调整它.它在他们的应用程序中运行良好.

我试图改变?android:selectableItemBackground?attr/selectableItemBackground,但它给了我同样的异常.我似乎无法找到任何其他建议的解决方案.

如果有人知道是什么导致了这一点,请帮助我.

android android-xml android-drawable

26
推荐指数
1
解决办法
2899
查看次数

Dexguard / Proguard使应用程序在枚举开关上崩溃

将Dexguard从7.0.12更新到7.1.22后,我在枚举开关上遇到崩溃。

这仅在Dexguard在我们的项目上运行时才会发生(我想这是由Proguard问题引起的)。

如果我使用硬编码值,则不会发生崩溃。

当然,我想避免使用硬编码值。

碰撞

发生的崩溃如下

java.lang.NoClassDefFoundError: Failed resolution of: Lif;
Run Code Online (Sandbox Code Playgroud)

这发生在陈述的行上switch(type) {(见下文)

应用程序崩溃的一些示例代码(假设MyEnum是课程的Enum):

MyEnum type = MyEnum.SomeValue;

switch (type) {
    case SomeValue:
        // Do something
        Log.i("Tag", "Hello world!");
        break;
}
Run Code Online (Sandbox Code Playgroud)

假设的序数值MyEnum.SomeValue为1。

如果我更改case SomeValue:case 1:预期的效果。

我尝试过的

我不知道为什么会发生此崩溃。我试图添加这些Proguard规则。

-keep enum * { *; }
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

但这不能解决问题。

更新

我刚刚检查了映射文件,所有枚举名称都保留了。现在,我对所发生的事情一无所知。

my.identifier.MyEnum -> my.identifier.MyEnum:
    my.identifier.MyEnum SomeValue -> SomeValue
    my.identifier.MyEnum[] $VALUES -> $VALUES
    6:6:my.identifier.MyEnum[] …
Run Code Online (Sandbox Code Playgroud)

enums android proguard dexguard

5
推荐指数
1
解决办法
652
查看次数