您的位置:首页 > 移动开发 > Android开发

Android混淆

2015-08-27 18:21 591 查看
1.不想在为找资源撞得头破血流。

2.不想再为问人而低声下气。

作为一个程序猿,学习是自己的事,教不教是别人的事。为了,不让别人决定自己的左右,那就好好学习吧。

废话不多说,下面开始说代码:

1.project.properties(就这几行是重要的)



proguard.config=proguard.cfg

target=android-17



2.如果你对引入的第三方库不是很了解或者官方未对其混淆给出具体的实例的话,建议直接屏蔽,即不对其进行混淆。在proguard.cfg文件配置是:



-libraryjars
libs/android-support-v4.jar 引入的第三方库


-dontwarn
android.support.v4.**
告诉ProGuard不要警告找不到包名.**这个包里面的类的相关引用


-keep
class android.support.v4.** { *; }
对这个包里面的所有类和所有方法不进行混淆

其余的第三方库都是以这个形式来写

我的写法是这样的:(proguard.cfg)

-optimizationpasses 5

-dontusemixedcaseclassnames#混淆时不会产生形形色色的类名

-dontskipnonpubliclibraryclasses #指定不去忽略非公共的库类

-dontskipnonpubliclibraryclassmembers

-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



-keep public abstract interface com.asqw.android.Listener{#所有方法不进行混淆

public protected <methods>;

}





#单个类的混淆处理



#不要混淆MyBean的所有属性与方法

-keepclasseswithmembers class MyBean {

<fields>;

<methods>;

}


#不要混淆MySuperBean所有子类的属性与方法

-keepclasseswithmembers class * extends MySuperBean{

<fields>;

<methods>;

}





#不混淆某个包下的类

-keep class 包名.** {*;}





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

}





#安卓系统

-libraryjars libs/android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }





#极光推送

-libraryjars libs/jpush-sdk-release1.8.0.jar

-dontwarn cn.jpush.**

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





如果项目中使用到 Gson(Json)那么要使用下面的代码





##---------------Begin: proguard configuration for Gson ----------

# Gson uses generic type information stored in a class file when working with fields. Proguard

# removes such information by default, so configure it to keep all of it.



-keepattributes Signature

# For using GSON @Expose annotation

-keepattributes *Annotation*

# Gson specific classes

-keep class sun.misc.Unsafe { *; }

#-keep class com.google.gson.stream.** { *; }



# Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.examples.android.model.** { *; }



##---------------End: proguard configuration for Gson ----------



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: