2016-09-23 39 views
3

家长的问题:Android proguard, keep inner class的Android ProGuard的,保持内部类内部类

我的问题是,在我的Android项目内部类内部类

其中的SDK有A类,其中有两个静态内部类。在应用proguard后,发现它们被剥离。

public class A{ 
    .... 

    static class B{ 
    ... 
    static class D { 
     .... 
    } 

    } 

    static class C{ 
    ... 
    } 
} 

我proguard的看起来像这样

-keepattributes Exceptions, InnerClasses 
-keep class com.xxx.A 
-keep class com.xxx.A$* 

防止B类,C从ProGuard的。但是D班没有运气。我也尝试过-keep class com.xxx.A$**

+0

@TGMCians不工作 –

+0

试试这个'-keep类com.xxx * $ *' –

+0

* $ *不工作;只是-dontwarn com.xxx **了。我的构建要成功。我想我应该稍后再处理这个问题。 –

回答

0

我想你错过了Class规范,如ProGuard manual所示。

尝试更换:

-keep class com.xxx.A 

有了:

-keep class com.xxx.** {*;} 

我使用该规则具有下列文件和它的正常工作在Android 2.2.3工作室与构建工具25.0.1(以防万一那些可能影响正在使用的ProGuard的版本)

A.java

package com.xxx; 

public class A { 
    .... 

    public class B { 
    .... 

    public class C { 
    .... 
    } 
    } 
} 

正如你可以看到我的文件和你的唯一真正的区别是,我的内部类是公共的和非静态的。

如果不行

您可以随时使用的规则没有通配符。下面将做的伎俩:

-keep class com.xxx.A$B$D