Android有关SDK生成的jar包的加密与混淆

来源:互联网 发布:mysql行锁 编辑:程序博客网 时间:2024/06/10 19:56

    最近公司要求对自己开发的SDK生成的jar包进行加密与混淆,之前也是小白,经过了一番研究,完成了这个需求,这里做个小小的总结,希望能对一些朋友起到些帮助作用,这里主要是理论。

    先说一个心得:

          1.jar包是需要导入项目中供别人使用的,class文件必须具备一定的规范才能被JVM识别,从而正确的被导入使用。加密是不可行的,因为虽然被加密的class文件虽然不能被gd_gui反编译,但是如果不解密的话,是无法被JVM识别,jar无法正常被导入,所以选择混淆处理。

    这里进入正题:

    我使用的常用的proguard工具进行混淆,注意较低版本的混淆器的配置文件名为proguard.mf。较新版本的配置文件是proguard-project.txt和project.properties。我们基本是后者,其实差别不大,如果要将项目打包成apk时,对其混淆,只需要修改配置文件,再Export导出apk,JVM会在执行配置文件时,混淆器会按照配置文件的要求,对代码进行混淆,但这个方法并不能实现我们混淆sdk的要求,这里我们就需要使用Android sdk里带的tool:proguardgui.bat这个图形化工具,通过设置,生成一个.pro配置文件(当然大神也可以手写),再导入这个配置文件,手动的对jar包进行混淆。(工具目录大概在这个位置:E:\sdk\tools\proguard\bin\proguardgui.bat),工具的使用教程网上有很多我就不多说了,自己去搜下,按流程走就行。

    这里要特别注意容易出错的地方:

           1.在导入依赖的库时,有时会出现这个错误:一堆Warning:com.turing.androidsdk.*****.****:can't find referenced class java.util.List的警告,这是因为你少倒入了sdk里的一个jar包,找到导入即可。

            2.如果你对全局混淆,就必须保留下来你要对开放的类名和接口等名字,不被混淆,这就是上面说的识别规范的问题,否则,导出的jar包将毫无意义,无法被JVM正确识别,无法正常使用,报错图片如下:

解决方法:在生成.pro混淆配置文件时,必须去了解下proguard的代码语法,手动添加代码keep住我们要保留的类,接口,方法(后来发现图形化也可以添加),否则会报上面这个错误,这个网上很多可以自己去搜下学习下,代码格式大致这个样子:

-keep classcom.turing.androidsdk.voice.* {

    public <fields>;

    public <methods>;

    *** set*(***);

    *** get*();

}

这里附上个代码连接:

http://www.trinea.cn/android/proguard-grammar/

导入导入配置文件后,混淆成功,反编译看下效果。

混淆成功,结束。




      

1 0
原创粉丝点击