【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
http://blog.csdn.net/wirelessqa/article/details/8581652
android:sharedUserId
当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个应用包有自己独立的userid。
userid的特点:
1. 作为APK身份的标识 2. userid对应一个Linux用户,所以不同APK(用户)间互相访问数据默认是禁止的.
那么不同APK之间想要互相访问数据应该怎么办呢?
Android为我们提供了两种数据互访的方法:
一是使用Share Preference. / Content Provider
APK通过指定接口和数据供其它APK读取,开发者需要实现接口和指定share的数据。【此方法后面再详细讲解】
二是在配置文件manifest中配置相同的UserId
通过共享userid,拥有相同userid的用户可以配置成运行在同一进程当中,因此默认就是可以互相访问任意数据的
也可以配置为不同进程当中,彼此之间就像访问自己的数据一样访问彼此的数据库和文件。
例子:
应用程序1:com.wirelessqa.sqlite
01 |
<manifestxmlns:android="http://schemas.android.com/apk/res/android" |
02 |
package="com.wirelessqa.sqlite" |
03 |
04 |
android:versionCode="1" |
05 |
06 |
android:versionName="1.0" |
07 |
08 |
android:sharedUserId="wirelessqa.com" |
09 |
10 |
> |
应用程序2:com.wirelessqa.activity
1 |
<manifestxmlns:android="http://schemas.android.com/apk/res/android" |
2 |
package="com.wirelessqa.activity" |
3 |
android:versionCode="1" |
4 |
android:versionName="1.0" |
5 |
android:sharedUserId="wirelessqa.com" |
6 |
> |
这两个应用程序的userid相同,都为wirelessqa.com,因此两个应用程序共享userid,如果1想访问2的数据怎么办呢?
Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);
这样通过content可以获取到应用2中的资源,包括:数据库,preference,资源文件等等
注意:
基于安全考虑,两个package需要有相同的签名,否则没有验证,应用程序一旦设置了shareuserid,当程序被破解,其它应用也可以访问我们的数据,数据不安全设置共享也就没有多大意义了。
总结:
如果想要不同的APK之间共享数据需要满足以下条件:
1.APK的签名必须相同
2.android:shareUserId的值必须相同
3.如果想要运行在同一个进行当中,必须设置android:process的值相同。
application设置应用程序的全部组件都运行在某个线程中
1 |
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" |
2 |
3 |
android:theme="@style/AppTheme" android:process="wqa.com"> |
android:sharedUserLabel
这个属性给共享的userid定义了一个用户可读的标签。这个标签必须用字符串资源来设置,不能使用原生的字符串。
这个属性在API Level 3中被引入,只有在sharedUserId属性被设置,这个属性才有意义。
【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel的更多相关文章
- AndroidManifest.xml详解(上)
本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 一.关于AndroidManifest.xml ...
- AndroidManifest.xml详解
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- Android AndroidManifest.xml详解
AndroidManifest.xml简述: AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activitie ...
- Android 之 AndroidManifest.xml 详解(一)
当Android启动一个应用程序组件之前,它必须知道哪些个组件是存在的,所以开发人员在开发过程中,必须将应用程序中出现的组件一一在AndroidManifest.xml文件中" 声明 &qu ...
- Android 之 AndroidManifest.xml 详解(二)
[10]<activity> Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声 ...
- AndroidManifest.xml 详解
第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...
- [android] AndroidManifest.xml 详解
第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...
- AndroidManifest.xml详解(下)
本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 八.第三层<activity-alias> ...
- AndroidManifest.xml 详解 (四) 之uses-permission
The <uses-permission> Element 我们现在告别<application>元素,回到<manifest>中定义的子元素,<uses-p ...
随机推荐
- [svc][jk]磁盘的iops和吞吐量(Throught)指标
参考 另参考 IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一.IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处 ...
- ios日期格式转换
转自:http://blog.csdn.net/l_ch_g/article/details/8217725 1.如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面 ...
- git clean 小结
删除 一些 没有 Git add 的 文件: git clean 参数 -n 显示 将要 删除的 文件 和 目录 -f 删除 文件,-df 删除 文件 和 目录 git clean -n git c ...
- Flink PPT
杭州第六次 Spark & Flink Meetup 资料分享 https://github.com/397090770/Spark-Flink-Meetup-6-Hangzhou https ...
- [Windows Azure] How to use the Table Storage Service
How to use the Table Storage Service version 1.7 version 2.0 This guide will show you how to perform ...
- 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
每日一篇优秀博文 2017年10月7日 周六 白话 Ruby 与 DSL 以及在 iOS 开发中的运用 阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain S ...
- 添加Fragment报已有父view,需先移除的错
错误LOG: 12-13 17:05:28.754: E/AndroidRuntime(8344): FATAL EXCEPTION: main 12-13 17:05:28.754: E/Andro ...
- 设置Chrome忽略网站证书错误
本人在XP下使用Chrome.总是莫名其妙的提示整数错误,一部分https网站无法直接访问.网上找了下,把解决思路记录下来. 解决这个问题很简单,只需要修改你平时用来启动Chrome的快捷方式就可以忽 ...
- golang包管理的取巧
常见的golang的包管理工具 glide 使用yaml做配置,语义化版本管理,可以设置镜像,下载x系列库,但是x系列库被第三方库依赖时会出现下载失败. dep 亲儿子,语义化版本管理,无法解决墙 v ...
- 基于thinkphp的在线编辑器kindeditor-v4.1.3
首先,去官网下载最新版的kindeditor,然后把里面asp,jsp,net,example的全删除,然后改名为editor放进public(最外层目录的public)文件夹里面. 在目录lib目录 ...