工具:apktool 下载地址:https://ibotpeaches.github.io/Apktool/install/
原料:app-debug.apk
拆包执行命令
apktool d app-debug.apk
执行完该命令后,我们可以在当前目录下看到一个新生成的app-debug目录,里面就是拆包后的app相关源码和配置,其目录结构与我们的项目结构基本一样,接下来在进行打包:
打包执行命令
apktool b app-debug (app-debug是前面通过拆包生成的目录名,也可以改成其他的)
执行完该命令后,我们可以在app-debug目录下发现多了一个dist子目录,这个子目录里还有一个apk,这个apk就是我们执行该命令后生成的目标apk。
此时,生成的apk并不能安装,因为还没有给它签名
给apk签名
如果没有签名文件,则创建签名文件,执行下面命令
keytool -genkey -alias mykeystore -keyalg RSA -validity 2100 -keystore mykey.keystore
-genkey:生成一个密钥(签名文件)
-alias:签名文件别名
-keyalg:生成密钥对的算法(常用RSA/DSA,DSA只用于签名,默认采用DSA)
-validity:签名文件的有效期(单位:天)
-keystore:签名文件名
mykeystore:签名文件别名
执行完后会在当前目录下生成签名文件:
查看签名文件信息:
keytool -list -keystore mykey.keystore
给apk签名,使用命令:
jarsigner -verbose -keystore mykey.keystore -signedjar app-debug-signed.apk app-debug.apk mykeystore
之后就可以在当前目录下看到生成进行签名过的app-debug-signed.apk接下来可能会遇到下面问题
安装失败,提示failed to install .\app-debug-signed.apk: Failure [INSTALL_FAILED_TEST_ONLY]
原因: Android Studio 3.0会在打debug apk时,在manifest文件application标签里自动添加 android:testOnly=true;属性
通过查看刚刚解包的mainfest文件
发现确实添加了该属性:
解决方法:
方法一
在项目中的gradle.properties全局配置中设置:
android.injected.testOnly=false
方法二,安装加 -t :
adb install -t app-debug-signed.apk
另外,提下我们AS下运行代码生成的debug包apk,它的默认签名文件是debug.keystore
debug.keystore位置: C:\Users\\.android\debug.keystore
debug.keystore的密码:android
debug.keystore的别名:androiddebugkey