2016-08-05 97 views
5

我已閱讀過多個線程,但無法找到任何答案。我在這裏有很多問題。讓我描述一下:ProGuard不會生成映射文件

  • 我對ProGuard瞭解不多,但根據我的信息,它在某種程度上混淆了Android代碼。我的問題是我需要在某個地方啓用它嗎? minifyEnabled在我的Gradle文件中是false。這是否完全禁用ProGuard?
  • 爲了消除Firebase上的崩潰並獲取堆棧跟蹤,我需要映射文件。我無法在任何地方找到它。在應用程序/生成/輸出文件夾,我只有

Folder

然後我讀的地方約proguard-rules.pro文件。它只是有一些評論,沒有代碼。然後我把它放在它裏面:-printmapping mapping.txt。然後再次生成簽名APK,仍然沒有成功。我錯過了什麼?

編輯1:如果我必須執行一些adb終端命令,請描述步驟。我以前從未使用過終端。

回答

7

在你gradle這個文件您必須專門設置minifyEnabled選項設置爲true。
這使混淆。通過這樣做,它也會應用您在'proguard-rules.pro'文件中定義的混淆規則。

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

可以打印映射種子通過應用相應的命令

-printseeds obfuscation/seeds.txt 

使用(請注意,您既需要完全解碼/理解已加密的代碼)
-printmapping obfuscation/mapping.txt 

一個基本的proguard文件的例子是:

-optimizationpasses 5 
-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-verbose 

-dump obfuscation/class_files.txt 
-printseeds obfuscation/seeds.txt 
-printusage obfuscation/unused.txt 
-printmapping obfuscation/mapping.txt 

問候,

+0

謝謝你的細節。啓用Proguard並生成簽名的apk後出現錯誤。調試APK雖然成功但未簽名。這裏是gradle消息:https://db.tt/Xhm8C10T –

+1

我有點擔心'無法找到引用類java.awt.datatransfer.DataFlavor'的例子。看起來像你應該保持這個代碼混淆。在我看來,你不應該像改造,okttp等混淆圖書館。這是因爲這樣做沒有意義。如果圖書館是公開的,即使你混淆了它,人們仍然可以從他們的網站獲得它。你應該只關注混淆你的財產(如你自己的代碼) –

+0

我應該做一些新的線程? –

1
  1. 您需要將minifyEnabled設置爲true以啓用Proguard
  2. 對於一些圖書館,你需要在proguard-rules.pro內寫一些行,讓他們不被Proguard混淆。此頁面上看到 「配置ProGuard的」 部分,以瞭解在爲Firebase補充:https://firebase.google.com/docs/database/android/start/
+0

我使ProGuard,並將生成簽署APK後得到一個錯誤。調試APK雖然成功但未簽名。以下是gradle消息:https://db.tt/Xhm8C10T –

0
  1. 設置minifyEnabled爲true。
  2. Build生成APK。
  3. 查找在映射文件的輸出文件夾。[不乾淨的項目或將消失]
+0

啓用Proguard並生成簽名的apk後出現錯誤。調試APK雖然成功但未簽名。這裏是gradle消息:https://db.tt/Xhm8C10T –

+0

使用-dontwarn標誌,在你的項目中使用的所有庫軟件包,如proguard規則中的「-dontwarn com.android.volley。**」 –

+0

添加 - ignorewarning工作!應用程序的功能不應該有問題,對吧? –

2

嘗試檢查設置 - > InstantRun ......它必須被禁用:)

+0

這對我有用! –