如何使用proguard对Android源码进行混淆保护

举报
aiot_bigbear 发表于 2022/09/25 02:39:24 2022/09/25
【摘要】 Android源码很容易被工具反编译出来,因此,对源码做混淆是一种非常常用的保护源码的方式,不仅如此,proguard还会对源码做一些优化。下面小编将教大家如何在Eclipse中配置proguard混淆,并且如何查看混淆前后的对应关系。 在Eclipse中新建proguard_demo的Android工程...

Android源码很容易被工具反编译出来,因此,对源码做混淆是一种非常常用的保护源码的方式,不仅如此,proguard还会对源码做一些优化。下面小编将教大家如何在Eclipse中配置proguard混淆,并且如何查看混淆前后的对应关系。


  1. Eclipse中新建proguard_demo的Android工程,里面只有MainActivity.java和Person.java。因为MainActivity是启动类,是不能被混淆的。我将演示下如何将Person混淆掉。

    如何使用proguard对Android源码进行混淆保护
    如何使用proguard对Android源码进行混淆保护
  2. 首先打开“project.properties”文件,然后在文件中添加一行:proguard.config=./proguard-project.txt。文件中之前就有一行,不过是被注释掉了。这句话的意思是:使用当前目录下的proguard-project.txt作为混淆配置文件。

    如何使用proguard对Android源码进行混淆保护
  3. 打开“proguard-project.txt”文件,在文件末尾添加:

    -dontpreverify

    -repackageclasses ''

    -allowaccessmodification

    -optimizations !code/simplification/arithmetic

    -keepattributes *Annotation*

    -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.view.View {

        public <init>(android.content.Context);

        public <init>(android.content.Context, android.util.AttributeSet);

        public <init>(android.content.Context, android.util.AttributeSet, int);

        public void set*(...);

    }

    -keepclasseswithmembers class * {

        public <init>(android.content.Context, android.util.AttributeSet);

    }

    -keepclasseswithmembers class * {

        public <init>(android.content.Context, android.util.AttributeSet, int);

    }

    -keepclassmembers class * implements android.os.Parcelable {

        static android.os.Parcelable$Creator CREATOR;

    }

    -keepclassmembers class **.R$* {

        public static <fields>;

    }

    如何使用proguard对Android源码进行混淆保护
  4. 然后运行,可以看到界面上有一个文本框,上面写着“hello,world”。然后用dex2jar反编译生成的apk,可以看到有MainActivity和Person类。

    如何使用proguard对Android源码进行混淆保护
    如何使用proguard对Android源码进行混淆保护
  5. 也就是说直接运行的方式是不能应用proguard的。正确的方式是使用Eclipse的导出功能。在工程上右键->"Export..."->“Export Android Application”,导出apk包。可以使用Eclipse默认的keystore,具体的使用方法请参考小编前面一个文档http://jingyan.baidu.com/article/3a2f7c2e61395d26afd61193.html。

  6. 用dex2jar反编译导出的proguard_demo.apk,然后用jd-jui打开。可以看到Person被混淆掉了。

    如何使用proguard对Android源码进行混淆保护
    如何使用proguard对Android源码进行混淆保护
  7. 7

    查看Eclipse在工程的根目录下面生成了一个progurad的文件夹。打开这个文件夹可以看到4个文件。其中有一个是“mapping.txt”,这里面列出了混淆前后的对应关系。可以看到我们的Person被混淆成了bJ,里面的成员变量name被混淆成了a。在MainActivity中也能看出来。同时,proguard还把方法调用优化成了直接引用成员变量。

    如何使用proguard对Android源码进行混淆保护


文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xushx_bigbear/article/details/44781961

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。