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 JAR包的方法_第1张图片

  配置文件又要怎么写?找到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  ; }   -keepclasseswithmembers class  * {      public  (android.content.Context, android.util.AttributeSet); }   -keepclasseswithmembers class  * {      public  (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  ;      public  ; } //...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这样的字母给混淆了。

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


更多相关文章

  1. Android | 代码混淆到底做了什么?
  2. Android ELF文件PLT和GOT
  3. Capacitor实现WebView中访问的自定义Android代码
  4. Android中LocationManager的简单使用,获取当前位置
  5. eclipse导入已存在的android工程时遇到AndroidManifest.xml文件
  6. Android中init.rc文件的解析
  7. Android中使用xml保存数据(xml文件序列化)及使用pull解析xml文件
  8. Android 文件读写操作方法总结

随机推荐

  1. android典型代码系列(一)------android调
  2. Android中OkHttp的使用
  3. Android 微信SDK分享功能中的最全过程步
  4. Android的文本编解码工具类
  5. 【email】android邮件Email
  6. Android(三)Android SDK无法更新解决方式
  7. Android Animation动画(Frame-By-Frame An
  8. android > android 客户端 ,PHP 服务器端
  9. 2011.12.05(4)——— android JNI学习之三
  10. 解析错误:解析软件包时出现问题