A. android里proguard.cfg文件有什麼用
android里proguard.cfg文件是代碼混淆用,是為了防止你的apk被反編譯而代碼全部暴露.不過目前的代碼混淆只是把命名修改了一下而已,真正反編譯時還是可以想辦法還原出來的,所以不能真正的混淆。
其詳解為:
-injars androidtest.jar【jar包所在地址】
-outjars out【輸出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的庫的jar,用於解析injars所指定的jar類】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
- 【指定不去忽略非公共的庫類。 】
-dontpreverify 【不預校驗】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【優化】
-keep public class * extends android.app.Activity【不進行混淆保持原樣】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不進行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【對該方法不進行混淆】
}
-keepclasseswithmembernames class * { 【保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)】
native <methods>;
}
-keepclasseswithmembers class * { 【保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {【保護指定類的成員,如果此類受到保護他們會保護的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保護指定的類文件和類的成員】
public static final android.os.Parcelable$Creator *;
}
B. android代碼混淆為什麼不混淆activity
一般四大組件不混淆的,主要有以下原因:
1.四大組件聲明必須在manifest中注冊,如果混淆後類名更改,而混淆後的類名沒有在2.manifest注冊,是不符合Android組件注冊機制的.
3.外部程序可能使用組件的字元串類名,如果類名混淆,可能導致出現異常
4.四大組件是要配置在清單文件的,混淆了找不到
C. 【Android性能優化】:ProGuard,混淆,R8優化
Android性能優化中,關於ProGuard、混淆和R8優化的要點如下:
ProGuard: 主要功能:包括壓縮、優化和混淆。 工作流程:包含shrink、optimize、obfuscate和preverify四步驟。 作用:通過混淆代碼,增加逆向工程的難度,保障App安全。
混淆: 關鍵:在於合理使用混淆規則,如keep class保留類名,keepclassmembers保護類的部分方法。 注意:需要處理特定場景,如AndroidManifest中的類、Gson/JSON解析、第三方庫、WebView的JS調用、Parcelable和enum類型的保護規則。 保留:需要保持Serializable、自定義控制項類、Activity子類、Parcelable介面等關鍵部分。
R8優化: 取代:從Android Studio 3.4.0開始,R8逐步取代ProGuard。 優勢:在代碼縮減、資源縮減、混淆和優化方面展現出了卓越性能。 配置:使用keep或@keep註解來保留特定代碼,可以添加額外的自定義規則到proguardrules.pro文件中。 處理:開啟minifyEnabled為true,R8會智能檢測並移除未使用的代碼,但需注意處理反射調用和JNI交互,以確保代碼的正常運行。 資源縮減:通過shrinkResources屬性實現資源縮減,需要設置白名單以避免不必要的資源混淆。 優化選項:如optimizationpasses、dontoptimize等,能幫助我們更好地進行代碼精簡。
綜上所述,ProGuard和R8都是Android性能優化中重要的工具,通過合理使用混淆規則和R8的優化選項,可以有效地提升應用的性能和安全性。
D. Android 開發怎樣做代碼加密或混淆
首先因為基於java,所以別指望別人完全無法反編譯。
用proguard吧,好處是就算被反編譯,沒有規律的變數名至少會造成閱讀上的難度。
現在android sdk插件可以幫你自動生成proguard配置腳本,對於簡單的混淆來說,完全可以實現傻瓜式代碼混淆。如果你要保留一些關鍵字,請參考http://proguard.sourceforge.net/FAQ.html的命令說明修改proguard配置文件。
E. android打混淆包以後,BuildConfig.DEBUG還是true不是說,打混淆包以後,這個值會變成false么
混淆不混淆和BuildConfig.DEBUG無關,BuildConfig.DEBUG只取決於你build的方式。平時build都是true,只有通過export(導出)方式時才是false。導出功能在右鍵點擊工程->Android Tools -> Export Signed Application Package。
再找不到的話就看這個問答http://stackoverflow.com/questions/9855834/when-does-adt-set-buildconfig-debug-to-false
建議學android變成多上stackoverflow,很多有用答復。