在windows平台通过eclipse编译android源码中,如果编译Settings或者android manifest XML中 shared user id 包含android.uid.shared等系统权限的时候,则会报以下错误。

Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE
Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

INSTALL_FAILED_UPDATE_INCOMPATIBLE
1、由于卸载没有完全,可以使用设置中卸载相应应用,或者adb uninstall com.android.***

INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
主要是由于使用了android.uid.shared导致的问题。
解决方案如下
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:

1. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
2. 使用mm命令来编译,生成的apk就可以在模拟器中运行了。


第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:

1. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
2. 查看Android.mk文件,加入LOCAL_CERTIFICATE := 这一行,根据这行的内容,选择相应的签名。
platform----->platform.pk8和platform.x509.pem
shared ----->shared.pk8和shared.x509.pem
3. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
首先找到密钥文件,在我的Android源码目录中的位置
是"build\target\product\security",下面的platform.pk8和platform.x509.pem
两个文件。
然后用Android提供的Signapk工具来签名,signapk的源代码是
在"build\tools\signapk"下,
用法为"java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk",
文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。

4.其他的APPS应用也是按照该方法可以正常运行,


不过这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到platform.pk8和 platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。

最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。

更多相关文章

  1. MTK Android(安卓)6.0 上新增KeyCode
  2. 在Android中自动实现横竖屏切换的问题
  3. Linux 下使用 NDK 编译 protobuf 2.6.1
  4. android工具链与GNU工具链的比较
  5. Android文件访问权限问题
  6. ant 一键打包
  7. android Immutable bitmap passed to Canvas constructor异常
  8. Android(安卓)studio 下的svn配置使用
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)Studio添加aar依赖的两种方
  2. android project 文件夹
  3. 使用air进行移动app开发常见功能和问题(二
  4. 使用Android系统自带的icon图标
  5. android:shape的使用
  6. android调用系统发短信界面功能
  7. Android(安卓)requires compiler complia
  8. Android(安卓)studio生成APK打包,修改生成
  9. Android(安卓)支持的文件类型
  10. android 实现button的背景改变