`
trinityblood
  • 浏览: 117127 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android-sharedUserId数据权限及数据共享

阅读更多
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就可以直接打开数据库

3、或者用更高一点的system权限,但是这个需要相应的环境来重新编译项目android:sharedUserId="android.uid.system"
4、A程序如果想访问B程序的数据,但是他们不共用一个userid。那么B可以同设置自己的数据的访问权限来让A访问:busybox chmod -R 777 dir
分享到:
评论

相关推荐

    Android-sharedUserId数据共享

    1. **数据共享**:应用间可以共享文件、数据库等资源,方便构建组件化或插件化的应用结构。 2. **权限继承**:一个应用如果获得了某个危险权限,其他同`sharedUserId`的应用也能自动拥有该权限,无需再次请求用户...

    sharedUserId实现不同APK数据共享

    在Android系统中,`sharedUserId`是一个特殊的属性,它允许两个或多个应用共享同一用户ID。这在某些情况下非常有用,比如当您需要...因此,在开发过程中,需要根据具体需求权衡是否采用`sharedUserId`来实现数据共享。

    Android的权限机制之—— “沙箱”机制sharedUserId和签名

    值得注意的是,尽管`sharedUserId`提供了一种数据共享的方式,但过度使用或不恰当的使用可能会降低系统的安全性。因此,开发者应谨慎处理,仅在必要时才使用,并确保共享的数据和功能不会暴露敏感信息给不授权的第三...

    android 不同应用数据共享.存储

    总结一下,Android提供了多种方式来实现不同应用间的数据共享和存储:通过ContentProvider公开数据接口,使用Services进行后台通信,以及通过设置SharedUserId提升信任应用的权限。每个方法都有其适用场景,开发者应...

    Android权限 ROOT权限

    - **数据共享**:如果需要与其他应用共享数据,可以通过设置文件权限为世界可读/可写 (`MODE_WORLD_READABLE` 和 `MODE_WORLD_WRITEABLE`) 实现。这使得任何其他应用都能够访问这些文件。 ##### (4) 显式权限声明 ...

    Android通过共享用户ID来实现多Activity进程共享

    2. **数据共享**:应用可以直接访问其他具有相同共享用户ID的应用的文件,无需通过ContentProvider或者其他IPC方式。 3. **服务共享**:一个应用可以启动另一个应用的服务,或者直接与之交互。 但是,共享用户ID也...

    android 权限问题

    本文将针对“Android权限问题”进行深入探讨,重点分析Android应用权限的基本概念、权限类型、权限获取方式及权限问题的解决方案。 #### 二、Android权限基本概念 1. **权限定义**:在Android系统中,权限是指允许...

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

    然而,当有需求让同一公司的多个应用之间进行数据交互时,Android提供了两种主要的实现方式:通过自定义接口和基于User id的数据共享。本文将重点讲解基于User id的数据共享方法,因为它相对简单且实用。 首先,...

    Android的安全与权限.pdf

    综上所述,Android的安全体系是多层次的,包括进程隔离、权限管理、应用签名、用户ID分配、文件权限、运行时权限检查等,旨在保护用户数据安全及隐私,同时也为开发者提供了一个可控的开发环境。在进行Android应用...

    修改system读取sdcard权限.rar

    在manifest文件中添加`android:sharedUserId="android.uid.system"`属性到`&lt;application&gt;`标签,这将使应用与系统共享用户ID。 2. **添加权限声明**:在同一个`&lt;application&gt;`标签下,声明`android.permission....

    ANDROID 中UID与PID的作用与区别

    例如,两个应用程序如果想要共享数据,可以通过在各自的`manifest`文件中设置`android:sharedUserId`属性为相同的值,这样它们就会被赋予同一个UID,从而能够相互访问数据。 ### 总结 综上所述,Android中的PID和...

    android功能模块 插件化demo

    "sharedUserId"是Android系统中的一个关键属性,它允许不同应用之间共享相同的用户ID。在插件化场景下,如果主应用和插件设置相同的sharedUserId,它们就可以在安全沙箱之外互相访问对方的资源和数据,这在实现插件...

    安卓(与驱动)之 app获取系统级权限1

    在Android操作系统中,权限管理是非常关键的,确保了应用的安全性和用户数据的保护。通常,普通用户级别的应用程序是无法直接访问或控制系统的敏感功能,如关机或重启。本文主要讨论如何让App获取系统级权限,尤其是...

Global site tag (gtag.js) - Google Analytics