Android Studio Run项目出现Failure [INSTALL_FAILED_TEST_ONLY]
同名掘金博文:https://juejin.im/post/5c2e0c496fb9a049a711f09a
运行环境:
AS 版 本:Android Studio 3.2.1
手机型号:vivo Y85A
Android版本:8.1.0
换了一个新测试机,点击AS Run按钮,运行项目,提示安装失败,错误信息如下:
01/03 18:52:19: Launching app
$ adb push /Users/corn/AndroidStudioProjects/HappyCorn/app/build/outputs/apk/debug/app-debug.apk /data/local/tmp/com.happycorn
$ adb shell pm install -t -r "/data/local/tmp/com.happycorn"
Failure [INSTALL_FAILED_TEST_ONLY]
网上搜索,不少说法是install安装时应该加上-t,对应含义是:允许安装测试 APK
adb命令:
https://developer.android.com/studio/command-line/adb
install [options] path 将软件包(通过 path 指定)安装到系统。
选项:
-l:安装具有转发锁定功能的软件包。
-r:重新安装现有应用,保留其数据。
-t:允许安装测试 APK。
-i installer_package_name:指定安装程序软件包名称。
-s:在共享的大容量存储(如 sdcard)上安装软件包。
-f:在内部系统内存上安装软件包。
-d:允许版本代码降级。
-g:授予应用清单中列出的所有权限。
但上述安装错误日志中实际上已经加上了-t参数,且直接cd到对应.../outputs/apk/debug/目录下,执行adb install -r命令,依然出现相同错误提示,无法安装。
网上 这篇博客 中指出,Android Studio 3.0版本开始,直接点击AS Run按钮时,会强制将android:testOnly属性设置为true。
经实际Android Crack Tool反编译app-debug.apk后,发现标签中的属性下确实被自动加入了testOnly属性。
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:testOnly="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
于是自然想到如果在application中强制指定android:testOnly属性为false,试一下。
结果发现依然出现相同错误提示,经反编译后发现android:testOnly依然被强制改成了true。
继续查一下Android官方文档,对应的testOnly含义。
https://developer.android.com/reference/android/R.styleable#AndroidManifestApplication_testOnly
AndroidManifestApplication_testOnly
public static final int AndroidManifestApplication_testOnly
Option to indicate this application is only for testing purposes. For example, it may expose functionality or data outside of itself that would cause a security hole, but is useful for testing. This kind of application can not be installed without the INSTALL_ALLOW_TEST flag, which means only through adb install.
May be a boolean value, such as "true" or "false".
文档中指出,testOnly为true,是用来指定在debug状态下的,只能通过adb命令,且必须指定INSTALL_ALLOW_TEST falg,即对应的adb install -t参数。
考虑到其他手机上不存在此问题,先用其他手机分别试一下对应的adb命令安装。
先试一下不带-t参数:
adb install -r ~/AndroidStudioProjects/HappyCorn/app/build/outputs/apk/debug/app-debug.apk
提示:
adb: failed to install /Users/corn/AndroidStudioProjects/HappyCorn/app/build/outputs/apk/debug/app-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
再试一下带-t参数:
adb install -r -t ~/AndroidStudioProjects/HappyCorn/app/build/outputs/apk/debug/app-debug.apk
Success
由此可见,确实如文档中所说。
但vivo Y85A此机型使用adb install -t安装依然失败,应该是此机型针对-t(允许安装测试 APK)此种情况做了进一步的严格安全限制。
为使其能够能正常安装成功,可以通过如下两种方式:
1,不使用AS的Run按钮直接安装,改成使用build >> Build Bundle/Apk >> Build Apk方式生成安装包并安装;
2,项目根目录下,配置gradle.properties配置项:
# testOnly设置为false
android.injected.testOnly=false
重新点击AS的Run按钮直接安装,新生成的apk文件,反编译后发现标签中的属性android:testOnly属性值已经被强制改为了false。
并且,此vivo Y85A手机也已经可以安装成功。
Android Studio Run项目出现Failure [INSTALL_FAILED_TEST_ONLY]的更多相关文章
- Android studio打开项目时出现 gradle download 无反应
在使用android studio 新建 项目的时候,会发现一直无法下载 gradle程序一直卡住不动,原因是被墙了. 解决方法: 到gradle官网下载离线包,解压后将bin路径加入Path环境变量 ...
- android studio新项目时提示:Plugin is too old, please update to a more recent version
今天想写一个程序来测试一下android studo代码,但是创建好项目后,提示: Error:(1, 0) Plugin is too old, please update to a more re ...
- 【Android Studio使用教程2】Android Studio创建项目
创建项目 首先,先指出Android Studio中的两个概念. Project 和 Module .在Android Studio中, Project 的真实含义是工作空间, Module 为一个具 ...
- Android Studio创建项目
创建项目 首先,先指出Android Studio中的两个概念. Project 和 Module .在Android Studio中, Project 的真实含义是工作空间, Module 为一个具 ...
- Android Studio导入项目
原文:http://ask.android-studio.org/?/article/21 本篇教程中使用到的Android Studio版本为1.0, Eclipse ADT版本23.0.4.请尝试 ...
- Android Studio 导入项目错误
Gradle DSL method not found: 'Android()' 错误原因: android studio 引进项目时,自动查找本机是否有项目设置的SDK版本,若发现没有,我们会在pr ...
- android studio 新建项目 界面一直停在 【“building ‘ 项目名’ gradle project info”】
zhezhelin android studio 新建项目 界面一直停在 [“building ‘ 项目名’ gradle project info”] 安装了android studio 之后,按照 ...
- 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...
- Android Studio打开项目,停在gradle的解决方案
之所以停留,是因为打开项目时,Android Studio解析项目使用的gradle,并下载对应版本的gradle,但是由于下载gradle的服务器在国外,这个下载速度非常不稳定,从而导致停留在这一步 ...
随机推荐
- CSS基础知识01
一.CSS基础知识介绍 1.css是cascading style sheet层叠式样式表的简写 2.css小用法 加粗:font-weight:bold; 正常用:norma ...
- 破解linux虚拟机的密码
虚拟机破解秘密码步骤: 虚拟机(server)的登录通常需要一个本地用户,而本地用户密码假如不知道或者是已经忘记了,也是有办法进入的,在Linux系统内就有可以提供这种可以进入的方案 ...
- 13.git的简单使用
安装 https://git-scm.com/downloads 一直点下一步就可以,安装完后打开方法:‘开始菜单’-->'Git'-->''Git Bash 安装完成后设置名字和电子邮件 ...
- zabbix 3.4 ubuntu 16 用腾讯企业邮箱作为告警邮箱
最近一直在研究zabbix监控系统,今天调试了腾讯企业邮箱作为告警邮箱的设置,本次方式是用内置email组件. 第一步: 选择Administration-->Media Types--> ...
- Putty连接TPYBorad v102 开发板教程
第一步:下载Putty软件 http://www.micropython.net.cn/download/tool/3.html 第二步:通过USB数据线将TPYBorad与PC相连 第三步:打开设备 ...
- Ubuntu 16.04 安装 Docker
在Ubuntu上安装Docker, 非常简单, 我测试过 16.04, 17.04, 以及最新版 18.04,都是可以成功安装,并使用的. 第一步: 启动root账号 第二步: 配置网络,能上网 ...
- Mysql连接问题:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establish ...
- 在Mac OS X中配置Apache + PHP + MySQL 很详细
这是一篇超级详细的配置mac os下面php+mysql+apache的文章.非常详细我的大部分配置就是参考上面的内容的,比如,PHP不能连接数据库,就是改一下默认的php.ini中pdo_mysql ...
- vi/vim操作
vi/vim是unix/linux操作系统下的文本编辑器. 由于unix/linux万物届文件的特性,vi/vim可以编辑任何格式的文件. 下面是常见的知识点,仅供参考: 编辑方式:vi/vim + ...
- 全局唯一ID发号器的几个思路
标识(ID / Identifier)是无处不在的,生成标识的主体是人,那么它就是一个命名过程,如果是计算机,那么它就是一个生成过程.如何保证分布式系统下,并行生成标识的唯一与标识的命名空间有着密不可 ...