文档章节

个人总结之ec下混淆

Magic_锋
 Magic_锋
发布于 2016/02/21 21:16
字数 1754
阅读 24
收藏 0

    首先在project.properties下放开

    然后在proguard.project 洗添加混淆语句的操作

    ec自带的打包工具打包签名,不能run成的apk

-optimizationpasses 5                                #设置混淆的压缩比率 0 ~ 7
  -dontusemixedcaseclassnames                #Aa aA
  -dontskipnonpubliclibraryclasses               #如果应用程序引入的有jar包,并且想混淆jar包里面的class
  -dontpreverify                                              #混淆后生产映射文件 map 类名->转化后类名的映射
  -verbose                                                     #不用输出详细的过程
  -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  #混淆采用的算法
  -dontwarn                                                #不用输出警告
 
 #第三方jar包

-libraryjars libs/baidumapapi.jar
-libraryjars libs/tencent_openapi.jar
-libraryjars libs/httpmime-4.1.3.jar
-libraryjars libs/weibo.sdk.android.sso.jar
-libraryjars libs/android-support-v4.jar 


 #保持哪些类不变
 -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
   
  -keepclasseswithmembernames class * {            #所有的native方法不能被混淆
   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);
  }


  -keepclassmembers class * {
     public <init>(org.json.JSONObject);
 }
   
 -keep class * implements android.os.Parcelable {    #aidl文件不能被混淆
   public static final android.os.Parcelable$Creator *;
  }
  
  
  #不混淆第三方jar包中的类
  -keep class com.baidu.mapapi.** {*;}
 -keep class com.tencent.tauth.** {*;}
 -keep class org.apache.http.entity.mime.** {*;}
 -keep class android.support.v4.** {*;}
 -keep class android.net.http.** {*;}
 -keep class com.weibo.sdk.android.** {*;}
 -keep class com.sina.sso.** {*;}

-keepattributes *Annotation*

============================================

三、对于引用第三方包的情况,可以采用下面方式避免打包出错:

-libraryjars libs/aaa.jar

-dontwarn com.xx.yy.**

-keep class com.xx.yy.** { *;}

 

四、常见的不能混淆的AndroidCode

Android 程序 ,下面这样代码混淆的时候要注意保留。
Android系统组件,系统组件有固定的方法被系统调用。
被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View 。
Android Parcelable ,需要使用android 序列化的。
其他Anroid 官方建议 不混淆的,如
android.app.backup.BackupAgentHelper
android.preference.Preference
com.android.vending.licensing.ILicensingService
Java序列化方法,系统序列化需要固定的方法。
枚举 ,系统需要处理枚举的固定方法。
本地方法,不能修改本地方法名
annotations 注释
数据库驱动
有些resource 文件
用到反射的地方

五、常用参数解释

-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}

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

-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}

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

 

六、一些常用的包的配置

sharesdk混淆注意:

-keep class android.net.http.SslError

-keep class android.webkit.**{*;}

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

-keep class com.sina.**{*;}

-keep class m.framework.**{*;}

Gson混淆配置:

-keepattributes *Annotation*

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

-keep class com.idea.fifaalarmclock.entity.***

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

Umeng sdk混淆配置:

-keepclassmembers class* {  

   public <init>(org.json.JSONObject);

}

-keep class com.umeng.**

-keep public class com.idea.fifaalarmclock.app.R$*{ 

   public static final int *;

}

-keep public class com.umeng.fb.ui.ThreadView {}

-dontwarn com.umeng.**

-dontwarn org.apache.commons.**

-keep public class * extendscom.umeng.**

-keep class com.umeng.** {*; }


© 著作权归作者所有

Magic_锋
粉丝 0
博文 54
码字总数 32238
作品 0
东城
程序员
私信 提问
ShadowsocksR 推荐协议混淆设置

协议推荐: 协议用authchaina最佳,此时推荐不使用加密(设置为none),混淆随意 加密选择:若协议用authchaina,那加密用none(但不代表密码可以不写或两边不匹配) 若协议不是authaes128m...

niithub
2018/05/15
0
0
google官方orm数据框架room开箱使用

我在前天才得知2017年的IO大会官方搞了个android.arch.persistence,orm数据库框架room便在其列.... 1. 相关链接以及引入依赖 官网对Room的描述:https://developer.android.com/training/da...

霁雪清虹
2017/12/06
0
0
微信JSSDK开发

在微信中要进行页面自定义标题和内容分享,在2015之前都可以直接使用微信API---WeixinJSBridge,但是2015年1月被废除了。然后有了JSSDK,如果要进行自定义分享,只能先搞懂这个家伙了。 重点...

Reya滴水心
2015/12/17
307
0
跨平台开源通讯组件elastic communication

    elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.net的通讯交互应用。E...

泥水佬
2015/12/01
617
0
TaroEcharts-各种图表在Taro中的实践

随着React的快速发展,我们也越来越接受它的写法和思想,如今小程序如火中天,普通的编译模式早已不适应开发者的需求。人们在不断的寻求一种React能够在小程序中编译的语言框架,因此Taro便诞...

hello等风来
01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
58分钟前
1
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部