Android 多个APK共享数据(Shared User ID)

Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux 用户

(Android 系统是基于Linux)的.

所以不同APK(用户)间互相访问数据默认是禁止的.

但是它也提供了2种APK间共享数据的形式:

1. Share Preference. / Content Provider

APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Share的数据.

本文对于这个不做详细解释

2. Shared User id

通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是

可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的

数据库和文件.就像访问本程序的数据一样.

比如某个公司开发了多个Android 程序, 那么可以把数据,图片等资源集中放到APK  A中去. 然后

这个公司的所有APK都使用同一个User ID, 那么所有的资源都可以从APK A中读取.

举个例子:

APK A 和APK B 都是C公司的产品,那么如果用户从APK A中登陆成功.那么打开APK B的时候就不用

再次登陆. 具体实现就是 A和B设置成同一个User ID:

    * 在2个APK的AndroidManifest.xml 配置User ID:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.android.demo.a1"

    android:sharedUserId="com.c">

   这个"com.c" 就是user id, 然后packagename APK A就是上面的内容,  APK B可能

   是"com.android.demo.b1" 这个没有限制

这个设定好之后, APK B就可以像打开本地数据库那样 打开APK A中的数据库了.

APK A把登陆信息存放在A的数据目录下面. APK B每次启动的时候读取APK A下面的数据库

判断是否已经登陆:

APK B中的代码:

            friendContext = this.createPackageContext(

                    "com.android.demo.a1",

                    Context.CONTEXT_IGNORE_SECURITY);

通过A的package name 就可以得到A的 packagecontext

通过这个context就可以直接打开数据库.

时间: 2024-10-30 06:10:03

Android 多个APK共享数据(Shared User ID)的相关文章

Android开发中多进程共享数据简析_Android

 背景 最近在工作中遇到一个需求,需要在接收到推送的时候将推送获得的数据存起来,以供app启动时使用.我们会认为这不是So easy吗?只要把数据存到SharedPreferences中,然后让app打开同一个SharedPreferences读取数据就可以了.但是在实际的测试中,我们发现推送进程存入的数据,并不能在app进程中获得.所以这是为什么呢,也许聪明的读者从我们上面的陈述中已经发现了原因,因为我们有两个进程,推送进程负责将推送数据存入,而app进程负责读取,但是正是由于是两个进程,如果

Android开发中多进程共享数据简析

背景 最近在工作中遇到一个需求,需要在接收到推送的时候将推送获得的数据存起来,以供app启动时使用.我们会认为这不是So easy吗?只要把数据存到SharedPreferences中,然后让app打开同一个SharedPreferences读取数据就可以了.但是在实际的测试中,我们发现推送进程存入的数据,并不能在app进程中获得.所以这是为什么呢,也许聪明的读者从我们上面的陈述中已经发现了原因,因为我们有两个进程,推送进程负责将推送数据存入,而app进程负责读取,但是正是由于是两个进程,如果它

android不同activity之间共享数据解决方法_Android

最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来分享下! Android中在不同Activity中传递变量,通常使用Intent中Bundle添加变量的操作方法. 保存参数时: 复制代码 代码如下: Intent intent = new Intent(); intent.setClass(A.this, B.class); Bundle bundle = new Bundle(); bun

Android实现不同apk间共享数据的方法(2种方法)

本文实例讲述了Android实现不同apk间共享数据的方法.分享给大家供大家参考,具体如下: Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的. 所以不同APK(用户)间互相访问数据默认是禁止的. 但是它也提供了2种APK间共享数据的形式: 1. Share Preference. / Content Provider APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Sh

Android多线程研究(5)线程之间共享数据

一.如果是每个线程都执行相同的代码,则可以使用同一个Runnable来实现共享 public class MultiThreadShareData { public static void main(String[] args) { new Thread(new ShareData()).start(); new Thread(new ShareData()).start(); } static class ShareData implements Runnable{ private int j

共享内存-android系统进程间共享数据的同步问题

问题描述 android系统进程间共享数据的同步问题 想在android系统层写两个可执行程序(main_a,main_b),使用ndk-build编译. main_a 用来录音,main_b通过进程件套通信方式从main_a中把录音数据接收过来保存成文件.对于android来说,能想到的进程间通信方式是mmap,(匿名管道不行:命名管道有长度限制:匿名共享内存貌似得不到相同的文件句柄,而且内部也是使用mmap实现的).现在能用mmap共享数据,但是两个进程之间读写数据无法做同步.(据我了解li

Android编程实现两个Activity之间共享数据及互相访问的方法_Android

本文实例讲述了Android编程实现两个Activity之间共享数据及互相访问的方法.分享给大家供大家参考,具体如下: 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可以直接访问其成员(字符.数值.成员对象等),并能调用其公开的方法,那应该比用Intent来传递数据直接方便的多,于是偿试了如下办法,测试基本没有问题,发出来大家讨论一下.本人学习android不久,幼稚的地方希望大家不要见笑 原理:假设有两个Ac

Android编程实现两个Activity之间共享数据及互相访问的方法

本文实例讲述了Android编程实现两个Activity之间共享数据及互相访问的方法.分享给大家供大家参考,具体如下: 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可以直接访问其成员(字符.数值.成员对象等),并能调用其公开的方法,那应该比用Intent来传递数据直接方便的多,于是偿试了如下办法,测试基本没有问题,发出来大家讨论一下.本人学习android不久,幼稚的地方希望大家不要见笑 原理:假设有两个Ac

Android 多个APK数据共享

Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的.所以不同APK(用户)间互相访问数据默认是禁止的. 但是它也提供了2种APK间共 享数据的形式: 1. Share Preference. / Content Provider APK可以指定接口和数据给任何其他 APK读取. 需要自己实现接口和Share的数据. 2. Shared User id 通过Shared User id,拥有同