转载 点击打开链接
1.引入默认的打包配置 在project.properties中添加语句 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt 新建proguard-android.txt 拷贝${sdk.dir}/tools/proguard/proguard-android.txt文件中的配置到你的工程的proguard-android.txt中 如下所示 #系统配置 # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** 2.第三方jar包的配置 1)fastjson配置 #fast json相关 -libraryjars libs/json.jar #fastjson的jar包不要混淆 -keep class com.alibaba.fastjson.** { *; } #fastjson包下的所有类不要混淆,包括类里面的方法 -keepattributes Signature #这行一定要加上,否则你的object中含有其他对象的字段的时候会抛出ClassCastException -dontwarn com.alibaba.fastjson.** #告诉编译器fastjson打包过程中不要提示警告 2)xutils配置 #xutils相关 -libraryjars libs/xUtils-2.4.7.jar #xutils的jar包不要混淆 -keep class com.lidroid.** { *; } #xutils包下所有类不要混淆,包括类里面的方法 -keep class * extends java.lang.annotation.Annotation { *; }#注解包下的所有内容不要混淆,ViewUitls有用到 3)新浪微博配置 -libraryjars libs/weibosdkcore.jar #微博jar包不要混淆 -keep class com.sina.weibo.sdk.** { *; } #微博报下所有类及类里面的内容都不要混淆 4)腾讯开放平台配置 -libraryjars libs/mta-sdk-1.6.2.jar #腾讯平台jar包不要混淆 -keep class com.tencent.** { *; } #腾讯平台jar包中所有类及类里面的内容不要混淆 5)图片异步加载组件universal-image-loader配置 #图片加载 -libraryjars libs/universal-image-loader-1.8.4-with-sources.jar #imageLoader的jar包不要混淆 -keep class com.nostra13.universalimageloader.** { *; } #imageLoader包下所有类及类里面的内容不要混淆 6)友盟统计组件配置 #友盟相关 -libraryjars libs/umeng-analytics-v5.2.3.jar #友盟统计的jar包不要混淆 -keep class com.umeng.** { *; } #友盟统计jar包下的所有类及类里面的所有内容不要混淆 7)自定义控件及组件不要打包混淆 如果我们自定了ListView,ScrollView,Gallery这些组件的时候,我们就不能混淆这些自定义的类了,因为在layout里面我们已经引用这个了类,而且已经写死了。同样四大组件也是不能打包混淆的 #四大组件不能混淆 -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.view.View {*;} 8)数据适配器adapter不要混淆 #adapter也不能混淆 -keep public class * extends android.widget.BaseAdapter {*;} 如果你使用了CusorAdapter,添加下面这行 -keep public class * extends android.widget.CusorAdapter{*;} 同样如果你觉得麻烦,就直接将BaseAdpater换成Adapter 9)数据模型不要混淆 -keepnames class * implements java.io.Serializable #比如我们要向activity传递对象使用了Serializable接口的时候,这时候这个类及类里面#的所有内容都不能混淆 -keepclassmembers class * implements java.io.Serializable { *; } -keep class com.xx.xxx.domain.* {*;} -keep class com.xx.xxx.vo.* {*;} -keep class com.xx.xxx.model.* {*;} 这里的包名取决你自己定义的model所在包的名称 10)百度地图组件配置 #百度地图相关 -libraryjars libs/baidumapapi_v2_4_0.jar #地图相关的jar包不要混淆 -keep class com.baidu.** { *; } #地图组件包括图层、定位等接口所有的类及类里面的内容都不要混淆 -keep class vi.com.gdi.bgl.android.**{*;} #交通实况相关的类及类里面的所有内容不要混淆 -libraryjars libs/locSDK_3.1.jar #定位jar包不要混淆 -libraryjars libs/armeabi/libBaiduMapSDK_v2_4_0.so #地图相关的C++编译的可执行文件(引擎)不要混淆 -libraryjars libs/armeabi/liblocSDK3.so #定位相关的C++编译的可执行文件(引擎)不要混淆 这里要特别说明的是百度地图这个apiKey,一定要注意测试的时候与打包发布时候的SHA1是不一样的,所以需要准备两个apiKey。 所以打包的时候一定要把apiKey设置成打包所需的apiKey,否则打包后的apk文件运行后图层无法加载,但是定位功能不受影响 具体的操作是在打包最后一步把你的SHA1码拷贝一份到应用控制台重新生成一个key,如果你使用的是baidumapapi3.0以上的SDK就没有这么多麻烦事了 打包所需key生成如下图所示 |