2016-09-23 64 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