最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份。

安装在设备中的每一个apk文件,Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户都会被分配到一个属于自己的统一的Linux用户ID,并且为它创建一个沙箱,以防止影响其他应用程序(或者其他应用程序影响它)。用户ID 在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性。

通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样.

对于一个APK来说,如果要使用某个共享UID的话,必须做三步:

1、在Manifest节点中增加android:sharedUserId属性。

2、在Android.mk中增加LOCAL_CERTIFICATE的定义。

如果增加了上面的属性但没有定义与之对应的LOCAL_CERTIFICATE的话,APK是安装不上去的。提示错误是:Package com.test.MyTest has no signatures that match those in shared user android.uid.system; ignoring!也就是说,仅有相同签名和相同sharedUserID标签的两个应用程序签名都会被分配相同的用户ID。例如所有和media/download相关的APK都使用android.media作为sharedUserId的话,那么它们必须有相同的签名media。

3、把APK的源码放到packages/apps/目录下,用mm进行编译。

举例说明一下。

系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加android:sharedUserId="android.uid.system",然后在Android.mk中增加LOCAL_CERTIFICATE := platform。可以参见Settings等

系统中所有使用android.uid.shared作为共享UID的APK,都会在manifest节点中增加android:sharedUserId="android.uid.shared",然后在Android.mk中增加LOCAL_CERTIFICATE := shared。可以参见Launcher等

系统中所有使用android.media作为共享UID的APK,都会在manifest节点中增加android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media。可以参见Gallery等。

另外,应用创建的任何文件都会被赋予应用的用户标识,并且正常情况下不能被其他包访问。当通过getSharedPreferences(String,int)、openFileOutput(String、int)或者openOrCreate Database(String、int、SQLiteDatabase.CursorFactory)创建一个新文件时,开发者可以同时或分别使用MODE_WORLD_READABLE和MODE_WORLD_RITEABLE标志允许其他包读/写此文件。当设置了这些标志后,这个文件仍然属于自己的应用程序,但是它的全局读/写和读/写权限已经设置,所以其他任何应用程序可以看到它。

关于签名:

build/target/product/security目录中有四组默认签名供Android.mk在编译APK使用:

1、testkey:普通APK,默认情况下使用。

2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。

3、shared:该APK需要和home/contacts进程共享数据。

4、media:该APK是media/download系统中的一环。

应用程序的Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.

对于使用eclipse编译的apk,可以使用signapk.jar来手动进行签名,其源码在build/tools/signapk下,编译后在out/host/linux-x86/framework/signapk.jar,也可以从网上下载。使用方法,以platform为例:java -jar ./signapk platform.x509.pem platform.pk8 input.apk output.apk  (platform.x509.pem platform.pk8在build/target/product/security获取)

no signatures that match those in shared user android.uid.system; ignoring!相关推荐

  1. has no signatures that match those in shared user android.uid.system

    出现这个错误要仔细看 里面有一段是has no signatures that match those in shared user android.uid.system 是因为我在manifest. ...

  2. Anonymous Shared Memory android 匿名共享内存

    原址 两个特点: 能够辅助内存管理系统来有效的管理不再使用的内存块 通过Binder进程间通信机制来实现进程间的内存共享. Android系统的匿名共享内存子系统的主体是以驱动程序的形式实现在内核空间 ...

  3. java实现手机开关机_Android 系统重启与关机:Java 代码实现

    粘贴一篇关于权限的文章:最近在做个东西,巧合碰到了sharedUserId 的问题,所以收集了一些资料,存存档备份. 安装在设备中的每一个apk文件,Android 给每个 APK 进程分配一个单独的 ...

  4. Android 系统(74)--Android重启原因分析

    Android重启原因分析 重启原因分类 1.上层造成重启 system_server被杀 watchdog重启 重要线程阻塞 2.kernel造成重启 空指针 非法地址 3.kernel watch ...

  5. android app 重启消失了,android平板重启apk消失不见

    重启平板,FactoryTest软件消失不见,查看log: 03-14 19:15:30.020: I/PackageManager(360): /system/app/FactoryTest.apk ...

  6. 解决Android应用签名和系统不一致的问题

    今天碰到一个签名的问题,我负责的应用安装时,会报错: 安装命令: adb install -r ApeFolio.apk 报错信息: Failed to install ApeFolio.apk: F ...

  7. Ubuntu下 生成系统签名以及给APK直接签名

    最近在做系统升级,需要很多的系统级别的权限,需要在应用的AndroidManifest.xml中package下面声明如下 android:sharedUserId="android.uid ...

  8. Android App签名和权限

    签名简介 在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protecti ...

  9. 怎样在android平台中签名需要系统权限的apk

    有的app在AndroidManifest.xml需要权限,需要系统权限 android:sharedUserId="android.uid.system" 直接安装会不成功,需要 ...

最新文章

  1. linux tcp窗口大小设置,高性能Linux:TCP/IP内核参数调优之TCP窗口扩大因子(TCP Window Scaling)选项(理论篇)...
  2. mysql修改字符集utf8为utf8mb4
  3. 【组合数学】组合恒等式 ( 变下项求和 3 组合恒等式 | 变下项求和 4 组合恒等式 | 二项式定理 + 求导 证明组合恒等式 | 使用已知组合恒等式证明组合恒等式 )
  4. Intel RealsenseD435 color图与depth图的两种对齐(align)方式
  5. HDU - 6582 Path(最短路+最大流)
  6. 六课时 一课时45分钟表格_今年的“课时”目标是1亿学生
  7. ASP.NET 使用Ajax
  8. java汉字偏旁拆分,常见部首的拆分
  9. 自动驾驶1-1 欢迎来到自动驾驶汽车专业 Welcome to the Self-Driving Cars Specialization
  10. Steve Yegge -Execution in the Kingdom of Nouns
  11. SSH三大框架的工作原理及流程
  12. 密码学:身份认证详解
  13. Mac环境下安装JDK
  14. python——基于Pandas读取asc文件并保存为csv格式
  15. CMMB手机电视入网咋就这么难?
  16. centos查询 硬盘序列号查询_linux centos7非常有用的硬件信息查询命令
  17. 《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第7章 数据挖掘
  18. 2019 WordPress免费收费中文主题推荐 强迫症患者的救赎
  19. 通过字节码分析this关键字以及异常表的重要作用
  20. 【Tensorflow教程笔记】TensorFlow Serving

热门文章

  1. 循环GridView
  2. sqlserver compact sdf, sqlite 数据库 在net中相对路径设置方法 - 摘自网络
  3. 区分Activity的四种加载模式(转)
  4. Nhibernate 基础关系映射
  5. P2184 贪婪大陆
  6. LightOJ - 1027 数学期望
  7. html中加入超链接方式的汇总
  8. 【Xamarin 挖墙脚系列:Xamarin SDK开源了................】
  9. mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1'
  10. android 布局之scrollview