之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆。
截图
效果第三方库列表清单
目前插件的后台已集成了如下图的第三方开源库的代码混淆以及基本的代码混淆,还在努力地添加中,也欢迎大家通过new issue提交列表中没有的第三方开源库混淆代码。(你认为微不足道的事情,也许可以帮到别人的大忙~)
使用
- 下载AndroidProGuard插件并安装重启。download
- 在菜单栏的Edit下拉菜单中选择AndroidProGuard选项。
- 如果弹出成功对话框,就可以按Ctrl+V粘贴到项目的proguard-rules.pro文件。
- 根据proguard-rules.pro报错的提示进行修改成。
- 将项目app下gradle文件将minifyEnabled修改成true就可以测试混淆效果。 (你可以使用AndroidKiller反编译看一下效果,AndroidKiller的使用可以参考我写的这篇文章here)
注意
-
实际的项目通常会有多个的Module,对于多个Module的代码混淆网上资料比较少,经过我实验得出:对于多个Module的项目,在应用的Module(即app)下的proguard-rules.pro文件添加混淆代码以及在Gradle里minifyEnabled开启即可。
-
如果项目在编译的时候报warn信息,那么你可以使用-keep或者-dontwarn保留warn的类。
最后
我知道项目的代码混淆一般通常混淆一次就可以了,很多人认为这个插件的意义不太,但是我可以告诉你我也是这么想的,可是我也无办法阻止我的行动哈哈~
项目GitHub地址:https://github.com/zhonghanwen/AndroidProguardPlugin
网友评论
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)
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
报这些错误,什么情况
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)