http://blog.csdn.net/lovexjyong/article/details/24652085

为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:

1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来

2. 最重要的就是在proguard-project.txt添加混淆的申明了:

a. 把所有你的jar包都申明进来,例如:
 -libraryjars libs/apns_1.0.6.jar
 -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
 -libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/baidumapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar
-libraryjars libs/infogracesound.jar
-libraryjars libs/locSDK_4.0.jar
-libraryjars libs/ormlite-android-4.48.jar
-libraryjars libs/ormlite-core-4.48.jar
-libraryjars libs/universal-image-loader-1.9.0.jar

b. 将你不需要混淆的部分申明进来,因为有些类经过混淆会导致程序编译不通过,如下:

-keep public class * extends android.app.Fragment  
-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 * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService

--以上都是API里边的类,最好都要避免混淆

有些很特殊的,例如百度地图,你需要添加以下申明:

-keep class com.baidu.** { *; } 
-keep class vi.com.gdi.bgl.android.**{*;}

根据我的经验,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)如:

-keep class com.bank.pingan.model.** { *; }
下面在贴上关于Umeng分享统计的避免混淆的申明

-dontwarn android.support.v4.**  
-dontwarn org.apache.commons.net.** 
-dontwarn com.tencent.**

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**

-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable

-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**

-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

-keep public class [your_pkg].R$*{
    public static final int *;
}

3.以上工作完成,混淆工作就完成了一大半了,最后需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

4. OK, 最后一步,打签名包测试,如果有问题,仔细看下Log也许有得类不能混淆,那么你得加入到proguard-project.txt文件中

-------以上就是混淆代码的全过程了

最后贴上proguard-project.txt的全部代码:

  1. # To enable ProGuard in your project, edit project.properties
  2. # to define the proguard.config property as described in that file.
  3. #
  4. # Add project specific ProGuard rules here.
  5. # By default, the flags in this file are appended to flags specified
  6. # in ${sdk.dir}/tools/proguard/proguard-android.txt
  7. # You can edit the include path and order by changing the ProGuard
  8. # include property in project.properties.
  9. #
  10. # For more details, see
  11. #   http://developer.android.com/guide/developing/tools/proguard.html
  12. # Add any project specific keep options here:
  13. # If your project uses WebView with JS, uncomment the following
  14. # and specify the fully qualified class name to the JavaScript interface
  15. # class:
  16. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  17. #   public *;
  18. #}
  19. -optimizationpasses 5
  20. -dontusemixedcaseclassnames
  21. -dontskipnonpubliclibraryclasses
  22. -dontpreverify
  23. -verbose
  24. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  25. -keepattributes *Annotation*
  26. -keepattributes Signature
  27. -libraryjars libs/apns_1.0.6.jar
  28. -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
  29. -libraryjars libs/armeabi/liblocSDK4.so
  30. -libraryjars libs/baidumapapi_v2_3_1.jar
  31. -libraryjars libs/core.jar
  32. -libraryjars libs/gesture-imageview.jar
  33. -libraryjars libs/gson-2.0.jar
  34. -libraryjars libs/infogracesound.jar
  35. -libraryjars libs/locSDK_4.0.jar
  36. -libraryjars libs/ormlite-android-4.48.jar
  37. -libraryjars libs/ormlite-core-4.48.jar
  38. -libraryjars libs/universal-image-loader-1.9.0.jar
  39. -keep class com.baidu.** { *; }
  40. -keep class vi.com.gdi.bgl.android.**{*;}
  41. -keep public class * extends android.app.Fragment
  42. -keep public class * extends android.app.Activity
  43. -keep public class * extends android.app.Application
  44. -keep public class * extends android.app.Service
  45. -keep public class * extends android.content.BroadcastReceiver
  46. -keep public class * extends android.content.ContentProvider
  47. -keep public class * extends android.app.backup.BackupAgentHelper
  48. -keep public class * extends android.preference.Preference
  49. -keep public class * extends android.support.v4.**
  50. -keep public class com.android.vending.licensing.ILicensingService
  51. -keep class com.google.gson.stream.** { *; }
  52. -keep class com.google.gson.examples.android.model.** { *; }
  53. -keep class com.uuhelper.Application.** { *; }
  54. -keep class net.sourceforge.zbar.** { *; }
  55. -keep class com.google.android.gms.** { *; }
  56. -keep class com.bank.pingan.model.** { *; }
  57. -keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
  58. -keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager
  59. -keep class com.android.vending.licensing.ILicensingService
  60. -keep class android.support.v4.** { *; }
  61. -keep class org.apache.commons.net.** { *; }
  62. -keep class com.tencent.** { *; }
  63. -keep class com.umeng.** { *; }
  64. -keep class com.umeng.analytics.** { *; }
  65. -keep class com.umeng.common.** { *; }
  66. -keep class com.umeng.newxp.** { *; }
  67. -keep class com.j256.ormlite.** { *; }
  68. -keep class com.j256.ormlite.android.** { *; }
  69. -keep class com.j256.ormlite.field.** { *; }
  70. -keep class com.j256.ormlite.stmt.** { *; }
  71. -dontwarn android.support.v4.**
  72. -dontwarn org.apache.commons.net.**
  73. -dontwarn com.tencent.**
  74. -keepclasseswithmembernames class * {
  75. native <methods>;
  76. }
  77. -keepclasseswithmembernames class * {
  78. public <init>(android.content.Context, android.util.AttributeSet);
  79. }
  80. -keepclasseswithmembernames class * {
  81. public <init>(android.content.Context, android.util.AttributeSet, int);
  82. }
  83. -keepclassmembers enum * {
  84. public static **[] values();
  85. public static ** valueOf(java.lang.String);
  86. }
  87. -keep class * implements android.os.Parcelable {
  88. public static final android.os.Parcelable$Creator *;
  89. }
  90. -keepclasseswithmembers class * {
  91. public <init>(android.content.Context);
  92. }
  93. -dontshrink
  94. -dontoptimize
  95. -dontwarn com.google.android.maps.**
  96. -dontwarn android.webkit.WebView
  97. -dontwarn com.umeng.**
  98. -dontwarn com.tencent.weibo.sdk.**
  99. -dontwarn com.facebook.**
  100. -keep enum com.facebook.**
  101. -keepattributes Exceptions,InnerClasses,Signature
  102. -keepattributes *Annotation*
  103. -keepattributes SourceFile,LineNumberTable
  104. -keep public interface com.facebook.**
  105. -keep public interface com.tencent.**
  106. -keep public interface com.umeng.socialize.**
  107. -keep public interface com.umeng.socialize.sensor.**
  108. -keep public interface com.umeng.scrshot.**
  109. -keep public class com.umeng.socialize.* {*;}
  110. -keep public class javax.**
  111. -keep public class android.webkit.**
  112. -keep class com.facebook.**
  113. -keep class com.umeng.scrshot.**
  114. -keep public class com.tencent.** {*;}
  115. -keep class com.umeng.socialize.sensor.**
  116. -keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
  117. -keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
  118. -keep class im.yixin.sdk.api.YXMessage {*;}
  119. -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
  120. -keep public class [your_pkg].R$*{
  121. public static final int *;
  122. }
  1. 2015-05-25更新
  1. 1. 依赖工程的jar 申明:
  1. 以下是邮件发送的实例
  1. -libraryjars ../KlowerBase/libs/mail-activation.jar
  2. -libraryjars ../KlowerBase/libs/mail-additionnal.jar
  3. -libraryjars ../KlowerBase/libs/mail.jar
  1. 2. 解决邮件发送时报的以异常
  1. -keep class javax.mail.**{*;}
  2. -keep class com.sun.mail.**{*;}
  3. -keep class javax.activation.**{*;}
  4. -keep class org.apache.harmony.**{*;}
  5. -keep class java.security.**{*;}
  1. #解决:can't find referenced class java.beans.Beans
  2. -dontwarn org.apache.commons.collections.BeanMap
  3. -dontwarn java.beans.**
  4. #解决:can't find referenced class javax.security.sasl.Sasl
  5. -dontwarn com.sun.mail.imap.protocol.**

OK,That's all.

--Thank you!

【转】Android 混淆代码总结的更多相关文章

  1. Android 混淆代码有关问题总结

    Android 混淆代码问题总结 Android 混淆代码: 最快的方式: 1. 首先更新Android的SDK至最新版本,重新建立1个工程,把源码和资源及其他文件拷到新的工程里面. 2. 工程目录底 ...

  2. Android 混淆代码总结

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这 ...

  3. Android 混淆代码汇总

    为了防止别人对自己被盗的劳动,混淆代码可以被反编译可以有效地防止,以下在下面的代码混乱总结的步骤: 1. 大家可能已经注意到一个新的项目将在下面看到的物品都有这个proguard-project.tx ...

  4. Android混淆代码

    Android代码混淆是必须的,java层代码如果不做混淆等于把源代码送人了.那如何做混淆呢? 之前一般都是提到采用proguard.cfg,但使用新版本ADT后没有这个文件了,取而代之的是progu ...

  5. Android混淆打包配置总结

    Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...

  6. Android混淆那些事儿

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 # Android混淆 Android混淆是Android开发者经常使用的一种用于代码防止被反编译的 ...

  7. Intellij idea 和android studio 代码给混淆

    Intellij idea 和android studio 代码给混淆 一.指令说明-optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassna ...

  8. Android Studio代码混淆插件

    之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆. 截图 第三方库列表清单 ...

  9. 利用android proguard混淆代码

    利用android proguard混淆代码 2014-02-05 17:50 1207人阅读 评论(1) 收藏 举报 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上 ...

随机推荐

  1. lucene解决全文检索word2003,word2007的办法

    在上一篇文章中 ,lucene只能全文检索word2003,无法检索2007,并且只能加载部分内容,无法加载全文内容.为解决此问题,找到了如下方法 POI 读取word (word 2003 和 wo ...

  2. mysql-5.5.25-winx64在win7 x64 免安装配置

    os:win7 x64 mysql:mysql-5.5.25-winx64 将mysql-5.5.25-winx64.zip 解压缩到F:\mysql-5.5.25-winx64 目录下: 1.将my ...

  3. BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...

  4. 3G 2G GPRS 1G的概念

    3G, 第三代移动通信技术(3rd-generation,3G),是指支持高速数据传输的蜂窝移动通讯技术.3G服务 能够同时传送声音及数据信息,速率一般在几百kbps以上.3G标准:它们分别是WCDM ...

  5. 【HDU 1133】 Buy the Ticket (卡特兰数)

    Buy the Ticket Problem Description The "Harry Potter and the Goblet of Fire" will be on sh ...

  6. poi 操作excel

    poi操作 创建一个excel关联对象HSSFWorkbook: HSSFWorkbook book = new HSSFWorkbook(); 创建一个sheet: HSSFSheet st = b ...

  7. Android用户界面 UI组件--TextView及其子类(三) EditView以及各种Span文字样式讲解

    EditView和TextView的用法差不多,只是文字可编辑 小技巧: 设置EditText隐藏键盘  setInputType(0); 设置EditText不被输入法遮盖  getWindow() ...

  8. iframe的安全问题

    今天尝试在iframe中嵌入外部网站, 碰到了一些小问题. 如何让自己的网站不被其他网站的iframe引用? 我测试的时候发现我把iframe的src指定到github不起作用. 原来是它把X-Fra ...

  9. Linux数据管理——文件锁定

    一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...

  10. PHP 'ext/soap/php_xml.c'不完整修复多个任意文件泄露漏洞

    漏洞版本: PHP 5.4.1 PHP 5.3.13 PHP 5.3.12 PHP 5.3.11 PHP 5.3.10 PHP 5.3.1 PHP 5.3 漏洞描述: BUGTRAQ ID: 6237 ...