
解决Android安装错误INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

### 知识点详解
#### 安装错误原因与解决方案
当我们在Eclipse环境下编译生成APK,并尝试安装到Android设备上时,可能会遇到`INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`错误。这种错误的出现主要归因于APK的AndroidManifest.xml文件中声明了`android:sharedUserId="android.uid.system"`,这意味着该应用请求了系统级别的用户ID进行共享。但是,如果没有对该APK进行相应的签名,系统将无法识别并授权该应用具有系统权限,从而导致安装失败。
为了成功安装并解决上述问题,我们需要执行以下步骤:
1. **查找签名证书**:首先,需要找到用于编译目标系统时的签名证书。通常,这些证书包括`platform.pk8`和`platform.x509.pem`,它们通常位于Android源码目录的`build/target/product/security`文件夹中。如果这些文件缺失,可以从相关链接下载。
2. **准备签名工具和文件**:将签名工具`signapk.jar`、签名证书`platform.pk8`和`platform.x509.pem`以及编译出来的APK文件(比如`Demo.apk`)都放置到同一个目录中。
3. **执行签名命令**:通过命令行执行签名操作,命令格式为:
```
java -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk
```
在执行此命令前,确保Java环境已经安装配置正确。签名之后,生成的`signedDemo.apk`文件将带有正确的系统权限,可以被设备识别和安装。
4. **安装签名后的APK**:最后,使用ADB工具或者直接将`signedDemo.apk`拖拽安装到Android设备上。
#### Android系统权限与签名
在Android系统中,应用的权限体系是非常重要的。系统权限分为普通权限、危险权限以及签名权限。其中,签名权限是指那些仅对具有特定签名的应用开放的权限。例如,`android.uid.system`是一种特殊的签名用户ID,它仅对系统应用或拥有相同签名密钥的应用开放。
要使用系统权限,应用必须声明它在AndroidManifest.xml中,并且在安装时进行正确的签名。只有这样,才能让Android系统信任该应用并授权它使用这些高权限功能。
#### Android源码编译与安装
在Android源码树中编译时也会遇到同样的问题。如果在编码时定义了`LOCAL_CERTIFICATE`,则在编译生成APK时会使用相应的签名证书(可能是`platform.pk8`、`shared.pk8`、`media.pk8`等)。如果在编译过程中未定义`LOCAL_CERTIFICATE`,则APK不会被赋予特定的系统签名。在这种情况下,解决方法与Eclipse环境类似,可以手工签名也可以将相应的签名证书覆盖到`build/target/product/security`目录,从而避免手工签名的步骤。
#### 工具文件说明
- **platform.pk8**: PKCS#8格式的签名密钥文件,用于存放私钥,是数字证书的一部分。
- **platform.x509.pem**: X.509格式的证书文件,用于存放公钥,同样作为数字证书的一部分。
- **signapk.jar**: Java编写的签名工具包,用于对APK文件进行签名操作。
- **Demo.apk**: 假设这是待签名的APK文件。
- **signedDemo.apk**: 签名后可以安装的APK文件。
#### 安全提示
在处理数字证书和私钥文件时,需要特别注意安全问题。私钥`platform.pk8`必须保持机密,不可泄露给无关人员或上传到公共服务器上。一旦私钥泄露,拥有私钥的人就可以代表证书所有者签名应用,这将给系统安全带来极大的风险。
此外,执行签名命令时,需要确保所有文件路径正确无误,并且环境变量配置正确,以免执行失败或产生不可预知的安全问题。
相关推荐










geek小星星
- 粉丝: 11
最新资源
- Gmer:波兰出品多功能安全监控分析软件
- 下载高峰:独家metrics资源免费获取
- Struts与Ajax的综合应用实例解析
- 全面覆盖!Office套件83套试题解析指南
- 福州大学2007级离散数学课件精华汇总
- 科技英语语法核心句型解读与阅读指南
- 掌握C#编码与控件命名的规范指南
- 多线程网络聊天室程序设计与同步机制
- 毕业设计首选:火车车次查询系统源代码
- 易语言实现计算机静音功能的源代码示例
- Extjs实现的SOA项目示例教程
- Struts开源框架Jar包资源快速指南
- 高校图书馆数据库管理系统设计与应用
- 掌握23种设计模式,提高JAVA编程能力
- 《老猫的理想》作者出品XML教程完整指南
- 掌握WPF开发3D游戏的必备资料
- 南开100道三级网络技术上机试题解析
- JSP+Struts教务管理系统源码分享
- arcGIS在电力系统地理信息解决方案中的应用
- AJAX与Struts结合实现用户名与验证码的验证技术
- C#实现记事本功能:课堂作业分享与探讨
- C#实现仿QQ2008聊天程序源代码解析
- 深入解析xmlsec.jar、activation.jar与mail.jar的作用
- RoseDelphiLink v3.2工具深度解析与安装指南