美文网首页
eclipse混淆Android项目代码

eclipse混淆Android项目代码

作者: ccbuluo | 来源:发表于2017-05-10 19:51 被阅读0次

    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}    设置源文件中给定的字符串常量  
    

    相关文章

      网友评论

          本文标题:eclipse混淆Android项目代码

          本文链接:https://www.haomeiwen.com/subject/brogtxtx.html