adb install遇INSTALL_FAILED_TEST_ONLY错误,合并Manifest的testOnly属性来源?
以下是几种常见的触发场景,即使你没手动在原始Manifest中添加该属性,也会导致合并后的文件出现这个标记:
Android Studio运行部署自动添加
当你使用Android Studio的「Run」按钮直接部署应用时,Android Gradle插件会自动给打包后的APK加上android:testOnly="true"属性。这个标记用于区分测试部署的包,这类APK只能通过adb install -t命令或者IDE直接安装,无法用普通的adb install命令安装。第三方依赖库引入
项目中依赖的第三方库(比如测试框架、某些SDK组件)的Manifest文件里可能自带android:testOnly="true"属性。在Manifest合并阶段,这个属性会被合并到最终的Manifest中。你可以查看Android Studio生成的Manifest Merging Report(路径一般在build/outputs/logs/manifest-merger-xxx-report.txt),定位具体是哪个依赖引入了这个属性。Gradle构建配置触发
如果你的build.gradle文件中配置了和测试相关的构建变体或参数,比如指定了testBuildType,Gradle插件会自动为对应的构建产物添加testOnly标记。比如debug构建变体在某些测试配置下,会被自动标记为test-only。使用测试类打包命令
若你执行了测试相关的打包命令,比如gradlew assembleAndroidTest,生成的APK本身就是用于测试的,对应的Manifest会被自动加上android:testOnly="true"属性。
内容的提问来源于stack exchange,提问作者Keselme

