eclipse混淆Android项目代码

2017-05-10  本文已影响0人  ccbuluo

eclipse中对Android代码进行混淆操作步骤如下:

  1. 首先将project.properties中打开(去掉注释符“#”)
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

其中,${sdk.dir}/tools/proguard/proguard-android.txt为Android SDK中提供的基本混淆规则。

  1. 修改proguard-project.txt
    proguard-project.txt是基于项目的混淆规则,需要我们根据项目的具体情况进行添加。
    混淆规则可以查看后面的详细说明,此处提供一个简单的示例
-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 class android.support.v4.** {*;}
-keep class com.stt.photoapk.jni.JniTest {*;}

示例中,keep了需要在manifest中注册的Android组件类;keep了support.v4包中所以类;keep了jni的Native接口类JniTest。

  1. 导出Apk
    debug模式,混淆是不会起作用用的,只有我们导出我们的项目的时候,混淆才会起作用,导出apk需要进行签名,我们还需要设置一下签名信息。如果你的proguard配置没有出现问题,那么导出后的apk已经被进行了混淆操作。
  2. 注意事项
    Project所在的目录不可用有空格或者一些特殊字符(如“(”)等出现,否则混淆会出错。
  3. 混淆规则:

Android代码混淆常用的规则:

指定代码的压缩级别 
-optimizationpasses 5 
包明不混合大小写 
-dontusemixedcaseclassnames 
不去忽略非公共的库类 
-dontskipnonpubliclibraryclasses 
优化 不优化输入的类文件 
-dontoptimize 
预校验 
-dontpreverify 
混淆时是否记录日志 
-verbose 
混淆时所采用的算法 
-optimizations !code/simplification/arithmetic,!field/,!class/merging/ 
保护注解 
-keepattributes Annotation 
保持哪些类不被混淆 
-keep public class * extends android.app.Fragment 
-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 
如果有引用v4包可以添加下面这行 
-keep public class * extends android.support.v4.app.Fragment 
忽略警告 
-ignorewarning 
记录生成的日志数据,gradle build时在本项目根目录输出 
apk 包内所有 class 的内部结构 
-dump class_files.txt 
未混淆的类和成员 
-printseeds seeds.txt 
列出从 apk 中删除的代码 
-printusage unused.txt 
混淆前后的映射 
-printmapping mapping.txt

proguard 配置最常用的配置选项包括:

-include {filename}    从给定的文件中读取配置参数   
-basedirectory {directoryname}    指定基础目录为以后相对的档案名称   
-injars {class_path}    指定要处理的应用程序jar,war,ear和目录   
-outjars {class_path}    指定处理完后要输出的jar,war,ear和目录的名称   
-libraryjars {classpath}    指定要处理的应用程序jar,war,ear和目录所需要的程序库文件   
-dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。   
-dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。  
   
保留选项   
-keep {Modifier} {class_specification}    保护指定的类文件和类的成员   
-keepclassmembers {modifier} {class_specification}    保护指定类的成员,如果此类受到保护他们会保护的更好  
-keepclasseswithmembers {class_specification}    保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。   
-keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)   
-keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除)   
-keepclasseswithmembernames {class_specification}    保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)   
-printseeds {filename}    列出类和类的成员-keep选项的清单,标准输出到给定的文件   
   
压缩   
-dontshrink    不压缩输入的类文件   
-printusage {filename}   
-dontwarn   如果有警告也不终止  
-whyareyoukeeping {class_specification}       
   
优化   
-dontoptimize    不优化输入的类文件   
-assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用   
-allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员   
   
混淆   
-dontobfuscate    不混淆输入的类文件   
-printmapping {filename}   
-applymapping {filename}    重用映射增加混淆   
-obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称   
-overloadaggressively    混淆时应用侵入式重载   
-useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆   
-flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中   
-repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中   
-dontusemixedcaseclassnames    混淆时不会产生形形色色的类名   
-keepattributes {attribute_name,...}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and   
   
InnerClasses.   
-renamesourcefileattribute {string}    设置源文件中给定的字符串常量  
上一篇下一篇

猜你喜欢

热点阅读