`

通过SDK自带ProGuar工具 对 dandroid jar(sdk)包混淆处理

阅读更多

        好长时间没有写技术博客了,转眼间已经有5年没有写,最近有点时间,打算把这几年里积累都发表贡献出来,希望广大博友多支持和拍砖,进入正题。

        android 开发过程中会遇到自己开发(封装)的jar包需要提供给别人使用,这时候又不想把源码暴露给他人,所以就会用到jar包混淆 。再有就是网络提共的很多示例或者其它人写的方法都不起作用,经过小弟一周多来的努力,终于成功了,以下就是经验之谈。

1、下载最新的混淆工具

      如果jdk 是1.8及以上的,下载地址:http://proguard.sourceforge.net/index.html#downloads.html

      如果jdk 是1.8以下的,用sdk 自带的就可以,路径在“你的sdk路径\tools\proguard”

 

2、接下来就是编写pro文件了。

     相信很多人都试过N多个混淆文件,但是虽然混淆成功了最终运行还是失败了,以下是我的文件, 以下文件可以正常混淆且运行无错,可以放心的修改吧,记住一定要把注释去掉才能使用。

    

//需要混淆的jar包
-injars 'D:\ProGuard\acquireurlhistory.jar'
//混淆成功后生成的jar包
-outjars 'D:\ProGuard\output\mj_sdk_20160425.jar'
//你开的的jar包里需要引用的第三方jar包,这些jar包我都放在我的D盘上
-libraryjars 'D:\Program Files\Java\jdk1.8.0_73\jre\lib\rt.jar'
-libraryjars 'D:\ProGuard\libs\android.jar'
-libraryjars 'D:\ProGuard\libs\annotations.jar'
-libraryjars 'D:\ProGuard\libs\dbutil.jar'
-libraryjars 'D:\ProGuard\libs\mjoysmaster.jar'
-libraryjars 'D:\ProGuard\libs\protobuf-java-2.5.0.jar'

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-optimizationpasses 5
-dontusemixedcaseclassnames
//原数据 不能混淆
-keepattributes *Annotation*
-verbose



//你开发的jar包里引用到的R文件 不需要混淆
-dontwarn com.androld.tools.R*


-keep class org.apache.3rdparty.stuff.**

-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


//这是我开放出来给别人调用的sdk 入口 ,要排除掉,不能混淆
-keep class com.androld.tools.mjoys.MjoysSdkAgent {
    <fields>;
    <methods>;
}
//同理,DB 的初始化要开放出来
-keep class com.androld.tools.common.MJDBHelper {
    <fields>;
    <methods>;
}
//开放接口里的方法也不能混淆
-keepclassmembers public class com.androld.tools.mjoys.MjoysSdkAgent {
    public static <fields>;
}
//同上
-keepclassmembers public class com.androld.tools.common.MJDBHelper {
    public static <fields>;
}



-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);
}

-keep class * extends android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

-keepclasseswithmembers,allowshrinking class * {
    native <methods>;
}

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

 以上用注释的地方就是我自己的需要,所以我做了修改,其它没有加注释的,就是不要修改了,相信大家看其它人写的和我这的都一样,所以不作多解释。

 

3、进入proGuard的bin目录

     

 

 

 看到以下界面 :

   

 

如果文件编写错误,就会提示错吴,仔细观察文件是不是那里注释没有删除掉还是那里语法写错误。之后点击左边的process 进入混淆界面,点击右下角的process 开始混淆,如果内容里看到successfully 说明混淆成功,但是不一定运行不报错,所以要测试混淆好的jar包是否可用,也可以看看你的代码里那里出错,再按以上方法,把你的类或者方法排除不混淆,直到成功。

 



 

至此,已经完成,我搞了一周才能搞好,大家加油吧,我把我的proGuard文件放到附件里供大家下载。

 

 

  • 大小: 44.3 KB
  • 大小: 89.3 KB
  • 大小: 125.6 KB
0
6
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics