本文为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选项说明:

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中可以查到,另外此处需要输入十进制数。