混淆器

在本文档中

  1. 使混淆器
  2. 混淆器配置
  3. 解码混淆过的堆栈跟踪
    1. 发布调试注意事项 应用程序

另请参阅

  1. 混淆器 手册»
  2. 混淆器 追溯手册»

混淆器工具减少、优化和混淆代码通过删除未使用的代码 重命名类、字段和方法与语义模糊的名字。 结果是一个更小的 大小的 . 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的混淆器相关推荐

  1. android代码混淆笔记

    混淆处理的apk被反编译后代码中包名类名等都变成abcd之类.非常难看懂. 使用代码混淆.启用混淆器,对相关文件进行编辑,然后打包签名就能够了: ------------ 在2.3的版本号中,项目中有 ...

  2. [转载]关于Android ProGuard混淆学习记录

    转自:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72630.aspx 前段时间把Android的工程用Ant Build搞定后,现在需要把 ...

  3. .NET混淆器 Dotfuscator使用教程六:加强保护之添加Checks

    本篇文章将继续上一篇文章<.NET混淆器 Dotfuscator使用教程五:加强保护之自定义保护设置>,为大家介绍加强保护之添加Checks. 添加Checks Dotfuscator可以 ...

  4. android代码混淆作用,Android分享:代码混淆那些事

    1) 前言 ProGuard是一个开源的Java代码混淆器.它可以混淆Android项目里面的java代码,对的,你没看错,仅仅是java代码.它是无法混淆Native代码,资源文件drawable. ...

  5. Android 代码混淆(一)

    文章转自我个人博客 本文前半部分对照 Proguard 文档 (Manul 中的 Introduce 部分)进行翻译同时加上个人的理解,如果有与原文不同,请以原文为主.后半部分是对几个步骤的验证. 介 ...

  6. android 代码混淆

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  7. Android代码混淆技术

    代码混淆技术的目的简而言之,由于Java程序比较容易被反编译,为了防止别人反编译源代码,窃取应用程序中的核心技术,或者说是为了增加反编译的难度,可以通过代码混淆技术增加对源代码的保护. 一.ProGu ...

  8. Android 代码混淆 包名被混淆 主工程二次混淆 一站解决你的混淆

    代码混淆 (Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码.执行代 ...

  9. Android 代码混淆规则

    1. Proguard介绍 Android SDK自带了混淆工具Proguard.它位于SDK根目录\tools\proguard下面. ProGuard是一个免费的Java类文件收缩,优化,混淆和预 ...

  10. Android 代码混淆 混淆方案

    因为开启混淆会使编译时间变长,所以debug模式下不开启.我们需要做的是: 1.将release下minifyEnabled的值改为true,打开混淆: 2.加上shrinkResources tru ...

最新文章

  1. 动手写一款简单的chrome天气插件
  2. php补充 扩展,php补充安装扩展支持
  3. C++中extern “C”含义深层探索
  4. 学习总结:机器学习(六)
  5. ccBPM典型的树形表单和多表头表单的流程示例
  6. LeetCode——面试题 08.01. 三步问题
  7. vue如何获取div的宽度_vue获取dom元素高度的方法
  8. root用户配置免密登录_ssh免密登录(普通用户和root用户)
  9. C语言程序设计(第三版)何钦铭著 习题4-10
  10. 高校科研管理系统源代码_高校科研信息管理系统
  11. iis6.0远程代码执行漏洞
  12. DNS DDNS NBNS mDNS LLMNR LLDPDU SSDP协议
  13. Android仿高德地图打车的三段式BottomSheet
  14. 地震数据剖面图-matlab
  15. 8、Flume 日志采集工具
  16. 如何在Ubuntu上安装Couch DB 1.5
  17. python开发者是谁_Python 太蹩脚了?开发者总结了 8 大缘故
  18. shipyard docker集群问题
  19. ROS2 基础概念 服务
  20. 那些年我们在python掉进的坑系列之一pandas的to_sql

热门文章

  1. 百人研发团队的难题:研发管理、绩效考核、组织文化和OKR
  2. c语言文字闪烁表白,C语言表白程序1颜色变化的心
  3. java tbase_TBase备份恢复实验
  4. 关于6月20日PMP认证考试准考信下载及考场规定的通知
  5. 图解 FAT 文件系统之基础知识(一)
  6. 联想电脑EasyCamera无法打开摄像头
  7. 计算机网络——网线制作和局域网组建
  8. rs232接口_各类PLC都支持RS232和485通讯,原理和方法普及一下
  9. PHP连接mysql原生代码
  10. Cisco PT 案例五:VLAN(Trunk模式实践)