2014-12-03 74 views
3

我以前曾經在Proguard指定的項目中使用過每個項目,最終都放棄了這個項目,因爲它導致了許多問題,導致它無法使用,並導致資源耗盡。但是我目前的項目確實需要混淆才能使逆向工程變得更加困難。由於我使用的Android Studio和搖籃我啓用了它在構建配置:如何獲得一個簡單的Android(Studio)Proguard配置工作

release { 
     runProguard true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.release 
    } 

我再建一個發佈版本,看看292頁的警告和建設的失敗。大多數情況如下,並涉及到庫(改造,約達時間,Butterknife等)

Warning:butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.TypeElement 

OK,所以我認爲它是優化掉庫中的部分。所以,我想加入這樣的線給proguard-rules.pro文件(在搖籃文件,並自動創建由Android工作室指定):

-keep class butterknife.internal.** { *; } 

沒有區別。好的,所以我會嘗試禁用所有縮小和優化,希望只能從混淆中受益(即使公認會減少混淆的好處)。我添加了這些行Proguard的配置文件:

-dontshrink 
-dontoptimize 

我重新編譯,絕對沒有什麼變化,我還是留下了292個相當無意義的編譯警告。現在我真的很困惑。

  • 我該如何讓100%確定Proguard實際上是在閱讀我的Proguard配置文件?還是使用它,但我設置了一個不正確的選項?
  • 什麼可以添加到Proguard文件,以減少其工作只是混淆,所以我有一個Proguard啓用構建配置,作爲一個起點(沒有打破我的應用程序),並沒有優化掉任何代碼。

我希望有任何幫助可以幫助減少我對Proguard的仇恨。

回答

0

在你的proguard配置文件中添加以下內容,這樣它就不會讓你的butterknife庫變得麻木。

-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewInjector { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 

這裏是同一個問題一個github上討論環節,https://github.com/JakeWharton/butterknife/pull/117#issuecomment-51292624

+0

你的回答可以幫助在加上幾行影響了身材,所以我知道正在使用ProGuard的配置文件。但我不想逐個修復每個庫,我想禁用所有優化,刪除代碼,所以Proguard只會混淆代碼。我嘗試過使用你提到的方法(特別是 - 以前沒有使用過的方法),所以添加「-dontwarn okio。**」這樣的行可以讓我解決構建警告並創建一個很棒的APK,但是APK以各種各樣的方式崩潰,它並非沒有Proguard。我需要停止Proguard刪除代碼。 – 2014-12-04 10:23:31

+0

看看Proguard手冊,看起來像我需要的是保持一切的能力。我想從不刪除任何代碼的位置開始,只是優化混淆,但我不知道如何保留所有代碼,似乎需要我單獨地將每個類錯誤地刪除,但這不是直截了當的。 – 2014-12-04 11:23:55

相關問題