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就可以直接打开数据库.
分享到:
相关推荐
当两个或多个APK配置了相同的User id时,它们会被视为属于同一个用户组,可以访问彼此的数据。这需要在每个APK的`AndroidManifest.xml`文件中设置`android:sharedUserId`属性,值为相同的User id。例如: ```xml ...
这个过程涉及到多个Android系统级别的API和技术点,包括网络请求、文件下载、线程管理、通知栏管理和文件存储等。下面我们将详细探讨这些知识点。 首先,**网络请求与文件下载**是基础。在Android中,可以使用`...
4. **InstallSession**: 安装过程分为多个阶段,每个阶段对应一个`InstallSession`。`PackageInstaller.Session`接口提供了创建和管理这些安装会话的方法。 5. **Permission Controller**: 在安装过程中,`Package...
这对于那些需要在多个屏幕上同时展示信息或操作的应用,如会议演示或游戏,有着极高的参考价值。 除了Activity和Presentation,ApiDemos apk还包含了对其他Android API的广泛演示,例如: 1. 内容提供者(Content ...
在Android应用开发中,有时我们需要实现不同应用程序之间的交互,例如数据共享或状态通知。本教程将深入探讨如何利用Broadcast和ContentProvider实现两个apk之间的通信以及ContentProvider对数据库变更的监听。 ...
在Android系统中,`sharedUserId`是一个特殊的属性,它允许两个或多个应用共享同一用户ID。这在某些情况下非常有用,比如当您需要构建一系列相互协作的应用,它们需要访问彼此的数据或者服务时。通过设置相同的`...
- 不要在多个应用之间共享签名密钥,以防止一个应用的安全问题影响其他应用。 - 对于发布到Google Play或其他应用商店的APK,使用Play商店提供的签名服务,以便进行版本更新和权限管理。 通过以上步骤,我们可以...
首先,我们要理解为什么需要将多个APK打包成一个。在某些复杂的应用场景下,比如游戏或大型应用,可能会有多个模块,每个模块对应不同的功能或者服务。如果每个模块都是独立的APK,那么用户需要分别下载和安装,这...
4. **共享数据和资源** - **使用`SharedPreferences`**:不同`Application`可以通过`SharedPreferences`来共享简单的数据。 - **使用`ContentProvider`**:对于更复杂的数据共享,可以创建一个`ContentProvider`,...
在Android系统中,`sharedUserId`是一个特殊的概念,它允许不同的应用之间共享数据和权限,只要这些应用在安装时设置了相同的`sharedUserId`。这个特性是Android为开发者提供的一种高级功能,可以用来实现跨应用的...
综上所述,Android设备之间的屏幕共享是一个涉及网络通信、媒体处理、协议控制等多个领域的复杂过程。通过合理利用Android提供的API和网络技术,开发者可以构建出高效、稳定的投屏解决方案。在实际开发过程中,还...
《Java&Android正式版学习手册》是一款专为Java和Android开发者设计的学习资源,它提供了全面、详实的Android知识库,旨在帮助用户随时随地提升技能,深入理解这两个技术领域。这款apk应用程序不仅包含了基础的编程...
当一个APK被内置到设备的系统分区时,它通常被视为系统应用,拥有更高的权限和更深入的系统集成。然而,有时这种内置过程可能会导致设备无法正常启动。本文将探讨如何在不进行完整编译的情况下,检查和解决由APK内置...
在Android系统中,数据共享是应用程序之间相互交互的重要方式之一,尤其在需要多个应用协同工作时。本主题聚焦于在Android 2.3(API级别9)及以下版本中,如何利用SharedPreferences进行跨应用的数据共享。...
这个apk文件是Android应用的安装包,包含了一款软件的所有资源和代码,用户可以通过安装它来体验Android 2.2.5时代的应用特性。 总结,Android 2.2.5是Android发展历程中的一个重要里程碑,它的技术创新和优化为...
在Android平台上,动态加载插件apk是一种常见的技术,它允许应用程序在运行时加载和执行未在主应用包中编译的代码。这种技术的核心在于实现应用程序的模块化,提高更新效率,减少应用体积,以及增强安全性。下面我们...
这个“Android键值测试apk源代码”可能是一个用于检查或调试Android应用中键值存储机制的项目。源代码是开发者理解和分析程序逻辑、功能以及可能存在的问题的关键工具。下面我们将深入探讨Android键值存储、测试的...
1. **进程共享**:你可以将多个Activity放入不同的进程,但通过共享用户ID,它们可以共享内存空间,减少资源消耗。 2. **数据共享**:应用可以直接访问其他具有相同共享用户ID的应用的文件,无需通过ContentProvider...
Android APK的性能测试是复杂而细致的工作,涉及到多个层面。`procrank`等工具的使用可以帮助开发者更好地理解应用在运行过程中的资源占用情况,从而进行针对性的优化。通过结合多种工具和策略,开发者能够打造出...
Dalvik虚拟机经过优化,可以在有限的硬件资源上同时运行多个虚拟机实例而不占用过多资源。 - **字节码转换**:在编译Java代码之后,可以通过Android平台上的工具如dx工具将Java字节码转换成Dex字节码。这一过程...