android+proguard目录,Android Proguard 详解

一般的商业项目都需要对代码进行加密,Android提供了一种代码混淆方法,介绍如下:

一、简介

1、简介

混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比较小的.apk文件,该文件比较难进行逆向工程。因此,当你的应用程序对安全敏感(要求高),例如当你授权应用程序的时候,混淆器是一种重要的保护手段。

混淆器被集成在android 构建系统中,所以你不必手动调用它。同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码。让混淆器运行起来是可选择的,但是推荐选上。

2.注意事项

在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt。

如果需要对项目进行全局混码,只需要进行一步操作:

将project.properties的中

“#  proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。

如果有一些代码不能被混淆,比如需要加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。在导出的时候,可能不会报错。但是在手机上运行的时候,需要调用so文件的时候,就会报某某方法无法找到。这个时候就需要用到proguard-project.txt。

二、在Eclipse中启用ProGuard

1、确定Android SDK目录下是否存在proguard文件夹

例如   D:\Environment\android-sdk-windows\tools\proguard

2、配置

1)检查项目根目录下是否存在proguard.cfg(或proguard-project.txt)文件,如果不存在(说明的当前的项目是2.3以前的项目),需要新建一个2.3的android项目,从该项目中将proguard.cfg文件拷贝到你的项目根目录中,无需改动(除非你明白如何自定义自己的混淆策略),继续下面步骤。

2)如果存在,则找到项目根目录下的default.properties[如果你使用的是ADT14或者更高版本,那么项目中没有default.properties文件,只有project.properties文件,找到project.properties文件即可]文件,在文件中增加一项配置:proguard.config=proguard.cfg

这样就完成了配置

3.语法规则

# android 原始混淆模板

# -------------------------------------

# ----------------------------------

# 通过指定数量的优化能执行

# -optimizationpasses n

# ----------------------------------

-optimizationpasses 5

# ----------------------------------

# 混淆时不会产生形形色色的类名

# -dontusemixedcaseclassnames

# ----------------------------------

#-dontusemixedcaseclassnames

# ----------------------------------

# 指定不去忽略非公共的库类

# -dontskipnonpubliclibraryclasses

# ----------------------------------

#-dontskipnonpubliclibraryclasses

# ----------------------------------

# 不预校验

# -dontpreverify

# ----------------------------------

# -dontpreverify

# ----------------------------------

# 输出生成信息

# -verbose

# ----------------------------------

-verbose

# ----------------------------------

# 优化选项

# optimizations {optimization_filter}

# ----------------------------------

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

}

# -----------------

# modify 修改合并

# -----------------

-keep public class * extends android.view.View {

public (android.content.Context);

public (android.content.Context, android.util.AttributeSet);

public (android.content.Context, android.util.AttributeSet, int);

public void set*(...);

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

#--------------------------

# 保护类型 -keepattributes 说明

# Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable,

# LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations,

# RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, and AnnotationDefault

# --------------------

-keepattributes **

-libraryjars /lib/rt.jar

# ----------------------

# 不压缩指定的文件

# -dontshrink

# ----------------------

-dontshrink

# ----------------------

# 不优化指定的文件

# -dontoptimize

# -----------------------

-dontoptimize

# -----------------------

# 不混淆指定的文件

# -dontobfuscate

# -----------------------

# ----- 混淆包路径 -------

-repackageclasses ''

-flattenpackagehierarchy ''

-target 1.6

# -------- 以下是使用了 roboguice-1.1.2.jar 以及 guice-2.0-no_app.jar 功能需要保护的字段及类相关 --------

-keep class com.google.inject.Binder

-keepclassmembers class * {

@com.google.inject.Inject (...);

}

-keepclassmembers class * {

void *(**On*Event);

}

-keepclassmembers class **.R$* {

public static ;

}

# ------ 编译时需要用到的 jar 包

-libraryjars D:/dev_rc/android-sdk-windows/add-ons/addon_google_apis_google_inc_11/libs/maps.jar

# ------ 保护 谷歌第三方 jar 包,界面特效 ----------

-keep class android.support.v4.**

-dontwarn android.support.v4.**

# ------ 保护百度地址jar包 --------

-keep class com.baidu.mapapi.** { *; }

-dontwarn com.baidu.mapapi.**

# --- 打包时忽略以下类的警告 --

-dontwarn com.classpackage.AA

#-keepnames class * implements java.io.Serializable

# ---------保护所有实体中的字段名称----------

-keepclassmembers class * implements java.io.Serializable {

;

}

# --------- 保护类中的所有方法名 ------------

-keepclassmembers class * {

public ;

}

如有问题请留言,转载注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值