eclipse 代码混淆的那点事

转载 2016年08月29日 18:09:52

eclipse 代码混淆的那点事
首先说说什么是代码混淆:
1.混淆器通过删除从未用过的代码
2.使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆

具体步骤为:
一.启用并配置混淆器
主要注意一下几点:
(1).由于sdk版本不同导致默认生产的用来混淆代码的文件目录也不相同:
例如项目根目录下面的文件的文件名为:
1. proguard.cfg 和 project.properties 文件时(在较低版本上出现),则只需在 project.properties 文件末尾添加 proguard.config=proguard.cfg 再将项目 Export 即可。
2.proguard-project.txt 和 project.properties 文件,这时需要在 proguard-project.txt 文件中进行如下信息的配置,然后再将项目 Export 即可

This file is automatically generated by Android Tools.

Do not modify this file – YOUR CHANGES WILL BE ERASED!

#

This file must be checked in Version Control Systems.

#

To customize properties used by the Ant build system edit

“ant.properties”, and override values to adapt the script to your

project structure.

#

To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

Project target.

target=android-16
以上的配置信息即是 project.properties 文件中内容,蓝色文字为我们在代码混淆过程中需要添加的配置信息,其中:sdk.dir 为你在当前机器上 SDK 的安装路径。如果想保留某个包下的文件不被混淆,可以在 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 project.properties.

#

For more details, see

http://developer.android.com/guide/developing/tools/proguard.html

Add any project specific keep options here:

-dontwarn com.cnki.android.cnkireader.**
-keep class com.cnki.android.cnkireader.* { ; }

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

}

(2).混淆文件 proguard.cfg 参数详解
-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合
-dontskipnonpubliclibraryclasses # 是否混淆第三方jar
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/,!class/merging/ # 混淆时所采用的算法

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

-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 * { # 保持枚举 enum 类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
}

-keep class MyClass; # 保持自己定义的类不被混淆

二.使用retrace工具对混淆的堆栈跟踪信息进行解码以及向多了解一下请看下面的文章
http://www.cnblogs.com/over140/archive/2011/04/22/2024528.html

TCP 的那些事儿(上)

这篇文章分为上下两篇
  • woxiaozhi
  • woxiaozhi
  • 2014年05月28日 13:06
  • 3313

AOP 那点事儿

又是一个周末,刚给宝宝喂完牛奶,终于让她睡着了。所以现在我才能腾出手来,坐在电脑面前给大家写这篇文章。 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这...
  • kingzone_2008
  • kingzone_2008
  • 2015年10月31日 21:47
  • 750

前端优化那点事

前端的优化林林种种,要想提高网站的性能,提升用户的体验度,需要我们做的方面有很多: 1.化整为零、提高效率 2.局部操作、勿大动干戈 3.本地缓存、减少请求 其他的还有减少DOM的操作、高效实用HTM...
  • u010508826
  • u010508826
  • 2016年02月29日 21:34
  • 433

Java的那点事

Java九种基本数据类型以及封装类基本数据类型:boolean(-)、int(4)、float(4)、double(8)、short(2)、char(2)、btye(1)、long(8)、void(-...
  • Le_leezp
  • Le_leezp
  • 2017年03月19日 17:02
  • 235

ThreadLocal 那点事儿

ThreadLocal
  • zhangming1013
  • zhangming1013
  • 2015年03月02日 15:05
  • 522

创业那点事儿

创业那点事儿最近徐先生最终还是把创办公司的事情开始着手做了,用他的话来说:“这是迟早要做的事情”。说实话现在创办公司也真是简单,找一个代理公司,各种流程手续都给你办妥了,你只需要提供公司名称,选择一下...
  • liujifang1119
  • liujifang1119
  • 2016年10月25日 15:47
  • 135

mysql中事务处理那点事

1事务隔离级别 事务有ACID特性: A:atomicity 原子性 要么都操作成功,要么就都失败。只有查询的事务很容易处理原子性,但是有更新和插入动作的事务,就要注意并发对这部分数据的影响了。 ...
  • sdywcd
  • sdywcd
  • 2013年05月25日 21:23
  • 1769

30分钟带你熟练性能优化的那点儿事儿(案例说明)

前言   性能优化是数据库运维人员和中、高级软件开发人员的必备技能,很多时候老司机和新司机的区别就在写出的东西是否优化。   博主接触过近千家客户的系统,这些系统都存在着各种各样的性能问题。那么如...
  • luyaran
  • luyaran
  • 2016年12月16日 14:59
  • 325

Netty那点事(一)概述

Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io。关于Mina已...
  • zhangrongchao_
  • zhangrongchao_
  • 2015年05月28日 17:42
  • 562

iOS开发:设计模式那点事

说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下。 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰...
  • hyugahinat
  • hyugahinat
  • 2016年02月19日 16:53
  • 510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:eclipse 代码混淆的那点事
举报原因:
原因补充:

(最多只允许输入30个字)