android应用发布的时候一般需要对代码混淆打包,这里贴上我自己的proguard配置文件:
-libraryjars libs/gson-2.2.4.jar #项目里用到的第三方jar包
-libraryjars libs/httpmime-4.1.3.jar
-libraryjars libs/ImageLoader.jar
-libraryjars libs/libammsdk.jar
-libraryjars libs/mta-sdk-1.6.2.jar
-libraryjars libs/nineoldandroids-2.4.0.jar
-libraryjars libs/open_sdk_r4889.jar
-libraryjars libs/rebound-core.jar
-libraryjars libs/universal-image-loader-1.9.3.jar
-libraryjars libs/volley.jar
-libraryjars libs/weibosdkcore.jar
-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合
-ignorewarning # 忽略警告,避免打包时某些警告出现
-dontskipnonpubliclibraryclasses #指定不去忽略非公共的库类
-dontoptimize #不优化输入的类文件
-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 * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService
-keep class com.sina.**{*;}
-keep class com.google.gson.stream.** { *; }
-keep class com.csm.model.** { *; }
-dontwarn android.support.v4.** # 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错
-dontwarn android.annotation
-dontwarn org.apache.commons.net.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-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 * { #保持枚举enum类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { #保护继承Parcelable的类
public static final android.os.Parcelable$Creator *;
}
-keepattributes *Annotation* #保护注解</span>
下边附一篇比较详细的讲解:
<span style="font-size:18px;">-include {filename} 从给定的文件中读取配置参数
-basedirectory {directoryname} 指定基础目录为以后相对的档案名称
-injars {class_path} 指定要处理的应用程序jar,war,ear和目录
-outjars {class_path} 指定处理完后要输出的jar,war,ear和目录的名称
-libraryjars {classpath} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
-dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclassmembers 指定不去忽略包可见的库类的成员。
保留选项
-keep {Modifier} {class_specification} 保护指定的类文件和类的成员
-keepclassmembers {modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-keepnames {class_specification} 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
-keepclassmembernames {class_specification} 保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
-keepclasseswithmembernames {class_specification} 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-printseeds {filename} 列出类和类的成员-keep选项的清单,标准输出到给定的文件
压缩
-dontshrink 不压缩输入的类文件
-printusage {filename}
-whyareyoukeeping {class_specification}
优化
-dontoptimize 不优化输入的类文件
-assumenosideeffects {class_specification} 优化时假设指定的方法,没有任何副作用
-allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员
混淆
-dontobfuscate 不混淆输入的类文件
-printmapping {filename}
-applymapping {filename} 重用映射增加混淆
-obfuscationdictionary {filename} 使用给定文件中的关键字作为要混淆方法的名称
-overloadaggressively 混淆时应用侵入式重载
-useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆
-flattenpackagehierarchy {package_name} 重新包装所有重命名的包并放在给定的单一包中
-repackageclass {package_name} 重新包装所有重命名的类文件中放在给定的单一包中
-dontusemixedcaseclassnames 是否使用大小写混写
-keepattributes {attribute_name,...} 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and
InnerClasses.
-renamesourcefileattribute {string} 设置源文件中给定的字符串常量</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。