android+proguard目录,Android Proguard 详解
一般的商業(yè)項(xiàng)目都需要對(duì)代碼進(jìn)行加密,Android提供了一種代碼混淆方法,介紹如下:
一、簡(jiǎn)介
1、簡(jiǎn)介
混淆器通過刪除從未用過的代碼和使用晦澀名字重命名類、字段和方法,對(duì)代碼進(jìn)行壓縮,優(yōu)化和混淆。結(jié)果是一個(gè)比較小的.apk文件,該文件比較難進(jìn)行逆向工程。因此,當(dāng)你的應(yīng)用程序?qū)Π踩舾?要求高),例如當(dāng)你授權(quán)應(yīng)用程序的時(shí)候,混淆器是一種重要的保護(hù)手段。
混淆器被集成在android 構(gòu)建系統(tǒng)中,所以你不必手動(dòng)調(diào)用它。同時(shí)混淆器僅在發(fā)布模式下進(jìn)行構(gòu)建應(yīng)用程序的時(shí)候才會(huì)運(yùn)行起來,所以在調(diào)試模式下構(gòu)建程序時(shí),你不必處理混淆代碼。讓混淆器運(yùn)行起來是可選擇的,但是推薦選上。
2.注意事項(xiàng)
在新版本的ADT創(chuàng)建項(xiàng)目時(shí),混碼的文件不再是proguard.cfg,而是project.properties和proguard-project.txt。
如果需要對(duì)項(xiàng)目進(jìn)行全局混碼,只需要進(jìn)行一步操作:
將project.properties的中
“# ?proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。
如果有一些代碼不能被混淆,比如需要加入了so文件,需要調(diào)用里面的方法,那么調(diào)用JNI訪問so文件的方法就不能被混碼。在導(dǎo)出的時(shí)候,可能不會(huì)報(bào)錯(cuò)。但是在手機(jī)上運(yùn)行的時(shí)候,需要調(diào)用so文件的時(shí)候,就會(huì)報(bào)某某方法無法找到。這個(gè)時(shí)候就需要用到proguard-project.txt。
二、在Eclipse中啟用ProGuard
1、確定Android SDK目錄下是否存在proguard文件夾
例如 ? D:\Environment\android-sdk-windows\tools\proguard
2、配置
1)檢查項(xiàng)目根目錄下是否存在proguard.cfg(或proguard-project.txt)文件,如果不存在(說明的當(dāng)前的項(xiàng)目是2.3以前的項(xiàng)目),需要新建一個(gè)2.3的android項(xiàng)目,從該項(xiàng)目中將proguard.cfg文件拷貝到你的項(xiàng)目根目錄中,無需改動(dòng)(除非你明白如何自定義自己的混淆策略),繼續(xù)下面步驟。
2)如果存在,則找到項(xiàng)目根目錄下的default.properties[如果你使用的是ADT14或者更高版本,那么項(xiàng)目中沒有default.properties文件,只有project.properties文件,找到project.properties文件即可]文件,在文件中增加一項(xiàng)配置:proguard.config=proguard.cfg
這樣就完成了配置
3.語法規(guī)則
# android 原始混淆模板
# -------------------------------------
# ----------------------------------
# 通過指定數(shù)量的優(yōu)化能執(zhí)行
# -optimizationpasses n
# ----------------------------------
-optimizationpasses 5
# ----------------------------------
# 混淆時(shí)不會(huì)產(chǎn)生形形色色的類名
# -dontusemixedcaseclassnames
# ----------------------------------
#-dontusemixedcaseclassnames
# ----------------------------------
# 指定不去忽略非公共的庫(kù)類
# -dontskipnonpubliclibraryclasses
# ----------------------------------
#-dontskipnonpubliclibraryclasses
# ----------------------------------
# 不預(yù)校驗(yàn)
# -dontpreverify
# ----------------------------------
# -dontpreverify
# ----------------------------------
# 輸出生成信息
# -verbose
# ----------------------------------
-verbose
# ----------------------------------
# 優(yōu)化選項(xiàng)
# optimizations {optimization_filter}
# ----------------------------------
-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
-keepclasseswithmembernames class * {
native ;
}
# -----------------
# modify 修改合并
# -----------------
-keep public class * extends android.view.View {
public (android.content.Context);
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#--------------------------
# 保護(hù)類型 -keepattributes 說明
# Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable,
# LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations,
# RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, and AnnotationDefault
# --------------------
-keepattributes **
-libraryjars /lib/rt.jar
# ----------------------
# 不壓縮指定的文件
# -dontshrink
# ----------------------
-dontshrink
# ----------------------
# 不優(yōu)化指定的文件
# -dontoptimize
# -----------------------
-dontoptimize
# -----------------------
# 不混淆指定的文件
# -dontobfuscate
# -----------------------
# ----- 混淆包路徑 -------
-repackageclasses ''
-flattenpackagehierarchy ''
-target 1.6
# -------- 以下是使用了 roboguice-1.1.2.jar 以及 guice-2.0-no_app.jar 功能需要保護(hù)的字段及類相關(guān) --------
-keep class com.google.inject.Binder
-keepclassmembers class * {
@com.google.inject.Inject (...);
}
-keepclassmembers class * {
void *(**On*Event);
}
-keepclassmembers class **.R$* {
public static ;
}
# ------ 編譯時(shí)需要用到的 jar 包
-libraryjars D:/dev_rc/android-sdk-windows/add-ons/addon_google_apis_google_inc_11/libs/maps.jar
# ------ 保護(hù) 谷歌第三方 jar 包,界面特效 ----------
-keep class android.support.v4.**
-dontwarn android.support.v4.**
# ------ 保護(hù)百度地址jar包 --------
-keep class com.baidu.mapapi.** { *; }
-dontwarn com.baidu.mapapi.**
# --- 打包時(shí)忽略以下類的警告 --
-dontwarn com.classpackage.AA
#-keepnames class * implements java.io.Serializable
# ---------保護(hù)所有實(shí)體中的字段名稱----------
-keepclassmembers class * implements java.io.Serializable {
;
}
# --------- 保護(hù)類中的所有方法名 ------------
-keepclassmembers class * {
public ;
}
如有問題請(qǐng)留言,轉(zhuǎn)載注明出處。
總結(jié)
以上是生活随笔為你收集整理的android+proguard目录,Android Proguard 详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金佑人生什么时候取钱
- 下一篇: 新建文件夹html文件,JS实现新建文件