- 浏览: 55181 次
- 性别:
- 来自: 深圳
最新评论
注意:这里介绍的混淆是2.3SDK以后我方式。
1.打开工程会发现一个文件“proguard-android.txt”
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
上述文件就是android 自带的文件,从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件。
并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。
此文件中的每一项在后面会具体列出。
2。操作步骤
1).在工程的"default.properties"中添加这样一句话“proguard.config=proguard-android.txt”
2).签名打包:选中工程--->右击Android Tools—Export Signed Appalication Packges
3).打出的APK反编译你会发现代码都边了,此APK可以安装使用。
3。遇到问题
1).如果不能打包,看出错在那里,一般的出现warning 的话,你在 proguard-android.txt文件中添加这一命令
-dontwarn
2).打包出的结果比以往的不混淆的大小是不一样的,可能省略很多东西。具体要看 proguard文件夹中的 四个.txt文件
运行混淆器之后输出的文件有:
dump.txt
描述.apk包中所有class文件的内部结构。
mapping.txt
列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的 bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。更多信息, 查看解码混淆过的堆栈跟踪信息。
seeds.txt
列出那些未混淆的类和成员。
usage.txt
列出从.apk中剥离的代码
3).有些类是不能混淆的,从proguard-android.txt文件可以看出,保留了很多类和方法。
4).新建的工程中可能proguard-android.txt文件是空的,你可以去SDK目录下..\android-sdk-windows\tools\proguard查找这个文件。
3.介绍下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}
-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} 设置源文件中给定的字符串常量
发表评论
-
(图片缩放)自动适配屏幕支持缩放旋转,自动居中的imageview
2013-04-19 17:01 6699废话不多说,直接代码。该imageview 只能代码里ne ... -
使用jdk中keytool生成证书
2012-05-23 15:56 18053-genkey 在用户主目录中创建一个默认文件 ... -
android 反编译
2012-05-23 15:02 1060转载自:http://blog.csdn.net/sun ... -
weiview 笔记
2012-03-01 17:25 1755WebView在开发过程中应该注意几点: 1 ... -
android获取屏幕分辨率之DisplayMetrics
2011-12-22 10:12 2383android分辨率对于开发者来说是一项重要的信息。下面就来介 ... -
Ubuntu Android 的 USB 调试模式
2011-09-02 14:35 1839在Android开发者网站中, 它提供了在 Ubuntu ... -
Android 中的BroadCastReceiver
2011-08-30 14:04 1107Android 中的BroadCastReceive ... -
android桌面默认的5个应用图标的加载和存储
2011-08-30 14:01 27331) 桌面安装之后有5个默认的图标:search、contac ... -
访问其它程序的SharedPreferences中的数据
2011-08-30 13:58 2537I:访问本程序的(FirstApp) SharedPrefe ... -
编译android源码出现的问题解析
2011-08-30 13:55 2488Android 入门 (一) 试 ... -
android apk 程序签名
2011-08-30 13:53 937[前言] 我们平时在 ... -
ubuntu 10.10下搭建android开发环境 安装必要工作用软件
2011-08-30 13:50 1412在ubuntu下进行开发,就必须要熟悉ubuntu下常用的,能 ... -
androidSDK开发包tools工具介绍(一)--draw9patch
2011-04-27 11:16 2569开发环境的搭建就不做赘述了,网上一搜一大把。SDK ...
相关推荐
Android混淆工具就是用来提升应用程序安全性的一种手段,它能够有效地保护代码不被逆向工程分析,降低恶意攻击的风险。本篇将详细介绍Android混淆工具,尤其是其中的经典工具ProGuard。 Android混淆工具的主要功能...
Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包
Android混淆技术是Android应用开发者用于提升应用安全性的重要手段,主要目的是为了防止应用被反编译。在移动应用领域,反编译是一个常见的问题,特别是在应用包含敏感数据或者进行商业运营时,防止代码泄露变得尤为...
本文将详细解析Android混淆配置的相关知识点,包括混淆的目的、配置原理、常用配置指令以及注意事项。 混淆的目的: 1. **保护代码安全**:混淆可以将源代码中的类名、方法名和变量名转化为无意义的简短名称,使得...
在这个"Android混淆编译Demo"中,我们将深入探讨如何在Android Studio 3.1.2环境下进行混淆配置和编译。 首先,混淆是通过ProGuard工具实现的,它是一个Java字节码混淆器、优化器和裁剪器。在Android Studio中,...
Android Studio默认集成了ProGuard工具,它是Android混淆的核心。ProGuard不仅可以混淆代码,还能优化、压缩和删除未使用的类和方法。 标题提到的“android 混淆 去除第三方jar”,意味着我们需要处理包含在项目中...
本篇将详细介绍Android混淆以及各个版本的Proguard文件,帮助开发者理解其工作原理和使用方法。 混淆(Proguard)是一种Java字节码混淆工具,它能对应用的类、方法和变量进行重命名,使其变得难以理解和逆向工程,...
在Android应用开发中,混淆(ProGuard)是一个重要的步骤,用于优化代码、移除未使用的类和方法,以及为发布版本提供安全保护。然而,在混淆过程中可能会遇到各种问题,其中"Can't process class"错误是常见的一种。...
然而,混淆过程中可能会遇到一些问题,本篇文章将详细讲解Android混淆的原理、步骤以及如何解决常见的报错。 1. **混淆的基本原理** 混淆是通过改变类名、方法名、变量名来达到代码加密的效果,同时优化代码,移除...
直接复制这个到Android项目中即可使用,只需要添加项目中用到的第三方的混淆规则即可,如果有自己的需要最好修改一下,不修改也无大碍
在 android studio 使用自定义混淆字典进行混淆,增加app被反编译后阅读的难度, 内容为16位由0,o,O,3个字符生产的如OoO0oOoOoO0O0oO0这样的不重复字符串,使用方式:将下载的dictoO0.txt放在proguard-rules.pro同级...
本文将深入探讨Android混淆代码的原理、步骤以及实例。 首先,Android Studio项目中默认包含一个`proguard-project.txt`文件,这是配置混淆规则的地方。如果误删,可以从其他项目中复制或者重新创建。在`proguard-...
本文将详细介绍如何在Android Studio中将多个Module混淆并打包成一个Jar文件。 1. **创建Module** 首先,确保你已经拥有多个独立的Android Studio Module。每个Module代表一个独立的功能或库。在Android Studio中,...
### Android混淆器(ProGuard)知识点详解 #### 一、概述 **Android混淆器(ProGuard)**是一种用于压缩、优化并混淆Java字节码的工具,尤其适用于Android应用程序的开发过程中。通过删除未使用的代码,并将类名、方法...
在Android SO文件保护中,混淆主要涉及以下几个方面: 1. **JNI方法名混淆**:JNI(Java Native Interface)是Java与原生代码交互的桥梁。在描述中提到的"JNI方法名混淆",就是将原本易于理解的JNI方法名改写为无...
在Android开发过程中,为了增强应用的安全性,开发者有时会采取资源混淆这一技术手段。资源混淆主要是通过对应用中的资源文件(如图片、布局、字符串等)进行重命名和重新打包,使其变得难以理解和逆向工程,从而...
在Android开发中,混淆、签名和反编译是三个关键步骤,它们对于应用程序的安全性和发布流程至关重要。 **混淆**的主要目的是保护代码不被轻易逆向工程解析,减少恶意攻击的可能性。在Android中,通常使用ProGuard...
本文将深入探讨两种防止Android应用被反编译的策略:代码混淆和使用安全工具。 首先,我们来了解一下什么是代码混淆。代码混淆是一种通过改变代码的可读性来增加其复杂性的技术,主要是通过对变量名、函数名和类名...
本文将详细介绍如何在Android项目中进行代码混淆,以防止反编译。 首先,我们需要在项目文件中进行配置。在Android项目中,找到`project.properties`文件,通常位于项目的根目录下。在文件的最后添加一行`proguard....
### Android签名混淆打包详解 #### 一、签名与混淆打包的重要性 在Android应用开发过程中,签名与混淆打包是非常重要的步骤。签名确保了应用的身份唯一性和后续版本更新的一致性,而混淆则增强了应用的安全性,保护...