最近在测试一个APK文件时,遇到了一个挺常见的错误——安装失败,错误码是-15,也就是INSTALL_FAILED_TEST_ONLY。如果你也遇到过类似问题,那么希望我的这次排查经历能帮到你。

问题浮现:安装失败,错误码-15

事情是这样的,我手里有一个调试版本的APK(文件名类似mzh-v1.5.0.10230-amazon-debug.apk),当我尝试使用adb install命令安装它时,命令行返回了失败信息:

adb install -r C:\Users\GA\Downloads\KOKO-v1.5.0.10230-amazon-debug.apk
Performing Streamed Install
adb.exe: failed to install C:\Users\GA\Downloads\KOKO-v1.5.0.10230-amazon-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

这个INSTALL_FAILED_TEST_ONLY错误,简单来说,就是系统认为这个APK是仅用于测试的版本,因此限制了其通过常规方式安装。

探究原因:为什么会被标记为“Test Only”

遇到问题先别急,搞清楚原因才能对症下药。这个“Test Only”的标记通常来源于以下几个方面:

  1. 构建方式的影响:在Android Studio中,如果你直接使用Run 'app'(特别是没有关闭Instant Run功能时)生成的APK,或者使用的Gradle插件、依赖库是alpha等不稳定版本,生成的APK就可能自动带上测试标记。
  2. 清单文件(AndroidManifest.xml)中的明确设置:在AndroidManifest.xml文件中的<application>标签下,如果设置了android:testOnly="true",那么该APK就会被标记为仅用于测试。
  3. APK本身的性质:从我遇到的这个APK文件名包含“debug”也能看出,这本身就是一个调试包,通常就会包含测试标记。

解决方案:使用adb的正确参数安装测试包

既然知道了APK被标记为测试包,那么安装时就需要“告诉”adb工具这一点。关键在于使用-t参数,它表示允许安装测试包。

所以,正确的安装命令应该是:

adb -s 192.168.1.179:5555 install -r -t C:\Users\GA\Downloads\1220.apk

这里的-r参数是覆盖安装(如果已存在旧版本),-t就是允许安装测试包。对于这个特定的APK,加上-t选项后,安装就顺利完成了。

扩展:MuMu模拟器多开时的adb连接小插曲

在排查过程中,我是在MuMu模拟器上进行测试的,并且遇到了一个小插曲:我的电脑上运行着两个MuMu模拟器实例,adb devices命令却只显示其中一个。

这是因为MuMu模拟器多开时,每个实例都有自己独立的ADB调试端口。要连接那个“消失”的模拟器,需要先找到它的端口号。

查看端口号的方法

查看所有的模拟器

adb devices

在这里插入图片描述

  • MuMu多开器12的界面,将鼠标悬停在正在运行的模拟器缩略图上,会显示其ADB调试端口
  • 也可以在模拟器内部,点击右上角菜单 -> 问题诊断,里面也会显示ADB调试端口信息。

例如,多开器里显示第二个实例的端口是5555,那么连接命令就是:

adb connect 192.168.1.179:5555

连接成功后,再用adb devices就能看到所有模拟器了。之后安装APK时,如果需要指定某个模拟器,可以使用-s参数:

adb -s 192.168.1.179:5555 install -r -t C:\Users\GA\Downloads\1220.apk

另外,如果模拟器开启了网络桥接模式,连接方式会稍有不同,需要通过adb devices查看设备端口(格式一般为桥接网络IP:5555)再进行连接。

其他可能的解决方案

如果你的APK是自己编译的,除了安装时加-t参数,还可以考虑从根源上移除测试标记:

  1. 修改Gradle配置:在你的项目的gradle.properties文件中添加一行android.injected.testOnly=false,然后重新构建APK。
  2. 检查并关闭Instant Run:在Android Studio的设置中,确保关闭了Instant Run功能。
  3. 使用Build APK方式生成:尝试使用Android Studio的Build > Build APK(s)来生成APK,而不是直接Run 'app',有时这样生成的APK不会带有测试标记。

总结一下

这次解决INSTALL_FAILED_TEST_ONLY(错误码-15)的经历,核心要点其实很简单:

  • 认清APK性质:遇到调试版(debug)、测试版APK,就要想到可能需要特殊处理。
  • 用对adb参数:安装测试包时,记得加上-t参数:adb install -t your_app.apk
  • 注意多设备环境:在MuMu等多开环境下,确保adb连接到了正确的模拟器实例。

很多时候,解决问题不在于技巧多高深,而在于对工具和报错信息的准确理解。希望这篇记录能帮你少走弯路。如果你在安装APK时也碰到了棘手的错误,欢迎分享,我们一起探讨。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐