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的服务器在国外,这个下载速度非常不稳定,从而导致停留在这一步 ...
随机推荐
- ArcCore重构-头文件引用问题的初步解决
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 1. 头文件引用混乱,所有头文件通过从搜索路径(-I)中引用,存在名称污染问题,需加入路径信息: ...
- var与let、const的区别
var与let.const 一.var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100;console.log(a,window.a); // 100 1 ...
- 《T-SQL查询》读书笔记Part 2.执行计划
一.关于执行计划 执行计划是优化器生成的用于确定如何处理一个给定查询的“工作计划”.一个计划包含一组运算符,通常按照特定的顺序来应用这些运算符.此外,一些运算符可以在它们之前的运算符还在处理时被应用( ...
- 数据库SQL语句中 查询选修了全部课程的学生的学号和姓名
一.SQL语言查询选修了全部课程的学生的学号和姓名. 两种解决途径: 第一种: 我们可以表示为在SC表中某个学生选修的课程数等于C表中课程总数.相应的SQL语言如下: select S#,SNAME ...
- NS3系列——eclipse + NS3环境搭建
1. 安装NS3 (1)在 ubuntu12.04 中安装 ns3.20,首先要安装一下各种依赖软件: sudo apt-get install gcc g++ pythonsudo apt-get ...
- python3字典:获取json响应值来进行断言
前言:在接口自动化测试中,最后都是需要将返回结果进行断言.本文按照实际情况举例说明字典各种操作,以及如何提取响应数据来进行断言 1.dict = {'code': '200', 'message': ...
- ReactNative(三)——WebStorm的基本配置
设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: 当然我们点击转换后就可以了,但是每次都会提示,所以还是来一个 ...
- Android 属性动画(Property Animation) 完全解析 (下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38092093 上一篇Android 属性动画(Property Animatio ...
- 玩转PHP(一)---php中处理汉字字符串长度:strlen和mb_strlen
注:本文为小编原创,如若转载,请注明出处:http://blog.csdn.net/u012116457/article/details/42536039 今天正式开始学习PHP了,不过小编一不小心就 ...
- 译MassTransit 快速入门
给我看代码! 下面是MassTransit的功能设置. public class YourMessage { public string Text { get; set; } } public cla ...