ndroid程序基本上都是java语言很容易被反编译,这里呢google在android2.3的时候就加入了ProGuard代码混淆工具。
这里呢,要分两部分说。一部分是2.3时代,一部分是4.0时代,他们的混淆是不一样的,但也大同小异。
         先说2.3时代:在自动生成项目时sdk会自动生成两个文件,一个是proguard.cfg  一个是project.properties  ,他们就是反编译用的关键。
首先,在project.properties  中加入一行代码  proguard.config = proguard.cfg     这样proguard的配合就指向了proguard.cfg这个文件。 如果不加这句就不会进行混淆编译
之后进入proguard.cfg 能看到以下代码:

-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 <methods>; 

} 


-keepclasseswithmembers class * { 

    public <init>(android.content.Context, android.util.AttributeSet); 

} 


-keepclasseswithmembers class * { 

    public <init>(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 *; 

}


这里也可以根据你的需求增加命令行  具体请自行查阅文档或百度
这个就是进行反编译的配置语句了。此时再生成的APK程序反编译后就是混淆后的代码了。

注意:当有第三方jar包引入时,可能需要在proguard.cfg中添加 -dontwarn 指令。
例子1:ADT2.0后SDK自动生成项目会自动添加一个叫 android-support-v4.jar的jar包 这时进行反编译会报错,说 Proguard returned with error code 1. 云云。这就是找不到这个jar包的原因。
这时加入  -dontwarn android.support.v4.**  这句就OK了
例子2:这是关于百度地图api的,引入百度地图的jar包baidumapapi_v2_1_1.jar。也是出现和上面差不多的错误都是 Proguard returned with error code 1. 云云。这就是找不到这个jar包的原因。
这时加入 -dontwarn com.baidu.** 就OK了

细心的读者应该发现了混淆指令都是多个单词的合写,例如: -keepclassmembers    是keep  class member ,-dontwarn 是don't  warn
关于第三方jar包的指令就很好了解了 -dontwarn  (jar包的主题目录).**(全匹配)    所以刚才的指令就是  com.baidu下所有类的匹配共同混淆 这样反编译出来连里面百度api的内容也是混淆的。 

下面来说说android4.0的混淆编译
这个时候项目自动生成的两个文件分别是 project.properties 和 proguard-project.txt
在project.properties中能看到以下代码
这些#都是用来注释的
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt                         ←就这行去掉#

# Project target.
target=android-17

只要去掉倒数第三行的#就可以了,将这句proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt    释放出来  这也是个指向性语句将配置指向proguard-project.txt
进入proguard-project.txt看到以下代码:

# To enable ProGuard in your project, edit project.properties 

# to define the proguard.config property as described in that file. 

# 

# Add project specific ProGuard rules here. 

# By default, the flags in this file are appended to flags specified 

# in ${sdk.dir}/tools/proguard/proguard-android.txt 

# You can edit the include path and order by changing the ProGuard 

# include property in project.properties. 

# 

# For more details, see 

#   http://developer.android.com/guide/developing/tools/proguard.html 


# Add any project specific keep options here: 


# If your project uses WebView with JS, uncomment the following 

# and specify the fully qualified class name to the JavaScript interface 

# class: 

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {               ←反注释 将语句释放出来 

#   public *;                                                                                                   ←反注释 将语句释放出来 

#}                                                                                                                  ←反注释 将语句释放出来



最后3行都是混淆指令 亦可以根据需求添加混淆指令

这里暂时没发现对第三方jar包的不支持  如果读者发现了请留言,或者发现了错误请大神指正。