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等一些类。这些配置都是不用改的,可以直接拿来用。

-optimizationpasses5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
 
-keeppublic class *extends android.app.Activity
-keeppublic class *extends android.app.Application
-keeppublic class *extends android.app.Service
-keeppublic class *extends android.content.BroadcastReceiver
-keeppublic class *extends android.content.ContentProvider
-keeppublic class *extends android.app.backup.BackupAgentHelper
-keeppublic class *extends android.preference.Preference
-keeppublic class com.android.vending.licensing.ILicensingService
 
-keepclasseswithmembernamesclass * {
    native <methods>;
}
 
-keepclasseswithmembersclass * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
 
-keepclasseswithmembersclass * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
 
-keepclassmembersclass *extends android.app.Activity {
   public void *(android.view.View);
}
 
-keepclassmembersenum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
 
-keepclass *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包使用者直接调用的
-keeppublic class com.example.Test {
    public <fields>;
    public <methods>;
}
//...end
 
-keeppublic class *extends android.app.Activity

  现在Load Configuration里选择上面test.pro,一直next,最后混淆后的jar包就是E://test_after.jar。

用winrar打开jar包,会发现除了Test.class,一些继承自activity等的class外,其他的类都被abcdefg这样的字母给混淆了。

提醒:如果你把上面配置直接拷贝过去,是会失败的,请将文件里的#号后的中文注释去掉,或者改成英文的。

最新文章

  1. Linux Hackers/Suspicious Account Detection
  2. CSS图片列表
  3. Jquery图片上传预览效果
  4. CString使用
  5. Linux如何统计进程的CPU利用率
  6. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
  7. linux平台MongoDB数据库安装
  8. docker 配置桥接网络
  9. ASP.NET 5 Web 项目
  10. X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来
  11. 最强 IDE Visual Studio 2017 正式版发布
  12. WordPress 实现附件上传自动重命名但不改变附件标题
  13. 程序猿必知必会Linux命令之awk
  14. 【RL-TCPnet网络教程】第40章 RL-TCPnet之TFTP客户端(精简版)
  15. 深入浅出NIO Socket实现机制
  16. 解决Linux(Loaded plugins: fastestmirror Please use /usr/bin/yum --help)
  17. ldap认证jupyter notebook
  18. Angular2+URL中的 # 引发的思考
  19. 1分钟了解MyISAM与InnoDB的索引差异
  20. 基于oslo_log的日志管理

热门文章

  1. 【转】Monkey测试6-Monkey Test Log
  2. 第一百七十三节,jQuery,Ajax
  3. jsp a href怎么传参数?
  4. SQL2008删除大量数据
  5. 更新mac系统和更新到Xcode7.3版本出现的: cannot create __weak reference in file using manual reference counting
  6. 线程中sleep和wait区别
  7. IndiaHacks 2016 - Online Edition (CF) . D
  8. codevs1058 合唱队形==洛谷P1091 合唱队形
  9. windows下在Eclipse中启动的tomcat没有乱码,单独部署到tomcat下乱码解决方案
  10. p:nth-last-child(2)