1.設置混亂
在項目下找到project.properties文件。
將proguard . config = $ { SDK . dir }/tools/proguard/proguard-Android . txt:proguard-project . txt添加到文件中。這是系統性的。
您也可以使用自己的混淆文件(以便您可以配置自己的壹些東西),轉到sdk.dir}/tools/proguard/並將proguard-android.txt文件復制到本地項目。
然後將其設置為proguard . config = proguard-Android . txt。
Project.properties文件:
【java】查看純文本
# proguard . config = $ { SDK . dir }/tools/proguard/proguard-Android . txt:proguard-project . txt
proguard . config = proguard-Android . txt
#項目目標。
target=android-17
injarandroidtest的地址。罐子包。
-outjars輸出地址
-library jars‘d:\ Android-SDK-Windows \ platforms \ Android-9 \ Android . jar‘指的是庫的jar,用於解析injars指定的jar類。
-優化通過5次
-dontusemixedcaseclassnames在混淆時不會產生各種類名。
-dontskipnoppubliclibraryclasses指定不應忽略非公共* * *庫類。
-未經預先驗證,請勿預先驗證。
-冗長
優化!代碼/簡化/算術!field/*,!分類/合並/*優化
-keep public class * extend Android . app . activity不混淆,保持不變。
-保留公共類*擴展android.app.Application
-保留公共類*擴展android.app.Service
-保持公共類*擴展Android . content . broadcast receiver
-保持公共類*擴展Android . content . content provider
-保持公共類*擴展Android . app . backup . backupagenthelper
-保持公共類*擴展android.preference.Preference
-保留公共類com . Android . vending . licensing . ilisensingservice
-保留公共抽象接口com.asqw.android.Listener{
公共保護<。方法& gt;所有方法都不會混淆。
}
-保留公共類com.asqw.android{
public void Start(Java . lang . string);這種方法不混亂。
}
-keepclasswithmembernames class * {如果所有指定的類成員都存在(在壓縮步驟之後),則保護指定的類和類成員的名稱。
本地& lt方法& gt;
}
-keepclasswithmembers class * {保護指定的類和類成員,前提是所有指定的類和類成員都存在。
公共& ltinit & gt(android.content.Context,Android . util . attributeset);
}
-keepclasseswithmembers class * {
公共& ltinit & gt(android.content.Context,android.util.AttributeSet,int);
}
-keep class members class * extend Android . app . activity {保護指定類的成員,如果此類受到保護,它們將得到更好的保護。
public void *(Android . view . view);
}
-keepclassmembers枚舉* {
public static * *【】values();
public static * * value of(Java . lang . string);
}
-keep class * implementandroid . OS . parcelable {保護指定的類文件和該類的成員。
public static final Android . OS . parcelable $ Creator *;
}
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =常見異常= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
參考:/group/Android-developers/browse _ thread/thread/ECA 3 b 0 F5 ce 6 ad 00 f
我刪除項目中生成的proguard文件夾(此時文件夾為空),然後再次運行項目,就可以了。
情況3:
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】progguard返回了錯誤代碼1。參見控制臺
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】Java . io . io異常:無法讀取【proguard。ClassPathEntry@106082)(沒有這樣的文件或目錄)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。input reader . readinput(input reader . Java:230)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。input reader . readinput(input reader . Java:200)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。input reader . readinput(input reader . Java:178)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。inputreader . execute(inputreader . Java:100)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。proguard . readinput(proguard . Java:195)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。proguard . execute(proguard . Java:78)
【2011-10-21 13:22:32-ZMKSMarket _ Build _ v 1.0】
在普羅瓜德。proguard . main(proguard . Java:499)
拋出這樣壹個異常的原因是第三方jar的引用路徑錯誤,沒有找到需要忽略的jar包。
= = = = = = = = = = = = = = = = =官方文檔翻譯= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
原文
/guide/developing/tools/proguard . html
普羅瓜德
在這份文件中。
啟用程序
配置程序
解碼模糊的堆棧跟蹤
已發布應用程序的調試註意事項
看見
ProGuard手冊?
ProGuard重走手冊?
混淆器通過刪除從未使用過的代碼並使用模糊的名稱重命名類、字段和方法來壓縮、優化和混淆代碼。結果是壹個相對較小的。apk文件,這是很難逆向工程。因此,當您的應用程序對安全性敏感(要求苛刻)時,例如當您授權應用程序時,模糊處理程序是壹種重要的保護手段。
混淆器集成在android構建系統中,因此您不必手動調用它。同時,混淆器僅在以發布模式構建應用程序時起作用,因此在以調試模式構建程序時不必處理混淆代碼。運行模糊處理程序是可選的,但建議這樣做。
本文檔描述了如何啟用和配置模糊處理程序,以及如何使用跟蹤工具對模糊處理後的堆棧重新跟蹤進行解碼。
啟用混淆器啟用程序
當您創建壹個新的Android項目時,將在項目的根目錄中自動創建壹個proguard.cfg文件。該文件定義了混淆器如何優化和混淆您的代碼,因此了解如何根據您的需求定制它非常重要。默認配置文件只涵蓋了通常情況,因此可能需要根據您的需求進行編輯。接下來的內容是關於通過自定義模糊處理器配置文件來配置模糊處理器。
要在Ant或Eclipse構建過程中啟用混淆器,您可以在
如果您將proguard.cfg文件保留在默認位置(項目的根目錄),您可以像這樣指定位置:
proguard.config=proguard.cfg
同樣,您可以將文件放在任何位置並指定其絕對路徑。
proguard . config =/path/to/proguard . CFG
當您在發布模式下構建應用程序時,或者通過運行ant release,或者通過使用Eclipse中的導出向導,構建系統將自動檢查是否設置了proguard.config屬性。如果設置了模糊處理程序,它會在將所有內容打包到。apk文件。在調試模式下構建不會調用模糊處理程序,因為調試將更加繁重。
運行模糊處理程序後的輸出文件是:
dump.txt
中所有類文件的內部結構。apk包。
mapping.txt
列出了源代碼和易混淆的類、方法和屬性名稱之間的映射。該文件對於構建後的錯誤報告非常有用,因為它將混亂的堆棧跟蹤信息轉換為源代碼中的類、方法和成員名稱。有關更多信息,請參見解碼混亂後的堆棧跟蹤信息。
seeds.txt
列出那些沒有混淆的類和成員。
usage.txt
列出了從。apk。
這些文件放在以下目錄中:
註意:每次在發布模式下構建時,這些文件都將被最新的文件覆蓋。因此,每次發布程序時,請保存這些文件的副本,以避免在構建過程中產生混淆的錯誤報告。有關保存這些文件的重要性的更多信息,請查看程序發布的調試註意事項。
混淆器配置(程序配置)
在某些情況下,proguard.cfg文件的默認配置可以滿足要求。然而,對於混淆器來說,在大多數情況下很難做出正確的分析,它可能會刪除對其無用但對程序真正需要的代碼。壹些例子如下:
僅引用AndroidManifest.xml文件的類。
壹個叫做JNI的方法。
動態引用的屬性和方法。
& ltproject _ root & gt使用Ant時的/bin/proguard
& ltproject _ root & gt/proguard當您使用Eclipse時。
解碼模糊的堆棧跟蹤。
當代碼混亂並輸出堆棧調試消息時,這些方法的名稱也會混亂。雖然可以進行調試,但調試變得困難。幸運的是,無論模糊處理程序何時運行,它都會輸出到文件中
Windows系統中的Retrace.bat腳本命令或Linux和Mac OS X系統中的retrace.sh腳本命令可以將混亂的堆棧調試信息轉換為可理解的文件。它被放置在
retrace . bat | retrace . sh【-verbose】mapping . txt【& lt;堆棧跟蹤文件& gt]
例如:
retrace . bat-verbose mapping . txt obfuscated _ trace . txt
如果妳沒有為
已發布應用程序的調試註意事項。
保存已發布給用戶的每個程序的mapping.txt文件。通過保存發布構建版本的mapping.txt文件的副本,確保當用戶遇到bug並向您提交混亂的堆棧調試跟蹤信息時,您可以調試並修復問題。程序的mapping.txt文件在每次發布和構建時都會被覆蓋,因此您必須註意保存正確的版本。
例如,假設您已經發布了壹個應用程序,並且正在新版本中繼續開發和添加新功能。然後您立即啟動混淆器並創建壹個新的發布版本。此操作會覆蓋mapping.txt文件。用戶提交了當前發布版本的錯誤報告,其中包含堆棧調試信息。您無法再調試用戶的堆棧信息,因為與用戶本地版本對應的mapping.txt文件不存在。還有許多其他覆蓋mapping.txt文件的情況,因此您應該確保擁有可能需要調試的每個版本的副本。