2011-05-21 30 views
12

我在我的一些.xml佈局文件中爲我的android應用程序使用了屬性,但ProGuard在我的代碼運行時從我的代碼中刪除了這些方法,因爲我的代碼中沒有任何代碼曾經調用它們。我想將它們命名爲listener_functionName,並使用通配符,如-keep listener_*(我知道這是不正確的,但希望它能說明我的目標)。如何告訴ProGuard保留用於onClick的功能?

如果這可能會很好,但如果不是,我仍然需要知道如何在proguard.cfg文件中指定這些函數。任何幫助表示讚賞。

回答

18

根據proguard文檔:

字段和方法也可以是使用正則表達式指定 。 名稱可能包含以下內容 通配符:?匹配方法名稱中的任何單個 字符。 *匹配方法名稱的任何部分。

所以,你會發現指定

-keep class com.example.MyClass { 
    public void listener_*(android.view.View); 
} 
在你的ProGuard標誌

+0

嗨迭戈,請你看看我的問題[這裏](http://stackoverflow.com/q/37314760/3287204)?謝謝...... – 2016-05-23 12:40:53

3

您可以在這樣所有的類做一次:

-keepclasseswithmembers class * { 
    void listener_*(...); 
} 
+0

好的建議,儘管你應該使用-keepclasseswithmembers而不是-keepclasseswithmembernames,以防止重命名*和*的方法被刪除。 – 2011-09-19 21:17:25

+0

你說得對。我在我的配置文件中使用了-dontshrink,並且它與之相同,但通常-keepclasseswithmembers更好。我以這種方式編輯了我的答案。 – ggurov 2011-09-20 08:58:46

0

的多一點貪婪的辦法,應該保留所有「點擊」的方法:

-keepclassmembers class * { 
    public void * (android.view.View); 
} 

==>這樣基本上每一個擁有Android View作爲唯一參數的公共方法都應該能夠在ProGuard中生存下來。