android 混淆打包


1.需要在项目的  project.properties  中加入  proguard.config=proguard.cfg , 这样eclipse会通过此配置在工程的目录中生成  proguard.cfg文件

   不过许多的时候可能会无法生成proguard.cfg文件,这时候就需要自己在项目底下添加proguard.cfg文件

   以下是参考的proguard.cfg 文件,当中的注释要删掉

   

-optimizationpasses 5   //设置混淆的压缩比率 0 ~ 7 
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses  //如果应用程序引入的有jar包,并且想混淆jar包里面的class 
-dontpreverify
-verbose               //混淆后生产映射文件 map 类名->转化后类名的映射
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*    //混淆采用的算法.
-keep public class * extends android.app.Activity                  //所有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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;            //所有native的方法不能去混淆. 
}
-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 {     //aidl文件不能去混淆. 
  public static final android.os.Parcelable$Creator *;
}

//以下是忽略一些第三方的jar 不进行混淆
-dontwarn com.sina.**  
-keep class com.sina.** { *;}  
  
-dontwarn com.handmark.**  
-keep class com.handmark.** { *;}  
  
-dontwarn com.viewpagerindicator.**  
-keep class com.viewpagerindicator.** { *;} 

-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }

-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.examples.android.model.** { *; }

-dontwarn com.ant.**
-keep class com.ant.** { *; }

-dontwarn com.nineoldandroids.**
-keep class com.nineoldandroids.** { *; }

-dontwarn m.framework.**
-keep class m.framework.** { *; }

-dontwarn org.apache.http.entity.mime.**
-keep class org.apache.http.entity.mime.** { *; }

-dontwarn com.handmark.pulltorefresh.library.**
-keep class com.handmark.pulltorefresh.library.** { *; }

-dontwarn com.loopj.android.http.**
-keep class com.loopj.android.http.** { *; }

-dontwarn org.apache.http.**
-keep class org.apache.http.** { *; }

-dontwarn org.apache.http.**
-keep class org.apache.http.** { *; }

-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }

#-libraryjars   libs/android-support-v4.jar 
-dontwarn android.support.v4.** 
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment

-keep class com.google.gson.JsonObject { *; }
-keep class com.badlogic.** { *; }
-keep class * implements com.badlogic.gdx.utils.Json*
-keep class com.google.** { *; }

-keep class com.google.** {
    <fields>;
    <methods>;
}

-keepclassmembers class * extends java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# Gson specific classes
-keep class sun.misc.Unsafe {
    <fields>;
    <methods>;
}

//以下是由于调用了gson中含有泛型,所以要忽略掉项目中对象 
# -keep class com.google.gson.stream.** { *; }  
# Application classes that will be serialized/deserialized over Gson

//其中的  com.**.**..module  是你的对象所在的文件夹的位置
-keep class com.**.**..module.** {
    <fields>;
    <methods>;
}

//忽视某个类不进行混淆 com.**.**.Data  某个文件的位置
-keep class com.**.**.Data {*;}   

 

2.生成keystore (如果已经有可以直接用)

如果已经有了,可以直接考到 C:\Program Files (x86)\Java\jdk1.6.0_43  目录底下

如果没有的话打开命令行  在目录  C:\Program Files (x86)\Java\jdk1.6.0_43\bin>下输入  keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore

 参数意义: -validity 是证书的有效期, 100000天;空格,退格键 都算是密码。

命令执行后会在 C:\Program Files (x86)\Java\jdk1.6.0_43  目录下生成 android.keystore文件

3.然后eclipse执行

File -> Export -> Export Android Application -> Select project -> Using the existing keystore , and input password -> select the destination APK file 

就可以得到打包的文件

混淆后就会可以将文件中的类名  变为  a,b,c 等

4.自定义混淆,用一些字符替换a,b,c

在混淆文件  proguard.cfg 中加入

-obfuscationdictionary dictionary.txt
-classobfuscationdictionary dictionary.txt
-packageobfuscationdictionary dictionary.txt
将dictionary.txt放到项目的根目录底下,和proguard.cfg放在一起


以下是  dictionary.txt 的内容

http://download.csdn.net/detail/shuang__zi/9468050




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值