本文为AmBinaryEditor项目的使用说明。

由于一次奇怪的需求,开始研究AndroidManifest的二进制格式,继而产生了直接修改AndroidManifest二进制格式的想法。虽然代码写的乱七八糟,不过好歹也是劳动成果。
在此鸣谢:MindMac对其格式的详细分析:http://bbs.pediy.com/showthread.php?t=194206

完整代码我已经上传到github上了:https://github.com/ele7enxxh/AmBinaryEditor
vs2012,gcc均能成功编译,有相同需求的可以去下一份,下面介绍一下工具的功能和用法示例:
目前功能:
新增、修改、删除指定名字的tag或者该tag的attr

用法示例:
增加一个tag(-d选项指定新增tag的起始位置,如1表示添加在manifest节点之后;-c选项指定新增tag经过的节点数,以此确定新增tag的结尾位置):

editor tag --add activity -d 1 -c 0 -i input.xml -o output.xml

改一个tag的名字(-d选项指定要修改的tag是从manifest节点开始出现的第几个同名tag,-n选项指定tag的新名字):

ameditor tag --modify application -d 1 -n test -i input.xml -o output.xml

删除指定tag(-d选项指定要修改的tag是从manifest节点开始出现的第几个同名tag):

ameditor tag --remove application -d 1 -i input.xml -o output.xml

增加一个attr(-d选项指定要修改的tag是从manifest节点开始出现的第几个同名tag,-n选项指定attr的名字,-t选项指定attr的类型(后面会有更多介绍)-v选项指定attr的值,-r选项指定attr的属性ID(可选)):

ameditor attr --add application -d 1 -n name -t 3 -v test -i input.xml -o output.xml

修改一个attr(-n选项指定需要修改的attr,其他同上):

ameditor attr -modify application -d 1 -n name -t 3 -v new -i input.xml -o output.xml

删除一个attr(-n选项指定需要删除的attr,其他同上):

ameditor attr -remove application -d 1 -n name -i input.xml -o output.xml

attr -t选项说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum
{
ATTR_NULL = 0,
ATTR_REFERENCE = 1,
ATTR_ATTRIBUTE = 2,
ATTR_STRING = 3,
ATTR_FLOAT = 4,
ATTR_DIMENSION = 5,
ATTR_FRACTION = 6,
ATTR_FIRSTINT = 16,
ATTR_DEC = 16,
ATTR_HEX = 17,
ATTR_BOOLEAN = 18,
ATTR_FIRSTCOLOR = 28,
ATTR_ARGB8 = 28,
ATTR_RGB8 = 29,
ATTR_ARGB4 = 30,
ATTR_RGB4 = 31,
ATTR_LASTCOLOR = 31,
ATTR_LASTINT = 31,
};

目前暂不支持ATTR_DIMENSION和ATTR_FRACTION类型。

2015.6.25更新
attr -r选项说明:
当你所添加的attr的name在原axml中并不存在时,必须添加-r选项指定该name的resourceid,具体的resourceid在对应 Android 源码中/frameworks/base/core/res/res/values/public.xml中可以查到,另外此处需要输入十进制数。