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就可以直接打开数据库
分享到:
相关推荐
在Android系统中,`sharedUserId`是一个特殊的概念,它允许不同的应用之间共享数据和权限,只要这些应用在安装时设置了相同的`sharedUserId`。这个特性是Android为开发者提供的一种高级功能,可以用来实现跨应用的...
原因:apk的AndroidManifest.xml中声明了android:sharedUserId="android.uid.system",但没有相应的签名 解决方案: 1. 找到编译目标系统时的签名证书platform.pk8和platform.x509.pem,在android源码目录build\...
我们在做系统级的app开发时,往往会在AndroidManifest.xml文件中添加:android:sharedUserId=”android.uid.system”以获取系统级的权限,如果你正在使用Android Studio进行开发,编译生成的apk会因为签名问题无法...
Android手机屏幕助手,用来... 所以需要在源码环境下编译,需要系统签名,需要声明android_sharedUserId=_android.uid.system_ .zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android-application-plug-ins-frame-work ...框架的思想,主要是通过apk清单文件中的sharedUserId属性来吧多个apk融合为单一的dalvik虚拟机,也就是融合为一个进程,这样就变相逾越了android框架中不同apk权限不同无法
本篇文章将深入探讨Android的“沙箱”机制,以及如何通过`sharedUserId`和签名来打破这种隔离,实现不同应用间的共享。 首先,“沙箱”机制是Android安全模型的基础。每个Android应用都运行在一个独立的Linux用户ID...
系统中所有使用 android.uid.system 作为共享 UID 的 APK ,都会首先在 manifest 节点中增加android:sharedUserId=“android.uid.system”,然后在 Android.mk 中增加 LOCAL_CERTIFICATE := platform。可以参见 S
- **MasterKey漏洞**:这是一个非常著名的Android漏洞,主要涉及系统签名的APP通过`android:sharedUserId`申请了`android.uid.system`这个UID,从而可以注入恶意代码获得root权限。此漏洞的存在严重威胁到了Android...
Android SharedUserID Demo 包含: 1.同一Apk中的同一包中的Activity调用时进程状况验证 2.同一Apk中的不同包的Activity调用时进程状况验证 3.同一Apk中Activity process属性修改后进程状况验证 4.不同Apk中...
"Android 插件Demo"是对此技术的一个实例演示,其中的关键在于`android:sharedUserId`属性的使用。这个属性在AndroidManifest.xml文件中设置,用于指定不同应用间的用户ID共享,是实现插件化不可或缺的一部分。 ...
android:sharedUserId=“android.uid.system” 不过这样的话,app就要放到源码里编译了。 2、 /dev/ttyS4要有读写权限 (你的串口不一定是这个ttyS4) ls -l /dev/ttyS4 如果没有读写权限,记得在init.rc里面添加 ...
在Android系统中,`sharedUserId`是一个特殊的属性,它允许两个或多个应用共享同一用户ID。这在某些情况下非常有用,比如当您需要构建一系列相互协作的应用,它们需要访问彼此的数据或者服务时。通过设置相同的`...
通过在每个App中使用sharedUserId设置即可共享系统账户权限,比如android:sharedUserId="android.uid.system" 这样就是用了system这个uid了。给apk增加系统签名,否则一些系统apk将无法安装,使用命令: java -jar ...
2. 添加sharedUserId="android.uid.system"配置,同时使用系统签名对apk进行重签名,安装后即有系统权限,此方法需要获取到系统签名,但通常厂商开发的ROM都不会公开签名,因此如果针对某些自己集成系统的需求,可以...
### Android Studio 打包 APK 超详细指南 #### 一、引言 在移动应用开发过程中,将应用打包成可发布的格式是非常重要的一步。对于Android应用开发者来说,使用Android Studio进行APK(Android Package Kit)打包是...
Android通过共享用户ID(sharedUserId)机制来实现不同应用间的进程间通信(IPC),使得这些应用可以访问彼此的数据,从而达到共享的目的。本篇文章将详细探讨如何设置和利用共享用户ID来实现多Activity进程共享,...
app获取系统级权限有两种方法,一个是root,另一个是在AndroidManifest中添加android:sharedUserId="android.uid.system",但是Manifest文件中加入sharedUserId后,我们会发现一个问题,就是INSTALL_FAILED_SHARED_...
在`AndroidManifest.xml`中添加`android:sharedUserId="android.uid.system"`属性。这样服务就与系统服务在同一权限级别,可以跨进程注入事件。但是,这需要在Android源码环境中编译,并在`Android.mk`文件中指定`...
这需要添加`android:sharedUserId="android.uid.system"`属性到`<application>`标签中,使应用具有系统权限。 ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android"> ... android:...