Android中ShareUserId注意问题

转载 2015年07月09日 17:35:18

首先粘一段官方文档对ShareUserId的说明:

[plain] view plaincopy
  1. android:sharedUserId  
  2. The name of a Linux user ID that will be shared with other applications. By default, Android assigns each application its own unique user ID. However, if this attribute is set to the same value for two or more applications, they will all share the same ID — provided that they are also signed by the same certificate. Application with the same user ID can access each other's data and, if desired, run in the same process.  
网上对ShareUserId的说明已经很多,大部分都重复了,我在此只是补充说明一下:

如果两个应用的ShareUserId相同,则共享对方的data目录下的文件,包括SharePreference, file, lib等文件,而不是很多人所想的资源文件。

注意: 要共享资源文件(图片,layout, string等),并不需要ShareUserId相同,普通方法就能拿到,但前提是你自己的应用里已经有了名字相同的资源文件,这样R文件才能找到那个id,否则编译器报错。 方法如下:

[java] view plaincopy
  1. try {  
  2.         Context ct=this.createPackageContext ("com.example.shareb", Context.CONTEXT_IGNORE_SECURITY);  
  3.         String str = ct.getString(R.string.share);  
  4.         Log.d("Test", str);  
  5.     } catch (NameNotFoundException e) {  
  6.         // TODO Auto-generated catch block  
  7.         e.printStackTrace();  
  8.     }   

也就是说,当前项目里也必须有个string的名字叫share,这样编译器不会报错。当程序真正运行时,会自动寻找com.example.shareb 这个程序下的名字为share的string。

当然,如果ShareUserId相同,则可以通过如下方法访问对方SharePrefrence中的内容:

[java] view plaincopy
  1. try {  
  2.             Context ct=this.createPackageContext ("com.example.shareb", Context.CONTEXT_IGNORE_SECURITY);  
  3.             SharedPreferences sp = ct.getSharedPreferences("shareb", MODE_PRIVATE);  
  4.             String str2 = sp.getString("haha""");  
  5.             Log.d("Test""share preference-->" + str2);  
  6.         } catch (NameNotFoundException e) {  
  7.             // TODO Auto-generated catch block  
  8.             e.printStackTrace();  
  9.         }   
此时访问的是com.example.shareb这个应用下名字为shareb的xml文件中的key为haha的值(有点晕吧?)
于是有人可能会想: 会不会有安全问题啊? 比如我把我的ShareUserId搞得和你的一样,不就能任意访问你的文件了吗? 答案是否定的。 只有在如下条件下,才可以利用ShareUserId共享文件。
***两个应用ShareUserId相同,包名相同或不同,打包时签名文件必须相同***
否则,在如下情况下,第二个安装包在安装时会失败,错误为[INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]:
1.包名相同,签名相同,ShareUserId不同
2.包名相同或不同,ShareUserId相同,签名不同
所以建议大家在以后开发全新应用的时候,最好将ShareUserId加上,方便以后扩展。 否则,以后想加都没法加了,因为线上版本没有ShareUserId,而升级版有,那么这两个包根本就不兼容,所以肯定更新失败!

原文地址:http://blog.csdn.net/yinkai1205/article/details/8651329

Android逆向之旅---Android中的sharedUserId属性详解

一、前言今天我们来看一下Android中一个众人熟悉的一个属性:shareUserId,关于这个属性可能大家都很熟悉了,最近在开发项目,用到了这个属性,虽然知道一点知识,但是感觉还是有些迷糊,所以就写...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年05月04日 21:02
  • 15247

关于android:sharedUserId="android.uid.system"这个系统级权限

最近在做的项目,有好大一部分都用到这个权限,修改系统时间啊,调用隐藏方法啊,系统关机重启啊,静默安装升级卸载应用等等,刚开始的时候,直接添加权限,运行就报错,无论模拟器还是真机,在logcat中总会得...
  • u012398902
  • u012398902
  • 2016年10月04日 23:03
  • 14244

Android系统中使用shareuserid获取系统权限

Android会为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的。通过Shared User id,拥有同一个Use...
  • wu371894545
  • wu371894545
  • 2017年02月14日 09:00
  • 262

INSTALL_FAILED_UPDATE_INCOMPATIBLE和INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

INSTALL_FAILED_UPDATE_INCOMPATIBLE INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
  • happyhell
  • happyhell
  • 2010年09月24日 15:36
  • 36607

android:sharedUserId问题

android:sharedUserId问题 Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户 Shared ...
  • cigogo
  • cigogo
  • 2012年04月21日 10:20
  • 19832

Android ShareUserId 使用总结

今天讲一下Android里面经常看到却不太留意的知识点——ShareUserId,在Android里面每个app都有一个唯一的linux user ID,则这样权限就被设置成该应用程序的文件只对该用户...
  • idaretobe
  • idaretobe
  • 2015年01月05日 23:08
  • 566

Android项目开发中需要注意的几点

 相信一步步走过来的Android从业者,每个人都会遇到OOM的情况。如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力。今天我们就谈谈在Android平台下内存的管理之道...
  • u011473714
  • u011473714
  • 2014年11月26日 14:21
  • 901

Android权限之sharedUserId和签名

    最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份。    安装在设备中的每一个apk文件,Android给每个APK进程分配一个单独的用户空间,其man...
  • hmg25
  • hmg25
  • 2011年05月26日 11:35
  • 47858

Android——TV真机调试apk(android:sharedUserId="android.uid.system")

当需要调试的apk 的AndroidManifest.xml中有使用  android:sharedUserId="android.uid.system" ,表示此apk和系统拥有相同的uid,可以共...
  • jscese
  • jscese
  • 2013年10月08日 12:15
  • 11031

scrollview注意事项

scrollview只能有一个子控件,如果由于多个线性布局,则用一个大线性布局包起来...
  • xiyangyang8110
  • xiyangyang8110
  • 2017年01月18日 16:09
  • 423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中ShareUserId注意问题
举报原因:
原因补充:

(最多只允许输入30个字)