其他分享
首页 > 其他分享> > 修改Android apk的二进制文件AndroidManifest.xml,并重新签名打包apk

修改Android apk的二进制文件AndroidManifest.xml,并重新签名打包apk

作者:互联网

最近使用uni-app混合式框架开发一个App,需要把Android App 隐藏图标并隐式启动。有三种方案:

1. 使用uni-app离线打包。
2. 在不改源码的情况下,只修改apk的二进制文件AndroidManifest.xml,并重新签名打包apk。
3. 对apk进行反编译,回编译再重新签名打包。

说明:本文选择方案2,使用《Android App 隐藏图标(Android 10除外)并隐式启动》里的隐藏App图标并隐式启动方法,只修改apk 的AndroidManifest.xml并重新签名打包,实现隐藏图标并隐式启动。至于对apk进行反编译,回编译再重新签名打包的,请查阅别的博客或等我出另一篇的博客详细介绍。

需要准备以下3个jar包:

1. AXMLEditor2.jar,对二进制文件AndroidManifest.xml进行修改。

2. AXMLPrinter2.jar,输出二进制文件AndroidManifest.xml里的内容。方便我们在用AXMLEditor2.jar修改AndroidManifest.xml后,查看其内容。

3. signapk.jar(签名文件:testkey.pk8,testkey.x509.pem),对apk重新签名打包。

先简单说明一下AXMLEditor2.jar的功能及语法,AXMLEditor2.jar是在AXMLEditor.jar基础上做了修改。

本版功能:

1、旧版会对@引用、#色值设置固定值:7F000000、FFFFFFFF。

2、本版保留@引用、#色值传过来的值,传什么值就设置什么值,传过来的值只能是十六进制的字符串。

语法介绍(摘自https://github.com/fourbrother/AXMLEditor):

1>插入属性
java -jar AXMLEditor.jar -attr -i [标签名] [标签唯一标识] [属性名] [属性值] [输入xml] [输出xml]

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

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

2>删除属性
java -jar AXMLEditor.jar -attr -r [标签名] [标签唯一标识] [属性名] [输入xml] [输出xml]

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

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

3>更改属性
java -jar AXMLEditor.jar -attr -m [标签名] [标签唯一标识] [属性名] [属性值] [输入xml] [输出xml]

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

application的标签中修改android:debuggable="true"属性,让程序处于可调式状态

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

案例:java -jar AXMLEditor.jar -tag -i [insert.xml] AndroidManifest.xml AndroidManifest_out.xml

因为插入标签时一个标签内容比较多,所以命令方式不方便,而是输入一个需要插入标签内容的xml文件即可。

5>删除标签
java -jar AXMLEditor.jar -tag -r [标签名] [标签唯一标识] [输入xml] [输出xml]

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

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

操作开始:

1. 创建一个文件夹,把test.apk包、AXMLEditor2.jar、AXMLPrinter2.jar、signapk.jar,testkey.pk8,testkey.x509.pem都放在这个文件夹,如下图:

 

2. 修改test.apk后缀,改成test.zip。

3. 解压test.zip 里的AndroidManifest.xml文件到当前文件夹。

4. 鼠标放在当前文件夹,按下键盘shift,鼠标点击右键,打开cmd命令窗口,如下图:

 

 

 

5. 先查看一下AndroidManifest.xml的内容,在cmd窗口输入:java -jar AXMLPrinter2.jar AndroidManifest.xml >> AndroidManifest.txt,然后回车,执行完成后,文件夹里多了个AndroidManifest.txt文件。用编辑器打开查看输出的AndroidManifest.txt文件。如下图:

 

 

6. 先删除名为io.dcloud.PandoraEntry 的activity。在cmd窗口输入:java -jar AXMLEditor2.jar -tag -r activity io.dcloud.PandoraEntry AndroidManifest.xml AndroidManifest1.xml,然后回车,执行完成后,文件夹里多了个AndroidManifest1.xml文件。在cmd窗口输入:java -jar AXMLPrinter2.jar AndroidManifest1.xml >> AndroidManifest1.txt,然后回车,执行完成后,文件夹里多了个AndroidManifest1.txt文件。用编辑器打开查看输出的AndroidManifest1.txt文件,AndroidManifest1.txt里已经没有名为io.dcloud.PandoraEntry 的activity了,说明删除成功了。

7. 在test文件夹下创建一个insert.xml文件,insert.xml内容见如下图:

 

8. 插入名为io.dcloud.PandoraEntry 的activity。在cmd窗口输入:java -jar AXMLEditor2.jar -tag -i insert.xml AndroidManifest1.xml AndroidManifest2.xml,然后回车,执行完成后,文件夹里多了个AndroidManifest2.xml文件。在cmd窗口输入:java -jar AXMLPrinter2.jar AndroidManifest2.xml >> AndroidManifest2.txt,然后回车,执行完成后,文件夹里多了个AndroidManifest2txt文件。用编辑器打开查看输出的AndroidManifest2.txt文件,AndroidManifest2.txt里多了名为io.dcloud.PandoraEntry 的activity了,其内容和insert.xml内容一样,说明插入成功了。

9. 删除test.zip包里的AndroidManifest.xml文件和META-INF文件夹,把AndroidManifest2.xml放入到test.zip包里,并将test.zip包里的AndroidManifest2.xml重命名为AndroidManifest.xml。修改test.zip后缀,改成test.apk。

10. 对test.apk重新签名。在cmd窗口输入:java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk,然后回车,执行完成后,文件夹里多了个test_signed.apk。安装test_signed.apk,App图标不显示了,并能通过其他App(或浏览器)拉起。

操作结束。
原文链接:https://blog.csdn.net/u014460354/article/details/107601422

标签:xml,java,jar,apk,test,AndroidManifest
来源: https://www.cnblogs.com/vant-xie/p/16647388.html