2016-06-23 35 views
0

我正在開發一個gradle插件。它基於mapping.txt在proguard之後生成一個源java文件。內容如下所示。proguard如何跳過一些保留的名稱作爲映射結果

public class bmdb { 

    private static Map<Class<?>, Injector<Object>> map = new HashMap<>(); 

    static { 
     try { 
     map.put(a.a.b.c.class, new a.a.b.d()); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

    public static Map<Class<?>, Injector<Object>> a() { 
    return map; 
    } 
} 

而這個java文件將被編譯成一個類文件。但是,映射結果有時候會是java關鍵字,如a.a.for.class,a.a.int.class。編譯將失敗。

所以我想知道如果proguard有任何選項可以排除映射結果的一些單詞。

回答

0

最後,我發現proguard不支持這樣的配置。

我用以下workround:
1.我寫包含Java關鍵詞的字符串數組像以下:
String[] keyWords = ["do", "if", ...];
2.我會檢查ProGuard的結果,如果它是在上述陣列英寸如果否,則將使用正常的new abc(),並且如果是,則將使用反射Class.forName("for")

所以結果可能會像下面:

map.put(a.a.b.c.class, new d()); 
map.put(a.a.b.d.class, Class.forName("for").newInstance()); 
0

您可以指定一個自定義的模糊字典類的名稱,如認爲:

-classobfuscationdictionary dict.txt 

該文件應該被用於混淆,例如含有效字符/字符串的簡單文本文件:

a 
b 
c 
d 
e 
f 

你仍然可能會留下保留的單詞,但如果將所有元音排除,我認爲它應該工作得很好。

相關問題