【Error】adb install 报错 INSTALL_FAILED_TEST_ONLY: installPackageLI

本文介绍了解决Android APK安装失败的问题,特别是在使用adb install命令时遇到的“INSTALL_FAILED_TEST_ONLY”错误。提供了四种不同的解决方案,包括修改AndroidManifest.xml文件、使用特定的adb命令等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

apk是android studio默认生成的apk,adb install时报错:

    Failed to install app-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

解决方法:

    adb install -t app-debug.apk  #允许安装test用的apk


原文

请转载的朋友表明出处:

http://blog.youkuaiyun.com/shift_wwx/article/details/78468397


平台版本是android 7.0,在adb install *.apk 会提示下面的错误:

 Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]


方法1:

修改AndroidManifest.xml 中android:testOnly="true" 改成 android:testOnly="false",或者直接去掉。


方法2:

adb push *.apk /tmp

adb shell pm install -t /tmp/*.apk


方法3:

adb install -t *.apk


方法4:

Android Studio 3.0 and FLAG_TEST_ONLY  一文中,给出了关于Android studio 3.0中出现问题的说明:

[html]  view plain  copy
  1. Option to indicate this application is only for testing purposes.  
  2. For example, it may expose functionality or data outside of itself that would cause a security hole, but is useful for testing.  
  3. This kind of application can not be installed without the INSTALL_ALLOW_TEST flag, which means only through adb install.  
[html]  view plain  copy
  1. 1. You cannot install an app with android:testOnly="true" by conventional means, such as from an Android file manager or from a download off of a Web site  
  2. 2. Android Studio 3.0 sets android:testOnly="true" on APKs that are run from the IDE  

解决办法:
在gradle.properties(项目根目录或者gradle全局配置目录 ~/.gradle/)文件中添加:
[html]  view plain  copy
  1. android.injected.testOnly=false  


参考文献:

https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html

https://stackoverflow.com/questions/25274296/adb-install-fails-with-install-failed-test-only


参考:https://blog.youkuaiyun.com/shift_wwx/article/details/78468397



<think>我们正在处理一个特定的错误:`INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`。根据引用内容,这个错误通常与清单文件中的`android:sharedUserId="android.uid.system"`属性有关,该属性用于将应用提升为系统应用,但需要系统签名。用户的问题是在运行`testAudioPathStep()`方法时遇到此错误。根据引用,我们可以总结以下解决方案: ###解决方案:####1. **移除`sharedUserId`属性(非系统应用方案)**如果应用不需要系统级权限,可以直接移除清单文件中的`android:sharedUserId`属性。```xml<!--在AndroidManifest.xml中删除以下行 --><manifest ...android:sharedUserId="android.uid.system"><!--删除这一属性-->```然后重新构建并安装应用。####2.**使用系统签名(需要系统签名文件)**如果应用必须作为系统应用运行,则必须使用目标设备的系统签名文件对APK进行签名。步骤如下:**步骤1:生成未签名的APK**在AndroidStudio中,构建一个未签名的APK(或使用已有的APK,但确保未签名或使用测试签名)。**步骤2:获取系统签名文件**需要两个文件:`platform.pk8`和`platform.x509.pem`。这些文件通常位于Android系统源码的`build/target/product/security`目录中。注意:不同设备的系统签名可能不同。**步骤3:使用`signapk.jar`进行签名**将未签名的APK、签名文件和签名工具`signapk.jar`放在同一目录下,执行以下命令:```bashjava-jarsignapk.jarplatform.x509.pem platform.pk8your-unsigned.apk your-signed.apk```**步骤4:安装签名后的APK**```bashadbinstall your-signed.apk```注意:如果没有系统签名文件,此方法无法进行。####3.**卸载现有应用并重启设备**如果设备上已经存在同包名的系统应用,需要先卸载并重启设备(需要root权限):```bashadb root#获取root权限(需要设备已root)adb uninstall <package-name>#卸载应用adb reboot#重启设备```然后再安装新的系统签名后的APK。 ####4. **针对测试环境的特殊处理**如果是在测试环境(如模拟器或非root设备),并且不需要真正的系统权限,建议移除`sharedUserId`属性,因为获取系统签名通常不现实。###操作流程总结: ```mermaidgraphTDA[遇到INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] -->B{是否需要系统权限?}B-->|是|C[获取系统签名文件]C--> D[使用系统签名重新签名APK]D--> E[卸载设备上旧版本]E--> F[重启设备]F--> G[安装新签名的APK]B-->|否|H[移除AndroidManifest中的sharedUserId属性]H -->I[重新构建并安装应用] ```###注意事项:-系统签名文件通常由设备制造商提供,普通开发者很难获取。因此,在非系统开发环境下,建议移除`sharedUserId`属性。 -在已root的设备上,可以通过上述卸载和重启步骤清除残留,但同样需要系统签名。###相关问题:§§相关问题§§1.如何为Android应用添加系统权限?2.在没有源码的情况下如何修改APK的清单文件?3.如何获取Android设备的系统签名文件?4.系统应用和普通应用在权限上有哪些主要区别?5.如何判断一个APK是否使用了系统签名?</think>### 解决 `INSTALL_FAILED_SHARED_USER_INCOMPATIBLE` 错误的方法 这个错误发生在应用尝试使用系统级权限 (`android:sharedUserId="android.uid.system"`) 但签名不匹配时。以下是逐步解决方案: #### 方法 1:移除系统级权限(推荐用于测试环境) 1. **修改 `AndroidManifest.xml`** 删除 `sharedUserId` 属性: ```xml <!-- 删除此行 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tran.audio_path" <!-- 删除 android:sharedUserId="android.uid.system" --> > ``` 2. **重新构建并安装** ```bash ./gradlew clean assembleDebug adb install app-debug.apk ``` > ✅ 适用于普通应用场景,无需系统权限时[^4] #### 方法 2:使用系统签名(需设备厂商支持) 1. **获取系统签名文件** 需要设备厂商提供的: - `platform.pk8`(私钥) - `platform.x509.pem`(证书) > ⚠️ 不同设备的签名不同,无法通用[^2] 2. **签名 APK** ```bash java -jar signapk.jar platform.x509.pem platform.pk8 \ app-unsigned.apk app-signed.apk ``` 3. **安装系统签名版** ```bash adb install app-signed.apk ``` #### 方法 3:卸载残留系统应用(需 root 权限) ```bash adb root # 获取 root 权限 adb uninstall com.tran.audio_path # 卸载主包 adb uninstall com.tran.audio_path.test # 卸载测试包 adb reboot # 重启设备 ``` > ✅ 解决旧版本残留导致的签名冲突[^4] #### 方法 4:完整清除系统残留 ```bash adb shell su pm list packages | grep 'com.tran.audio_path' # 确认包名 pm uninstall -k --user 0 com.tran.audio_path pm uninstall -k --user 0 com.tran.audio_path.test rm -rf /data/system/package_cache/* # 清除缓存 reboot ``` ### 错误原因分析 ```mermaid graph LR A[使用 android:sharedUserId] --> B{是否系统签名?} B -->|是| C[正常安装] B -->|否| D[INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] D --> E{解决方案} E --> F[移除 sharedUserId] E --> G[获取系统签名] E --> H[卸载残留] ``` ### 关键点总结 | 方案 | 适用场景 | 复杂度 | 效果 | |------|----------|--------|------| | 移除 `sharedUserId` | 测试/非系统功能 | ★☆☆ | 立即解决 | | 系统签名 | 系统应用开发 | ★★★ | 永久解决 | | 卸载残留 | 旧版本冲突 | ★★☆ | 快速恢复 | > ⚠️ **注意**:在模拟器或非root设备上使用`sharedUserId`基本不可行,因无法获取对应签名[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值