Skip to content

Instantly share code, notes, and snippets.

@duangsuse
Created April 12, 2018 03:45
Show Gist options
  • Save duangsuse/1b7aea5da5080d7c7107cc273f939dcf to your computer and use it in GitHub Desktop.
Save duangsuse/1b7aea5da5080d7c7107cc273f939dcf to your computer and use it in GitHub Desktop.
AXMLEditor readme.md

AndroidManifest AXML 二进制文件原始修改器

此为 AXMLEditor 重构后的版本, 添加了 dump/build/plugin 指令, 修正了部分错误

用途

针对于特定 Android APK 反编译修改后无法执行回编译操作, 直接进行 AXML 二进制文件修改, 然后只需要二次签名即可. 无需完全进行反编译和回编译操作

关于 xmlpull 依赖

原版包含了这个依赖以方便添加 XML tag, 如果工具抛出 NoClassDefFound 异常, 确认 xmlpull.jar 与工具放在相同目录下

已知问题

  • AndroidManifest.xml 中添加 <application android:debuggable="true"></application> 时看起来有效但依然没有 FLAG_DEBUGGABLE

此问题可能是由于原 AXMLEditor 没有充分解析并修改 AXML 文件部分结构导致的, 但原工具依然能修改 (如果原文件中有的话) debuggable 为 true 并可以生效

我不会尝试修复这个问题(类似的问题也很多), 不过会提供一个增加 FLAG_DEBUGGABLE 的插件

  • 无法修改 minSdkVersiontargetSdkVersion

原版中存在 minSdkVersiontargetSdkVersion 的兼容, 但兼容的实现是错误的 (参考 AXmlEditorgetAttrType 方法)

此外, 原版也不提供 uses-sdk 标签的修改功能. 如果一定需要修改, 可以尝试寻找插件

  • 什么是 绝对名称 ?

简短版本: 我也不知道

在更新时原版的代码里, 对应的参数也没有使用, 我在找到的 XMLAXML 文档里也没有提到这个

所以在这个版本里我删除了这个参数

用法

插入属性

java -jar AXMLEditor.jar attr -i [标签名] [属性名] [属性值] [输入 axml] [输出 axml]

示例: java -jar AXMLEditor.jar -attr -i application debuggable true AndroidManifest.xml AndroidManifest_out.xml

application 标签中插入 android:debuggable="true" 属性, 让程序处于可调试状态

删除属性

java -jar AXMLEditor.jar attr -r [标签名] [属性名] [输入 axml] [输出 axml]

示例: java -jar AXMLEditor.jar attr -r application allowBackup AndroidManifest.xml AndroidManifest_out.xml

application 标签中删除 allowBackup 属性, 这样此 app 就可以进行沙盒数据备份

更改属性

java -jar AXMLEditor.jar attr -m [标签名] [属性名] [属性值] [输入 axml] [输出 axml]

示例: java -jar AXMLEditor.jar -attr -m application debuggable true AndroidManifest.xml AndroidManifest_out.xml

application 标签中修改 android:debuggable 属性为 true, 让程序处于可调试状态

插入标签

java -jar AXMLEditor.jar tag -i [需要插入标签内容的 xml 文件] [输入 axml] [输出 axml]

示例: java -jar AXMLEditor.jar tag -i inserting.xml AndroidManifest.xml AndroidManifest_out.xml

因为插入标签时内容比较多, 命令行方式不方便, 直接输入一个需要插入标签内容的 xml 文件即可

删除标签

java -jar AXMLEditor.jar tag -r [标签名] [输入 axml] [输出 axml]

示例: java -jar AXMLEditor.jar tag -r activity cn.wjdiankong.demo.MainActivity AndroidManifest.xml AndroidManifest_out.xml

删除 android:name="cn.wjdiankong.demo.MainActivity" 标签

序列化/反序列化 AXML

java -jar AXMLEditor.jar dump [输入 axml]

示例: java -jar AXMLEditor.jar dump AndroidManifest.xml

AndroidManifest.xml 反序列化输出到 AndroidManifest.xml.text 文本

java -jar AXMLEditor.jar dump [输入 serialized object] [输出 axml]

示例: java -jar AXMLEditor.jar dump AndroidManifest.xml.text

AndroidManifest.xml.text 序列化输出到 AndroidManifest.xml

执行插件

java -jar AXMLEditor.jar plugin add_debuggable.class AndroidManifest.xml AndroidManifest_debuggable.xml

AXMLEditor 将反射加载初始化插件类, 调用其中的 XmlStruct process(XmlStruct) 方法, 将结果序列化输出

@tim-le
Copy link

tim-le commented Aug 1, 2018

请教,能提点一下吗,有些apk是本来没有显性设置debuggable属性的,AXMLEditor.jar 添加的调试属性后,为什么仍然还是不可调试。。还有什么地方要修改吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment