混淆Android JAR包的方法
http://blog.csdn.net/vurtne_ye/article/details/35599491
1)导出jar包
如何在eclipse上Android工程中导出jar包?google,baidu.bing
2)混淆jar包,打乱代码
android的jar包跟普通的Java的jar包不一样,我们不想打乱一些activity或者server等跟系统打交道的代码,这是因为如果把这些也混淆了,那你还需要搞清楚混淆后这些activity变成了什么名字,然后告诉使用你这个jar包的人androidmanifest.xml中增加这些打乱了名字的activity。
混淆jar包用到的工具是proguard,可以在android SDK里面找到,如我的是在...\adt-bundle-windows-x86-20130219\sdk\tools\proguard。
运行sdk\tools\proguard\bin\proguardgui.bat,运行界面如下,如果点击next,会发现这些配置很难配(全英文,又很杂)。
其实这里直接导入一个cfg文件就可以了,单击下图右下角的Load Configuration,然后选择配置文件。
配置文件又要怎么写?找到android工程里面的proguard.cfg文件,这个文件是用来混淆apk代码的配置文件,我们现在是要混淆jar包的代码,当然不能直接用。看下面是proguard.cfg的配置,配置会保留activity和server等一些类。这些配置都是不用改的,可以直接拿来用。
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,! class /merging/* -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 -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native <methods>; } -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); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } |
将上面的配置增加几行改成如下,并重新命名文件为:test.pro
-optimizations !code/simplification/arithmetic,!field/*,! class /merging/* //...begin #混淆后的导出jar包的位置和jar包名 -outjars 'E:\test_after.jar' #原始jar包的位置和jar包名 -injars 'E:\test.jar' #jar包依赖的其他库的位置和名称 -libraryjars 'E:\workspace\beautytilepuzzle\libs\alipay_msp.jar' -libraryjars 'E:\workspace\beautytilepuzzle\libs\android-support-v4.jar' -libraryjars 'E:\android\adt-bundle-windows-x86-20130219\sdk\platforms\android-10\android.jar' #下面的Test类将不会被混淆,这样的类是需要被jar包使用者直接调用的 -keep public class com.example.Test { public <fields>; public <methods>; } //...end -keep public class * extends android.app.Activity |
现在Load Configuration里选择上面test.pro,一直next,最后混淆后的jar包就是E://test_after.jar。
用winrar打开jar包,会发现除了Test.class,一些继承自activity等的class外,其他的类都被abcdefg这样的字母给混淆了。
提醒:如果你把上面配置直接拷贝过去,是会失败的,请将文件里的#号后的中文注释去掉,或者改成英文的。
最新文章
- Linux Hackers/Suspicious Account Detection
- CSS图片列表
- Jquery图片上传预览效果
- CString使用
- Linux如何统计进程的CPU利用率
- 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
- linux平台MongoDB数据库安装
- docker 配置桥接网络
- ASP.NET 5 Web 项目
- X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来
- 最强 IDE Visual Studio 2017 正式版发布
- WordPress 实现附件上传自动重命名但不改变附件标题
- 程序猿必知必会Linux命令之awk
- 【RL-TCPnet网络教程】第40章	RL-TCPnet之TFTP客户端(精简版)
- 深入浅出NIO Socket实现机制
- 解决Linux(Loaded plugins: fastestmirror Please use /usr/bin/yum --help)
- ldap认证jupyter notebook
- Angular2+URL中的 # 引发的思考
- 1分钟了解MyISAM与InnoDB的索引差异
- 基于oslo_log的日志管理
热门文章
- 【转】Monkey测试6-Monkey Test Log
- 第一百七十三节,jQuery,Ajax
- jsp a href怎么传参数?
- SQL2008删除大量数据
- 更新mac系统和更新到Xcode7.3版本出现的: cannot create __weak reference in file using manual reference counting
- 线程中sleep和wait区别
- IndiaHacks 2016 - Online Edition (CF) . D
- codevs1058 合唱队形==洛谷P1091 合唱队形
- windows下在Eclipse中启动的tomcat没有乱码,单独部署到tomcat下乱码解决方案
- p:nth-last-child(2)