Android小知识:apktool二次打包

工具: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:签名文件别名
Android小知识:apktool二次打包_第1张图片
执行完后会在当前目录下生成签名文件:
在这里插入图片描述
查看签名文件信息:

keytool -list -keystore mykey.keystore

Android小知识:apktool二次打包_第2张图片
给apk签名,使用命令:

jarsigner -verbose -keystore mykey.keystore -signedjar app-debug-signed.apk app-debug.apk mykeystore

Android小知识:apktool二次打包_第3张图片

之后就可以在当前目录下看到生成进行签名过的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文件
Android小知识:apktool二次打包_第4张图片
发现确实添加了该属性:
Android小知识:apktool二次打包_第5张图片
解决方法:

  • 方法一

在项目中的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

你可能感兴趣的:(android技术)