【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
来源:互联网 发布:mac照片如何导出 编辑:程序博客网 时间:2024/06/05 16:50
android:sharedUserId
当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个应用包有自己独立的userid。
userid的特点:
- 作为APK身份的标识
- userid对应一个Linux用户,所以不同APK(用户)间互相访问数据默认是禁止的.
那么不同APK之间想要互相访问数据应该怎么办呢?
Android为我们提供了两种数据互访的方法:
一是使用Share Preference / Content Provider
APK通过指定接口和数据供其它APK读取,开发者需要实现接口和指定share的数据。
二是在配置文件manifest中配置相同的UserId
通过共享userid,拥有相同userid的用户可以配置成运行在同一进程当中,因此默认就是可以互相访问任意数据的也可以配置为不同进程当中,彼此之间就像访问自己的数据一样访问彼此的数据库和文件。
例子:
应用程序1:com.wirelessqa.sqlite
<manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.wirelessqa.sqlite" android:versionCode="1" android:versionName="1.0" android:sharedUserId="wirelessqa.com" >
应用程序2:com.wirelessqa.activity
<manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.wirelessqa.activity" android:versionCode="1" android:versionName="1.0" android:sharedUserId="wirelessqa.com" >
这两个应用程序的userid相同,都为wirelessqa.com,因此两个应用程序共享userid,如果1想访问2的数据怎么办呢?
Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);
这样通过content可以获取到应用2中的资源,包括:数据库,preference,资源文件等等
注意:
基于安全考虑,两个package需要有相同的签名,否则没有验证,应用程序一旦设置了shareuserid,当程序被破解,其它应用也可以访问我们的数据,数据不安全设置共享也就没有多大意义了。
总结:
如果想要不同的APK之间共享数据需要满足以下条件:
- APK的签名必须相同
- android:shareUserId的值必须相同
- 如果想要运行在同一个进行当中,必须设置android:process的值相同。
application设置应用程序的全部组件都运行在某个线程中
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:process="wqa.com">
android:sharedUserLabel
这个属性给共享的userid定义了一个用户可读的标签。这个标签必须用字符串资源来设置,不能使用原生的字符串。
这个属性在API Level 3中被引入,只有在sharedUserId属性被设置,这个属性才有意义。
转载自:http://blog.csdn.net/wirelessqa/article/details/8581652
- 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
- AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
- 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
- Manifest属性之sharedUserId、sharedUserLabel
- 【AndroidManifest.xml详解】Manifest属性之versionCode,versionName
- 【AndroidManifest.xml详解】Manifest属性之versionCode,versionName
- 【AndroidManifest.xml详解】Manifest属性之versionCode,versionName
- 【AndroidManifest.xml详解】Manifest属性之versionCode,versionName
- AndroidManifest.xml之元素manifest
- AndroidManifest.xml之<uses-sdk> manifest element详解
- AndroidManifest.xml之<manifest android:versionCode android:versionName> element详解
- AndroidManifest.xml之<supports-screens> manifest element详解
- AndroidManifest.xml之<activity-alias> manifest element详解
- AndroidManifest.xml文件详解(manifest)
- AndroidManifest.xml文件详解(manifest)
- AndroidManifest.xml清单文件详解--manifest节点
- AndroidManifest.xml各种属性详解
- AndroidManifest.xml配置文件属性详解
- 一种SPA(单页面应用)架构
- Androd自定义控件(四)自定义类继承viewgroup
- tomcat 6使用@WebFilter("/*")和@WebServlet("/add")出错的处理方式
- AS项目库用到eclipse中
- Android中Binder的学习
- 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
- 蓝桥杯b组c++.6
- 导航栏的细节问题
- 如何用10只实验鼠检测出1000个药瓶中哪个有毒药?
- ssh整合时struts出现unknown location的问题
- Linux下的实时流媒体编程(RTP,RTCP,RTSP)
- extjs中如何监听textfield的改变
- Set中 addAll() 的简单使用
- Android触摸事件分发机制总结