现在的位置: 首页 > 综合 > 正文

android 2.2 代码混淆

2012年02月03日 ⁄ 综合 ⁄ 共 3909字 ⁄ 字号 评论关闭

首先,我是基于这篇文章进行操作的,对原作者表示感谢!http://www.cnblogs.com/classic/archive/2011/04/27/2030234.html 这里再加入点我遇到我问题和解决办法。

 2.3以上版本:AndroidSDK自带proguard混淆

在Android SDK中自带有proguard代码混淆器,但在默认的情况下该混淆器是没有打开的。该混淆器在SDK中的路径是android-sdk-windows\tools\proguard

启动android-sdk-windows\tools\proguard\lib\proguardgui.jar可以使用独立UI的proguard。

ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.  

ProGuard的使用是为了: 

1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.

2.创建的程序和程序库很难使用反向工程.

3.所以它能删除来自源文件中的没有调用的代码

4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.

Eclipse中使用proguard的方法如下:

1.启动代码混淆功能

新建Android项目工程里面默认是带有proguard.cfg的代码混淆配置文件,如果没有请从其它项目中copy一个过来。代码混淆功能默认是没有启动这个配置的,需要手动地在项目根目录default.properties文件里面添加指定这个配置文件如下:

1 #
Project target. 
2 target=android-7 
3 #
set proguard.config 
4 proguardproguard.config=proguard.cfg

要是基于2.2的版本那怎么办呢?


那我 悲催的 项目(基于2.2的sdk) 该如何 是好?(非得 残忍的把 项目属性设置为 2.3的么?其实即使你改了,google 也不会为你把 proguard.cfg文件补上的)所以不要这样做,你只要 把 proguard.cfg 文件 拷贝到
你的 旧项目里就好了,然后混淆方法就和2.3的一样了。

这边要注意,这时候生产APK不能直接使用bin中的apk,必须使用Android Tools里面的导出才行,签名或者不签名都OK!



这里再补充一个问题,再导出的时候。由于导入了android-support-v4.jar包,所以爆出了类似的错误。忘记截图,借别人的用了。嘿嘿。

[2011-11-03 16:07:52 - AndroidViewPager] Proguard returned with error code 1. See console
[2011-11-03 16:07:52 - AndroidViewPager] Note: there were 95 duplicate class definitions.
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void invalidateOptionsMenu()' in class android.app.Activity
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])' in class android.app.Activity
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-03 16:07:52 - AndroidViewPager] Warning: android.support.v4.view.MenuCompatHoneycomb: can't find referenced method 'void setShowAsAction(int)' in class android.view.MenuItem
[2011-11-03 16:07:52 - AndroidViewPager] Warning: there were 3 unresolved references to classes or interfaces.
[2011-11-03 16:07:52 - AndroidViewPager]          You may need to specify additional library jars (using '-libraryjars'),
[2011-11-03 16:07:52 - AndroidViewPager]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-11-03 16:07:52 - AndroidViewPager] Warning: there were 3 unresolved references to program class members.
[2011-11-03 16:07:52 - AndroidViewPager]          Your input classes appear to be inconsistent.
[2011-11-03 16:07:52 - AndroidViewPager]          You may need to recompile them and try again.
[2011-11-03 16:07:52 - AndroidViewPager]          Alternatively, you may have to specify the options 
[2011-11-03 16:07:52 - AndroidViewPager]          '-dontskipnonpubliclibraryclasses' and/or
[2011-11-03 16:07:52 - AndroidViewPager]          '-dontskipnonpubliclibraryclassmembers'.
[2011-11-03 16:07:52 - AndroidViewPager] java.io.IOException: Please correct the above warnings first.
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.Initializer.execute(Initializer.java:308) 
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.initialize(ProGuard.java:210)
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.execute(ProGuard.java:85)
[2011-11-03 16:07:52 - AndroidViewPager]    at proguard.ProGuard.main(ProGuard.java:499)

原因:

[java] view
plain
copy

  1. Android Compatibility library referencing classes that only exist in recent versions of the Android API  

解决方法:在项目的proguard.cfg文件中添加


[java] view
plain
copy

  1. -dontwarn **HoneycombMR2  
  2. -dontwarn **CompatICS  
  3. -dontwarn **Honeycomb  
  4. -dontwarn **CompatIcs*  
  5. -dontwarn **CompatFroyo  
  6. -dontwarn **CompatGingerbread  

具体要dontwarn哪些条目,可以根据报错来进行相应的修改

这些解决了,就么有问题了,顺利的混淆成功!

抱歉!评论已关闭.