转自 http://blog.csdn.net/Zengyangtech/article/details/6127600


由于各种反编译工具的泛滥,作为Android程序员在2.3版本以前只能通过手动添加proguard来实现代码混淆

proguard这个工具是一个java代码混淆的工具

在2.3版本的sdk中 我们可以看到在android-sdk-windows/tools/下面多了一个proguard文件夹

google已经把proguard技术放在了android sdk里面 可以通过正常的编译方式也能实现代码混淆了

可以看见新建一个工程里面有default.properties和proguard.cfg

默认的default.properties代码如下

view plain
  1. #ThisfileisautomaticallygeneratedbyAndroidTools.
  2. #Donotmodifythisfile--YOURCHANGESWILLBEERASED!
  3. #
  4. #ThisfilemustbecheckedinVersionControlSystems.
  5. #
  6. #TocustomizepropertiesusedbytheAntbuildsystemuse,
  7. #"build.properties",andoverridevaluestoadaptthescripttoyour
  8. #projectstructure.
  9. #Projecttarget.
  10. target=android-9

我们可以看到proguard.cfg已经帮我们写好了优化代码脚本

view plain
  1. -optimizationpasses5
  2. -dontusemixedcaseclassnames
  3. -dontskipnonpubliclibraryclasses
  4. -dontpreverify
  5. -verbose
  6. -optimizations!code/simplification/arithmetic,!field/*,!class/merging/*
  7. -keeppublicclass*extendsandroid.app.Activity
  8. -keeppublicclass*extendsandroid.app.Application
  9. -keeppublicclass*extendsandroid.app.Service
  10. -keeppublicclass*extendsandroid.content.BroadcastReceiver
  11. -keeppublicclass*extendsandroid.content.ContentProvider
  12. -keeppublicclasscom.android.vending.licensing.ILicensingService
  13. -keepclasseswithmembernamesclass*{
  14. native<methods>;
  15. }
  16. -keepclasseswithmembernamesclass*{
  17. public<init>(android.content.Context,android.util.AttributeSet);
  18. }
  19. -keepclasseswithmembernamesclass*{
  20. public<init>(android.content.Context,android.util.AttributeSet,int);
  21. }
  22. -keepclassmembersenum*{
  23. publicstatic**[]values();
  24. publicstatic**valueOf(java.lang.String);
  25. }
  26. -keepclass*implementsandroid.os.Parcelable{
  27. publicstaticfinalandroid.os.Parcelable$Creator*;
  28. }

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

接下来 按照google帮助文档里说的

view plain
  1. ToenableProGuardsothatitrunsaspartofanAntorEclipsebuild,settheproguard.configpropertyinthe<project_root>/default.propertiesfile.Thepathcanbeanabsolutepathorapathrelativetotheproject'sroot.

所以我们修改default.properties file

加上一句

proguard.config=proguard.cfg

如下

view plain
  1. #ThisfileisautomaticallygeneratedbyAndroidTools.
  2. #Donotmodifythisfile--YOURCHANGESWILLBEERASED!
  3. #
  4. #ThisfilemustbecheckedinVersionControlSystems.
  5. #
  6. #TocustomizepropertiesusedbytheAntbuildsystemuse,
  7. #"build.properties",andoverridevaluestoadaptthescripttoyour
  8. #projectstructure.
  9. #Projecttarget.
  10. target=android-9
  11. proguard.config=proguard.cfg

然后正常的编译签名即可

然后用Android Tools生成一个发布的apk即可

然后用反编译工具查看dex文件

最后导出反编译之后的混淆代码如下图

是不是很轻松加愉快!希望各位程序员都能保护好自己的Android代码!

更多相关文章

  1. tcping测试服务器TCP端口
  2. android中的Handler和Callback机制
  3. Android中的JNI和NDK编程实践
  4. Android实现Service下载文件,Notification显示下载进度的示例
  5. android -------- GifView 显示gif图片
  6. Android(安卓)自定义弹窗框架
  7. Android(安卓)EditText部分特殊功能
  8. Flutter 项目代码打包进 android App的快速集成方案
  9. Android培训班(84)Dalvik虚拟机的JNI测试函数

随机推荐

  1. android截取屏幕图
  2. Android 国码选择 country code
  3. android圆形图片显示效果,带边框
  4. 自定义ProgressBar的样式失效
  5. Android(安卓)数据库的简单使用
  6. android listview 自动加载
  7. Android中Activity之间访问互传参数
  8. 转:Android之通信录中的联系人操作
  9. Android实现圆角弹框功能
  10. android读取assets大于1M文件的解决方法