1.引入默认的打包配置
拷贝${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生成如下图所示
拷贝${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生成如下图所示