android混淆器(Proguard)小记

开发完一个应用,要提高代码的安全性,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有可能安装不上,或者软件打不开,或者某部分功能异常

你可能感兴趣的:(android混淆器(Proguard)小记)