android的混淆器
混淆器
在本文档中
- 使混淆器
- 混淆器配置
- 解码混淆过的堆栈跟踪
- 发布调试注意事项 应用程序
另请参阅
- 混淆器 手册»
- 混淆器 追溯手册»
混淆器工具减少、优化和混淆代码通过删除未使用的代码 重命名类、字段和方法与语义模糊的名字。 结果是一个更小的 大小的 . apk
反向工程文件,更困难。 因为混淆器让你 应用程序难以反向工程,重要的是,你使用它 当应用程序使用的特性,对安全敏感喜欢当你 授权应用程序 。
混淆器是集成到Android构建系统,所以你不需要调用它 手动。 混淆器运行,只有当您构建您的应用程序在发布模式下,所以你不要 必须处理混淆代码当你在调试模式下构建应用程序。 有混淆器运行是完全可选的,但强烈推荐。
本文档描述了如何启用和配置混淆器以及使用 追溯
工具来解码混淆过的堆栈跟踪。
使混淆器
当你创建一个Android项目, proguard.cfg
文件是自动 项目的根目录中生成。 这个文件定义了如何混淆器优化 混淆你的代码,所以它是非常重要的,你了解如何定制它 的需要。 默认配置文件只涵盖一般情况下,所以你很可能需要编辑 自己的需要。 看到下面的部分 混淆器配置 上的信息 自定义混淆器配置文件。
使混淆器,以便它作为Ant或Eclipse构建的一部分运行,设置 proguard.config
属性 < project_root > / project.properties
文件。 路径可以是绝对路径或相对路径项目的根。
注意: 使用Android工作室时,您必须添加混淆器 到你的 gradle.build
文件的构建类型。 有关更多信息,请参见 Gradle插件用户指南 。
如果你离开了 proguard.cfg
文件的默认位置(项目的根目录), 您可以指定它的位置如下:
proguard.config=proguard.cfg
你也可以将文件移动到任何你想要的,并指定绝对路径:
proguard.config=/path/to/proguard.cfg
当您构建您的应用程序在发布模式下,通过运行 蚂蚁释放
或 通过使用 导出向导 在Eclipse中,构建系统自动检查 的proguard.config
属性设置。如果是,混淆器自动流程 应用程序的字节码之前把所有东西打包成一个 . apk
文件。 在调试模式下 不调用混淆器,因为它使调试变得更加繁琐。
混淆器运行后输出以下文件:
-
dump.txt
-
描述中的所有类文件的内部结构
. apk
文件 -
. txt
- 列出原始之间的映射和混淆过的类,方法和字段名称。 这个文件很重要,当你收到一个错误报告发布构建,因为它 翻译模糊堆栈跟踪回到原来的类,方法,和成员的名字。 看到 解码混淆过的堆栈跟踪 获得更多信息。
-
seeds.txt
- 列出了那些未混淆类和成员
-
usage.txt
-
列表的代码去掉
. apk
这些文件位于以下目录:
< project_root > / bin /混淆器
如果您正在使用Ant。< project_root > /混淆器
如果您正在使用Eclipse。
警告: 我已经从香港订购一个(途中)。��些文件 混淆器生成覆盖最新的文件。 拯救他们每次你释放你的副本 应用程序为了反混淆的错误报告发布构建。 关于为什么要保存这些文件的更多信息是很重要的,看看 程序发布调试注意事项 。
混淆器配置
在某些情况下,默认的配置
proguard.cfg
文件将 足够了。 然而,许多情况是混淆器很难正确地分析和它可能删除代码 它认为没有使用,但实际上你的应用程序的需求。 一些例子包括:- 一个只在引用的类
AndroidManifest.xml
文件 - 一个从JNI调用方法
- 动态引用的字段和方法
默认的
proguard.cfg
文件试图涵盖一般情况下,但你可能 遇到异常等ClassNotFoundException
,当混淆器 除去了一个完整的应用程序调用的类。你可以修复错误时混淆器除去代码通过添加
近些年也
行 的proguard.cfg
文件。 例如:-keep public class <MyClass>
有许多选项和注意事项时使用
近些年也
选项,所以 强烈建议您阅读 混淆器 手册 关于定制配置文件的更多信息。 的 保存选项的概述 和 示例部分 尤其有帮助。 的 故障排除 部分的 混淆器手册概述了其他常见问题时可能会遇到你的代码被剥夺了 走了。解码混淆过的堆栈跟踪
当你的混淆代码并输出了一个堆栈跟踪,这些方法名字是混淆过的,这使得 调试困难,如果不是不可能的。 幸运的是,每当混淆器运行时,它输出
< project_root > / bin /混淆器/ . txt
文件,它显示了你原来的 类、方法和字段名称映射到名称很古怪。的
retrace.bat
在Windows或脚本retrace.sh
在Linux上的脚本 或Mac OS X把混淆后的堆栈跟踪信息可以转换到一个可读的。 它位于< sdk_root > /工具/混淆器/
目录中。 执行的语法追溯
工具是:retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你不指定一个值 < stracktrace_file > ,
追溯
工具读取 从标准输入。程序发布调试注意事项
保存
. txt
文件为每个版本发布给用户。 通过保留的一个副本. txt
发布构建版本文件, 你确保你可以调试一个问题如果用户遇到错误,并把混淆后的堆栈跟踪信息提交。 一个项目的. txt
文件覆盖每次你一个新的发布版本,所以你必须 你需要小心保存的版本。例如,说你发布一个应用程序和继续发展的新功能 申请一个新版本。 然后使用一个新的发布版本混淆器后不久。 的 构建覆盖前面
. txt
文件。 用户提交错误报告 从应用程序中包含一个堆栈跟踪,目前出版。 你不再有 调试用户的堆栈跟踪,因为. txt
相关文件的版本 在用户的设备上。 还有其他的你的情况. txt
文件可以被覆盖,所以 确保您保存为每一个版本的一个副本,你预测你要调试。你如何保存
. txt
文件是你的决定。 例如,您可以重命名它们 包括版本和构建号,或者你可以连同你的源代码进行版本控制 代码。
android的混淆器相关推荐
- android代码混淆笔记
混淆处理的apk被反编译后代码中包名类名等都变成abcd之类.非常难看懂. 使用代码混淆.启用混淆器,对相关文件进行编辑,然后打包签名就能够了: ------------ 在2.3的版本号中,项目中有 ...
- [转载]关于Android ProGuard混淆学习记录
转自:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72630.aspx 前段时间把Android的工程用Ant Build搞定后,现在需要把 ...
- .NET混淆器 Dotfuscator使用教程六:加强保护之添加Checks
本篇文章将继续上一篇文章<.NET混淆器 Dotfuscator使用教程五:加强保护之自定义保护设置>,为大家介绍加强保护之添加Checks. 添加Checks Dotfuscator可以 ...
- android代码混淆作用,Android分享:代码混淆那些事
1) 前言 ProGuard是一个开源的Java代码混淆器.它可以混淆Android项目里面的java代码,对的,你没看错,仅仅是java代码.它是无法混淆Native代码,资源文件drawable. ...
- Android 代码混淆(一)
文章转自我个人博客 本文前半部分对照 Proguard 文档 (Manul 中的 Introduce 部分)进行翻译同时加上个人的理解,如果有与原文不同,请以原文为主.后半部分是对几个步骤的验证. 介 ...
- android 代码混淆
简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...
- Android代码混淆技术
代码混淆技术的目的简而言之,由于Java程序比较容易被反编译,为了防止别人反编译源代码,窃取应用程序中的核心技术,或者说是为了增加反编译的难度,可以通过代码混淆技术增加对源代码的保护. 一.ProGu ...
- Android 代码混淆 包名被混淆 主工程二次混淆 一站解决你的混淆
代码混淆 (Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码.执行代 ...
- Android 代码混淆规则
1. Proguard介绍 Android SDK自带了混淆工具Proguard.它位于SDK根目录\tools\proguard下面. ProGuard是一个免费的Java类文件收缩,优化,混淆和预 ...
- Android 代码混淆 混淆方案
因为开启混淆会使编译时间变长,所以debug模式下不开启.我们需要做的是: 1.将release下minifyEnabled的值改为true,打开混淆: 2.加上shrinkResources tru ...
最新文章
- 动手写一款简单的chrome天气插件
- php补充 扩展,php补充安装扩展支持
- C++中extern “C”含义深层探索
- 学习总结:机器学习(六)
- ccBPM典型的树形表单和多表头表单的流程示例
- LeetCode——面试题 08.01. 三步问题
- vue如何获取div的宽度_vue获取dom元素高度的方法
- root用户配置免密登录_ssh免密登录(普通用户和root用户)
- C语言程序设计(第三版)何钦铭著 习题4-10
- 高校科研管理系统源代码_高校科研信息管理系统
- iis6.0远程代码执行漏洞
- DNS DDNS NBNS mDNS LLMNR LLDPDU SSDP协议
- Android仿高德地图打车的三段式BottomSheet
- 地震数据剖面图-matlab
- 8、Flume 日志采集工具
- 如何在Ubuntu上安装Couch DB 1.5
- python开发者是谁_Python 太蹩脚了?开发者总结了 8 大缘故
- shipyard docker集群问题
- ROS2 基础概念 服务
- 那些年我们在python掉进的坑系列之一pandas的to_sql