Android程序加入代码混淆器

加入代码混淆器,主要是加入proguard-project.txt文件的规则进行混淆,之前新建Android程序是proguard.cfg文件

可以看一下我采用的通用规则(proguard-project.txt文件)

-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keepattributes *Annotation* -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable # 以下两个命令配合让类的路径给删除了 -allowaccessmodification -repackageclasses ” # 记录生成的日志数据,在 proguard 目录下 -dump class_files.txt -printseeds seeds.txt -printusage unused.txt -printmapping mapping.txt # 异常都可以忽略就打开 #-dontwarn -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 -dontnote com.android.vending.licensing.ILicensingService -keepnames class * implements java.io.Serializable # Explicitly preserve all serialization members. The Serializable interface # is only a marker interface, so it wouldn’t save them. -keepclassmembers class * implements 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 (); } # Preserve all native method names and the names of their classes. #-keepclasseswithmembernames class * { # native ; #} #-keepclasseswithmembernames class * { # public (android.content.Context, android.util.AttributeSet); #} #-keepclasseswithmembernames class * { # public (android.content.Context, android.util.AttributeSet, int); #} # Preserve static fields of inner classes of R classes that might be accessed # through introspection. #-keepclassmembers class **.R$* { # public static ; #} # Preserve the special static methods that are required in all enumeration classes. -keepclassmembers enum * { public static **[] values (); public static ** valueOf (java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 如果你的工程是对外提供方法调用就打开 #-keep public class * { # public protected *; #}

如果还有规则就加在后面

另外,我们一般需要混淆的是自己写的代码,引入的第三方库文件是不需要混淆的,否则会出现如下错误:

Android程序加入代码混淆器

就是找不到所需要的类。所以第三方库需要指出来不混淆,方法如下:vcD4KPHA+yc/D5srHYW5kcm9pZC5zdXBwb3J0LnY0LqHB1dKyu7W9y/nQ6MDgo6yy6b+00v3I67/itcSw/MP7PC9wPgo8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141115/2014111508270446.png" alt="\">

在proguard-project.txt后面加上

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

第一句是忽略这个警告,第二句是保持类不混淆

把你所有引入的第三方库弄完后,在project.properties文件里加上一句

proguard.config=proguard-project.txt

就可以编译了(怎么编译?)

编译后,可以在bin里看到混淆代码的apk文件,是不是文件变小了,多爽!

同时,在bin/proguard文件夹里多了几个文件

Android程序加入代码混淆器

其中,mapping.txt就是所有混淆的类及变量名的前后参照,usage.txt是你在代码中没用到的方法,都给你列出来了,是优化后的结果。

分类:默认分类 时间:2015-03-13 人气:3
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.032 (s). 10 q(s)