2013-09-25 73 views
1

我有一個類,看起來像這樣:如何保持外部類而混淆的內部類

public class MyClass { 
    private class MyInnerClass { 
    public void someFunc() { } 
    } 

    public void usefulMethod() { 
    ... some stuff... 
    nativeUsefulMethod(); 
    } 

    private native void nativeUsefulMethod(); 
} 

我需要保持的所有本地函數的方法名稱,以及包含它們的類,爲了使本機代碼正常工作。好像沒有什麼問題:

-keepnames class * { 
    native <methods>; 
} 

當我看導致罐子,我看到MyClass的和nativeUsefulMethod()依然存在,而usefulMethod()已被模糊處理。好。但是,內部類仍被命名爲「MyClass $ MyInnerClass」。它不包含本地方法,所以我希望它被稱爲「MyClass $ a」或只是「a」。

我測試了將「-keepnames」更改爲「-keepclassmembernames」,並且兩者的類名都被混淆了。這絕對是保持內部類名稱的這個指令。有沒有辦法來混淆外層,但不是內部類名?

回答

1

合理配置本機方法是:

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

見的ProGuard手冊>例子>Processing native methods

+0

事實上,我發現,獨立,但沒有回去檢查結果。 -keepnames class * {...}會導致所有*類名保持不變,而我只在內部類中注意到它。當使用正確的指令時,內部類將被正確模糊處理。 – D0SBoots