对于有些手机,比如 Lenevo A808t,在用 adb install -r 安装 apk 包时,会报如下错误,
Failure [INSTALL_FAILED_VERIFICATION_FAILURE]
参考 StackOverflow 后问题没有得到解决
由于在 android studio 下可以编译安装成功,发现 android studio 编译安装 apk 包的命令如下:
$ adb push /home/user/Documents/project/xxx/app/build/outputs/apk/app-server_local-debug.apk /data/local/tmp/com.xxx.yyy
$ adb shell pm install -r "/data/local/tmp/com.xxx.yyy
pkg: /data/local/tmp/com.xxx.yyy
Success
首先将 apk 包 push 到 /data/local/tmp
目录下,然后使用 pm 安装命令 adb shell pm install -r
安装,便可以安装成功了。
最后给出简化版解决方案:
# 首先将 apk push 到 /data/local/tmp/xx 目录下
>$ adb push xxx.apk /data/local/tmp/xxx
# 然后直接在 /data/local/tmp/xx 下安装
>$ adb shell pm install -r /data/local/tmp/xxx
为了简化上述安装操作,我使用 python 写了一个安装脚本,只需要输入 apk 包所在位置即可,调用命令如下:
>$ ./apkinstaller.py /path/to/apkfile.apk
#!/usr/bin/python
import sys
import os
import re
# sys.argv 用于存储传递给 python 脚本的参数
# 脚本名: sys.argv[0]
# 参数1: sys.argv[1]
# 参数2: sys.argv[2]
argslen = len(sys.argv)
# 判断是否指定了要安装的 apk 包路径
if argslen == 1:
print "Usage: apkinstaller.py [APK_FILE]"
print "Install apk to your mobile"
sys.exit(0)
# 获取到 apk 包路径
apk_path = sys.argv[1]
# 判断 apk 文件是否存在
if not os.path.exists(apk_path):
print apk_path + " : no such apk file"
sys.exit(0)
# 截取到 apk 文件名
apk_file = re.findall(".*/(.+\.apk)", apk_path)[0]
print
print 'installing ' + apk_file
print
# python 调用 shell 脚本进行安装
os.system('adb push ' + apk_path + ' /data/local/tmp/' + apk_file)
os.system('adb shell pm install -r /data/local/tmp/' + apk_file)