文档章节

Android之用sharedUserId来实现不同应用(APK)数据共享

天王盖地虎626
 天王盖地虎626
发布于 06/20 09:36
字数 782
阅读 9
收藏 0

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
    <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之间共享数据需要满足以下条件:

1.APK的签名必须相同
2.android:shareUserId的值必须相同
3.如果想要运行在同一个进行当中,必须设置android:process的值相同。
application设置应用程序的全部组件都运行在某个线程中
view source
    <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属性被设置,这个属性才有意义。

本文转载自:https://blog.csdn.net/u011068702/article/details/53285280

天王盖地虎626

天王盖地虎626

粉丝 28
博文 489
码字总数 20672
作品 0
南京
私信 提问
Android权限之sharedUserId和签名

最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份。 安装在设备中的每一个apk文件,Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对...

lxp198837
2012/06/12
0
0
Android如何通过shareduserid获取系统权限

android会为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的。通过Shared User id,拥有同一个User id的多个APK可以配...

zhoulc
2013/04/02
0
0
android 权限管理和签名 实现静默卸载

为了实现静默卸载, 学了下android的安全体系,记录如下 最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份。 安装在设备中的每一个apk文件,Android给每个APK...

eric_zhang
2012/09/28
0
1
Android xml manifest属性详解

manifest extras: 例子: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.woody.test" android:sharedUserId="string" android:sharedUserLabel="str......

恰同学少年
2015/07/28
0
0
sharedUserId和签名Android权限

Java代码 [2011-06-30 15:34:39 - TestListenerAIDL] Installation error: INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID [2011-06-30 15:34:39 - TestListenerAIDL] Please check logcat output......

迷途d书童
2012/03/30
264
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark中map、mapPartitions、foreach、foreachPartitions算子

map 与 mapPartitions /** * Return a new RDD by applying a function to all elements of this RDD. */ def map[U: ClassTag](f: T => U): RDD[U] = withScope { val cleanF......

dreamness
7分钟前
0
0
spring boot 启动常见错误记录

1.错误: Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suit......

qimh
29分钟前
0
0
拥有有趣灵魂的程序员们,程序员访谈(一)

点击上方关注我们,让小care关爱你! 程序员群体一直都是低调多金的代表,而近段时间以来,程序员在网络上除了高薪之外,总是会和屌丝、苦逼、格子衫、没情趣...联系在一起。黑程序员的段子也...

ITCare
今天
33
0
Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
19
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部