ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-01 18:02:18  阅读:184  来源: 互联网

标签:xml java jar apk test AndroidManifest


最近使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有