android 2.2 代码混淆
2013-04-24 15:37
309 查看
首先,我是基于这篇文章进行操作的,对原作者表示感谢!http://www.cnblogs.com/classic/archive/2011/04/27/2030234.html 这里再加入点我遇到我问题和解决办法。
在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文件里面添加指定这个配置文件如下:
view
source
print?
那我 悲催的 项目(基于2.2的sdk) 该如何 是好?(非得 残忍的把 项目属性设置为 2.3的么?其实即使你改了,google 也不会为你把 proguard.cfg文件补上的)所以不要这样做,你只要 把 proguard.cfg 文件 拷贝到
你的 旧项目里就好了,然后混淆方法就和2.3的一样了。
这边要注意,这时候生产APK不能直接使用bin中的apk,必须使用Android Tools里面的导出才行,签名或者不签名都OK!
这里再补充一个问题,再导出的时候。由于导入了android-support-v4.jar包,所以爆出了类似的错误。忘记截图,借别人的用了。嘿嘿。
原因:
[java] view
plaincopy
Android Compatibility library referencing classes that only exist in recent versions of the Android API
解决方法:在项目的proguard.cfg文件中添加
[java] view
plaincopy
-dontwarn **HoneycombMR2
-dontwarn **CompatICS
-dontwarn **Honeycomb
-dontwarn **CompatIcs*
-dontwarn **CompatFroyo
-dontwarn **CompatGingerbread
具体要dontwarn哪些条目,可以根据报错来进行相应的修改
这些解决了,就么有问题了,顺利的混淆成功!
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文件里面添加指定这个配置文件如下:
view
source
print?
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
plaincopy
Android Compatibility library referencing classes that only exist in recent versions of the Android API
解决方法:在项目的proguard.cfg文件中添加
[java] view
plaincopy
-dontwarn **HoneycombMR2
-dontwarn **CompatICS
-dontwarn **Honeycomb
-dontwarn **CompatIcs*
-dontwarn **CompatFroyo
-dontwarn **CompatGingerbread
具体要dontwarn哪些条目,可以根据报错来进行相应的修改
这些解决了,就么有问题了,顺利的混淆成功!
相关文章推荐
- Android 混淆代码总结
- Android 4.0 ProGuard 代码混淆技术
- android 实现代码混淆
- Android 代码混淆异常 transformClassesAndResourcesWithProguardForRelease FAILED
- Android 混淆代码详解及实例
- Android APK代码混淆与资源混淆详解,你确定不看?
- Cordova Android项目如何做代码混淆
- Android代码混淆
- Android Studio多渠道打包和代码混淆教程
- 转载:混淆包含SlidingMenu、gson等Android代码的proguard写法
- Android APK反编译以及代码混淆
- (通用)Android App代码混淆终极解决方案
- Android混淆代码,作个小记录!
- Android开发中的代码混淆
- android代码混淆笔记
- Android代码混淆之混淆规则
- Android代码混淆前后分析
- 利用android proguard混淆代码
- Android开发之代码混淆
- Android 高级混淆和代码保护技术