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的更多相关文章

  1. AndroidManifest.xml详解(上)

    本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 一.关于AndroidManifest.xml    ...

  2. AndroidManifest.xml详解

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  3. Android AndroidManifest.xml详解

    AndroidManifest.xml简述: AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activitie ...

  4. Android 之 AndroidManifest.xml 详解(一)

    当Android启动一个应用程序组件之前,它必须知道哪些个组件是存在的,所以开发人员在开发过程中,必须将应用程序中出现的组件一一在AndroidManifest.xml文件中" 声明 &qu ...

  5. Android 之 AndroidManifest.xml 详解(二)

    [10]<activity> Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声 ...

  6. AndroidManifest.xml 详解

    第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. [android] AndroidManifest.xml 详解

    第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...

  8. AndroidManifest.xml详解(下)

    本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 八.第三层<activity-alias> ...

  9. AndroidManifest.xml 详解 (四) 之uses-permission

    The <uses-permission> Element 我们现在告别<application>元素,回到<manifest>中定义的子元素,<uses-p ...

随机推荐

  1. lua笔记二 赋值语句

    赋值是改变一个变量的值和改变表域的最基本的方法. a = "hello" .. "world" t.n = t.n + 1 Lua可以对多个变量同时赋值,变量列 ...

  2. angular学习笔记(三十)-指令(9)-一个简单的指令示例

    学了前面这么多关于指令的知识,现在就用指令来写一个小组件:expander 这个组件的功能就是点击开展菜单,再点击收起菜单: ↑↓点击展开收起 下面来看它的代码: html: <!DOCTYPE ...

  3. [Windows Azure] Windows Azure Execution Models

    Windows Azure Execution Models Windows Azure provides different execution models for running applica ...

  4. ny525 一道水题

    一道水题时间限制:1000 ms  |  内存限制:65535 KB 难度:2描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他吗? ...

  5. Lua函数[转]

    在大多数Lua语法分析中可以获得这些标准Lua函数. 无可争辩, 我们可以查阅Lua网站, 但是一些少了的函数被Blizzard进行了调整. 下面列出了所有Lua函数. WoW API中的Lua注意在 ...

  6. Python写入连接mysql失败

    执行如下连接数据库的语句: engine = create_engine('mysql://root:root@127.0.0.1/stock?charset=utf8') 报错如下: ImportE ...

  7. tensorboard简单使用

    代码写的再好,没有图别人也不知道好在哪. 我们在使用tensorflow的时候,使用tensorboard可以直观的看到我们的网络结构,甚至它可以计算卷积和池化的维度(我不知道是不是因为我已经运行了一 ...

  8. 一文读懂BERT中的WordPiece

    1. 前言 2018年最火的论文要属google的BERT,不过今天我们不介绍BERT的模型,而是要介绍BERT中的一个小模块WordPiece. 2. WordPiece原理 现在基本性能好一些的N ...

  9. [转]MySQL update join语句

    原文地址:https://www.jianshu.com/p/f99665266bb1 在本教程中,您将学习如何使用MySQL UPDATE JOIN语句来执行跨表更新.我们将逐步介绍如何使用INNE ...

  10. 【WPF】帐号系统中,用户注册的校验逻辑(正则表达式)

    帐号系统中,用户注册时,在向服务器发送校验请求之前,客户端会先进行用户填写内容的校验(主要靠正则表达式). 由于校验注册的逻辑在多个项目中可以重用,这类通用的代码最好记录下来. 界面内容大致如下.现在 ...