Android Studio代码混淆插件

作者: Hanwen1001 | 来源:发表于2016-06-08 12:12 被阅读2573次
    Android Studio ProGurad Plugin

    之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆。

    截图

    效果

    第三方库列表清单

    目前插件的后台已集成了如下图的第三方开源库的代码混淆以及基本的代码混淆,还在努力地添加中,也欢迎大家通过new issue提交列表中没有的第三方开源库混淆代码。(你认为微不足道的事情,也许可以帮到别人的大忙~)

    使用

    1. 下载AndroidProGuard插件并安装重启。download
    2. 在菜单栏的Edit下拉菜单中选择AndroidProGuard选项。
    3. 如果弹出成功对话框,就可以按Ctrl+V粘贴到项目的proguard-rules.pro文件。
    4. 根据proguard-rules.pro报错的提示进行修改成。
    5. 将项目app下gradle文件将minifyEnabled修改成true就可以测试混淆效果。 (你可以使用AndroidKiller反编译看一下效果,AndroidKiller的使用可以参考我写的这篇文章here

    注意

    1. 实际的项目通常会有多个的Module,对于多个Module的代码混淆网上资料比较少,经过我实验得出:对于多个Module的项目,在应用的Module(即app)下的proguard-rules.pro文件添加混淆代码以及在Gradle里minifyEnabled开启即可

    2. 如果项目在编译的时候报warn信息,那么你可以使用-keep或者-dontwarn保留warn的类。

    最后

    我知道项目的代码混淆一般通常混淆一次就可以了,很多人认为这个插件的意义不太,但是我可以告诉你我也是这么想的,可是我也无办法阻止我的行动哈哈~

    项目GitHub地址:https://github.com/zhonghanwen/AndroidProguardPlugin

    相关文章

      网友评论

      • 松小白:谢谢楼主,硬货福利我靠,纠结我好几天的问题一键搞定,我现在已经不行了,今天晚上大战500回合哈哈。
      • tomguan:你好,现在该项目还在一直维护吗?最新的第三方sdk
      • 0532711f24d1:楼主,databinding的混淆文件如何书写 :smile:
      • 茶念:Plugin 'com.zhw.tgnet.android.AndroidProGuard' failed to initialize and will be disabled. Please restart Android Studio.

        com.intellij.diagnostic.PluginException: com/zhy/http/okhttp/https/HttpsUtils : Unsupported major.minor version 51.0 [Plugin: com.zhw.tgnet.android.AndroidProGuard]
        at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:130)
        at com.intellij.ide.plugins.cl.PluginClassLoader.tryLoadingClass(PluginClassLoader.java:77)
        at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at com.zhw.proguard.AndroidComponent.<init>(AndroidComponent.java:35)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        茶念:@HanWen 谢谢楼主
        Hanwen1001:@茶念 查看项目github上的issue!
      • 7a4215f85019:Caused by: java.lang.UnsupportedClassVersionError: com/zhw/proguard/AndroidComponent : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
        at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:260)
        at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:256)
        at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:225)
        at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:124)
        ... 26 more
        报这些错误,什么情况
        Hanwen1001:@草編的戒指 我重新编译打包了,你重新下载下来试一下
      • 7a4215f85019:Plugin 'com.zhw.tgnet.android.AndroidProGuard' failed to initialize and will be disabled. Please restart Android Studio.

        com.intellij.diagnostic.PluginException: com/zhw/proguard/AndroidComponent : Unsupported major.minor version 52.0 [Plugin: com.zhw.tgnet.android.AndroidProGuard]
        at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:130)
        at com.intellij.ide.plugins.cl.PluginClassLoader.tryLoadingClass(PluginClassLoader.java:77)
        at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:270)
        at com.intellij.openapi.components.impl.ComponentManagerImpl.registerComponents(ComponentManagerImpl.java:408)
        at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:96)
        at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:455)
        at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:447)
        at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:197)
        at com.intellij.idea.MainImpl$1$1$1.run(MainImpl.java:52)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:694)
        at java.awt.EventQueue$3.run(EventQueue.java:692)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
        at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:361)
        Hanwen1001:@草編的戒指 是的,我重新编译成低版本的,你重新下载试一下,帮我测试一下 :smile:
        7a4215f85019:@HanWen 好吧,原来楼主用的是jdk8
        Hanwen1001:@草編的戒指 你的JDK版本比我的版本低造成的~
      • 024a6bba9544:你在生成混淆文件是增加个选择对话框,这样大家就不要来回的删除多余的架包混淆了
        Hanwen1001:@魂魄 刚开始的时候,我也是这么想的!后来想了想增加的混淆也不会导致程序的崩溃而且也不用每个开发者都要自行选择自己的架包,只要修改报错的部分(根据自己的实际项目修改的)就可以了!目前我还在后台继续增加第三方库的代码混淆~
      • 08a80639d366:赞一个,会帮到很多人的。
        08a80639d366:@HanWen 🤗🤗
        Hanwen1001:@茫忙 :relieved: 快点叫我雷锋哥哥,哈哈~
      • 小胡闹:mark,感谢分享

      本文标题:Android Studio代码混淆插件

      本文链接:https://www.haomeiwen.com/subject/fqkjdttx.html