Android小知识:apktool二次打包

Posted mictoy_朱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:签名文件别名

执行完后会在当前目录下生成签名文件:

查看签名文件信息:

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

以上是关于Android小知识:apktool二次打包的主要内容,如果未能解决你的问题,请参考以下文章

Android 利用apktool工具实现apk二次打包功能的java小程序

Android 利用apktool工具实现apk二次打包功能的java小程序

Android反编译和二次打包

Android 逆向ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )

Android 逆向ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )

App反编译二次打包常见问题处理