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

android 代码混淆 eclipse

2015-09-14 18:07 531 查看
混淆报告

一、混淆流程

1.在主工程找到project.properties文件,添加proguard.config=proguard-project.txt 或者是proguard.config=proguard.cfg,(名字自定义),如果没有proguard文件,可以在别的工程里面拷贝一个过来,后面在添加一些自定义的过滤。

二.功能语法定义

1.官方的配置:

-optimizationpasses 5 # 指定代码的压缩级别 5-dontusemixedcaseclassnames # 不要使用大小写混合-dontskipnonpubliclibraryclasses # 不要混淆第三方jar-dontpreverify # 混淆时不做预校验

-verbose # 混淆时记录日志-optimizations !code/simplification/arithmetic,!field/,!class/merging/ # 混淆时所采用的算法

以下三条语句是本次混淆忘记加,导致程序出现异常,切记

不要混淆注释,在之前的sdk版本中,不会有这个问题, 从level8开始引入了注#释。如果代码中有用到,而没有处理,就会出现错误的。主要是注释引起的。

-keepattributes Annotation

不要混淆泛型,不然也会出错

-keepattributes Signature

R文件不能被混淆

-keep class *.R$ { *; }

—————————————-

不能混淆四大主件,以及其他官网提及到的,例如:序列化的类,反射机制,

详情见官网。

-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.BackupAgent

-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 class * extends android.support.v4.app.Fragment

-keep public class * extends android.app.Fragment

-keep class com.itheima.mobilesafe.engine.AppInfoProvider

-keep class net.youmi.android.* {;}

-keepclasseswithmembernames class * {

native ;

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembers class * {

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

}

-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

!static !transient ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

2.对于工程有jar 的做法:

对于加入的第三方jar全部都要定义,可以指定全路径。如果jar在主工程内

可以这样子定义\libs**.jar 下面是本次定义引用的jar包

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\cling-core-1.0.5.jar’

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\cling-support-1.0.5.jar’

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\teleal-common-1.0.13.jar’

-libraryjars ‘E:\eclipseworkspace\abc\com.android.airmusic.ui\libs\android-support-v4.jar’

如果有加jar,下面是过滤第三方jar 的语法

jar本身已经混淆过,再次混淆会报异常

-dontwarn 为取消警告, -keep为保持不被混淆,也就是过滤掉

下面为本次过滤的jar包

-dontwarn com.sun.tools.**

-keep class com.sun.tools.* {;}

-dontwarn org.teleal.**

-keep class org.teleal.* {;}

-dontwarn android.support.v4.**

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

三、总结

为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译。

混淆的过程小结:

1.先过滤官方不建议混淆的类型

2.如果有jar,先定义引用jar包,再过滤整个jar的东西

3.在打包的过程中如果有报编译异常,可对相应的包进行过滤

4.更多详情查看:

http://wenku.baidu.com/view/e30d6fd150e2524de5187e1a.html

四、附录

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

#

For more details, see

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

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations !code/simplification/arithmetic,!field/,!class/merging/

-keepattributes InnerClasses

-keepattributes Annotation

-keepattributes Signature

-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.BackupAgent

-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 class * extends android.support.v4.app.Fragment

-keep public class * extends android.app.Fragment

-keep class com.itheima.mobilesafe.engine.AppInfoProvider

-keep class net.youmi.android.* {;}

-keep class *.R$ { *; }

-keepclasseswithmembernames class * {

native ;

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembers class * {

public (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);

** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

!static !transient ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\cling-core-1.0.5.jar’

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\cling-support-1.0.5.jar’

-libraryjars ‘E:\eclipseworkspace\abc\airmusic-play\libs\teleal-common-1.0.13.jar’

-libraryjars ‘E:\eclipseworkspace\abc\com.android.airmusic.ui\libs\android-support-v4.jar’

-dontwarn com.sun.tools.**

-keep class com.sun.tools.* {;}

-dontwarn org.teleal.**

-keep class org.teleal.* {;}

-dontwarn android.support.v4.**

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

-keep class org.xmlpull.* {;}

-keep class org.kxml2.io.* {;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android-混淆