开发完一个应用,要提高代码的安全性,proguard是混淆代码的一种方法,上网搜了很多资料,实验了很多次,总结了一下我所遇到的情况,分享一下……
项目中需要有两个文件:
1,proguard.cfg——混淆器的配置文件,里面记录了怎么混淆代码的规则,该文件是项目自动生成的文件(如果你的项目里面没有,自己建一个或copy一个都行)
2,project.properties——这个必须是项目自动生成的文件,有的项目自动生成的文件叫default.properties,都一样
*******proguard.cfg中代码如下************************************************
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
//下面这行代码是 忽略警告,避免打包时某些警告出现
-ignorewarnings
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
//下面这段代码是 防止第三方jar包被混淆,避免程序调用第三方jar时异常
-dontwarn
-libraryjars libs/Baidu_Mobstat_Android_SDK.jar //这里就声明上你所导入的第三方jar包(名字不能错哦)
-libraryjars libs/baidumapapi.jar
-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses
//下面的代码是 保留一些以下情况的类和方法
1,继承自Activity、Application、Service、BroadcastReceiver、ContentProvider、BackupAgentHelper、Preference和ILicensingService的子类可能会被外部调
2,含有native方法的类、构造函数从xml构造的类(一般为View的子类)、枚举类型中的values和valueOf静态方法、继承Parcelable的跨进程数据类
3,系统还有可能混淆删掉一些它认为不重要的代码,而导致我们的程序异常,所以要在proguard配置文件里特意声明保留某些类或方法
-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 <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keep class com.baidu.mobstat.**{*;} //这几行就是我导入的第三方jar包中的类
-keep class com.baidu.mobstat.a.**{*;}
-keep class com.baidu.mapapi.**{*;}
-keep class com.baidu.mapapi.cloud.**{*;}
*******project.properties中代码如下************************************************
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-8
//这行就是 指定混淆配置文件,启动混淆机制,系统就会在发布前对代码进行混淆(放在target=android-8上面或下面没有差别)
proguard.config=proguard.cfg
不对第三方jar包进行不混淆声明,混淆后的apk有可能安装不上,或者软件打不开,或者某部分功能异常