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

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

时间:2022-09-01 18:01:49浏览次数:50  
标签: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
From: https://www.cnblogs.com/vant-xie/p/16647388.html

相关文章

  • logback.xml 配置文件
    logback.xml<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--定义日志文件的存储地址勿在LogBack的配置中使用相对路径--><!--<propertynam......
  • XmlReader & XElement 遍历大文件xml,不使用内存。测试可以读取6G的xml
    [TestMethod]publicvoidTestMethod1(){//try//{//stringresult=newBoDowJonesWatchlistAutoUpdate().......
  • XElement类来读取XML
    <Table><Product><Product_id>1</Product_id><Product_name>Product1</Product_name><Product_p......
  • 项目实用-logback.xml配置-sql和异常在不同的文件中
    <configuration><!--本文主要输出日志为控制台日志,系统日志,sql日志,异常日志--><!--%m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,,--><!--控制台-......
  • XML文件sql转义字符
    使用CDATA区段所有XML文档中的文本均会被解析器解析。只有CDATA区段(CDATAsection)中的文本会被解析器忽略。大于等于<![CDATA[>=]]>小于等于<![CDATA[<=]]>......
  • 【Push Kit】有没有接口可以获取手机安装的HMS core apk版本
    ​问题描述:希望在代码中能够获取到HMSCoreAPK的版本,方便获取到线上信息,帮助定位错误 解决办法://方法一:返回int如:660312inthmsVersionCode=HMSPackageManager.......
  • 02.XML技术
    一、XML简介XML指可扩展标记语言(eXtensibleMarkupLanguage),是用来传输和存储数据的,是一种通用的数据交换格式,可以使数据在不同应用程序间交换,具有很强的可扩展性。 ......
  • XMLHttpResquest Level2新功能
    旧版XMLHttpResquest的缺点:只支持文本数据的传输,无法用来读取和上传文件传送和接收数据时,没有进度信息,只能提示有没有完成 新版的优点:1.可以设置HTTP请求的时限2可......
  • 数据传输格式XML和JSON
    XML:可扩展标记语言格式臃肿,解析麻烦,需要用到第三库 JSON:JavaScript对象表示法都是字符串,解析简单 JSON可支持的数据类型只有六种数值、字符串、布尔值、null、对......
  • Python爬虫-Xpath语法与lxml库的用法(二)
    一、安装pip方式安装pipinstalllxml二、Xpath术语2.1节点在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML文档......