1. 反编译
反编译工具使用apktool
,点击安装
使用如下命令:
bash
apktool d example.apk
执行完毕后会在当前目录生成一个example文件夹,里面是反编译出的文件。
2. 修改文件
在example文件夹里找到AndroidManifest.xml
文件,并在application节点里添加如下代码:
bash
android:networkSecurityConfig="@xml/network_security_config"
再将以下代码保存成一个xml文件,放在res/xml
文件夹下:
XML
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
3. 重新打包
使用如下命令重新打包:
bash
apktool b example -o example-b.apk
打包完成,会在当前目录下生成example-b.apk
。
4. 签名
生成签名文件, 通过命令的方式生成签名,如下命令:
bash
keytool -genkey -alias example.keystore -keyalg RSA -validity 20000 -keystore example.keystore
需要输入CN、OU之类的,直接回车忽略就可以,会默认填写Unknown,最后需要输入一个密码,下面签名会用到
然后使用这个签名文件对刚生成的apk进行签名,命令如下:
bash
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore example.keystore example-b.apk example.keystore
签名输出以下结果,就完成
bash
>>> 签名者
X.509, CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
[可信证书]
jar 已签名。
签名完成后进行一下验证,命令如下:
bash
jarsigner -verify -verbose example-b.apk
验证输出以下结果:
bash
s = 已验证签名
m = 在清单中列出条目
k = 在密钥库中至少找到了一个证书
- 由 "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" 签名
摘要算法: SHA1 (弱)
签名算法: SHA1withRSA (弱), 2048 位密钥
jar 已验证。
5. 对齐
对齐需要有zipalign
命令,如果本机没有zipalign命令
bash
-bash: zipalign: command not found
直接下载一个
Android Studio开发工具,安装好工具之后,全局查找一下zipalign命令在哪个目录下:
bash
find / -name zipalign
比如我的就在
/System/Volumes/Data/Users/lihy/Library/Android/sdk/build-tools/34.0.0/zipalign
找到之后,需要配置环境变量,配置好之后,再执行以下命令:
bash
zipalign -v 4 example-b.apk example-f.apk
如果不想配置环境变量,每次执行,需要带上完整路径
bash
/System/Volumes/Data/Users/lihy/Library/Android/sdk/build-tools/34.0.0/zipalign -v 4 example-b.apk example-f.apk
好了,现在就可以将example-f.apk
安装在手机上了。