Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户
(Android 系统是基于Linux)的.
所以不同APK(用户)间互相访问数据默认是禁止的.
但是它也提供了2种APK间共享数据的形式:
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Share的数据.
写:
shardPreferences = getContext().getSharedPreferences(IP_DIAL_SAVE, Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
读:
try {
Context friendContext = this.createPackageContext(
"com.cn.numberlocator",
Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = friendContext.getSharedPreferences("IP_DIAL_SAVE", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_READABLE);
String i = pref.getString("IP_NUMBER", "abcd");
boolean b = pref.contains("IP_NUMBER");
Log.d(TAG,"contacts pref simstatus="+ i + " "+b);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
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就可以直接打开数据库
发表评论
-
资料上传备份
2012-07-02 07:28 0对付对付对付对付 -
Android Service学习之本地服务
2012-04-18 10:28 863转: Android Service学习之本地服务 htt ... -
match_parent和fill_parent的区别 .
2012-02-18 11:49 1839match_parent和fill_parent的区别 有 ... -
Android中SQLiteOpenHelper类的onUpgrade方法的作用
2012-02-09 11:50 4600Android中SQLiteOpenHelper类的onUpg ... -
Android启动各种系统服务线程
2012-02-09 10:59 1936Android启动各种系统服务 ... -
android
2012-02-08 09:22 0Android数据库内容变化的监听 首先介绍内容监 ... -
在线升级Android应用程序的思路
2012-02-07 11:34 878在线升级Android应用程序的思路 http://www. ... -
Android数据库内容变化的监听
2012-02-07 11:31 6033Android数据库内容变化的监听 首先介绍内容监 ... -
android中的数据库操作
2012-02-07 10:50 1451android中的数据库操作 ... -
SQLiteOpenHelper类与自动升级数据库
2012-02-07 10:31 2282SQLiteOpenHelper类与自动升级数据库 S ... -
SQLite外键的实现
2012-02-07 10:30 1716SQLite外键的实现 SQLite现在的版本还不支持 ... -
Android到处都在使用的回调分析
2011-12-21 15:53 3545Android到处都在使用的回调分析 ... -
android中LayoutInflater的使用
2011-12-21 11:35 1932android中LayoutInflater的使用 ... -
SIM卡满处理流程分析
2011-12-19 15:15 1881SIM卡满处理流程分析 //框架层分析 // SMSD ... -
短信发送状态报告流程分析
2011-12-19 15:07 2392短信发送状态报告流程分析 //应用层分析: //Sms ... -
Android平台 短信接送流程剖析(含编码)
2011-12-16 15:29 3227Android平台 短信接送流程剖析(含编码) ... -
修改语言环境方法
2011-12-16 15:20 1038修改语言环境方法 private void se ... -
Android平台 短信发送流程剖析(含编码)
2011-12-12 17:12 4333Android平台 短信发送流程剖析(含编码) 本文对A ... -
Android 应用程序签名
2011-11-27 11:34 1641Android 应用程序签名 转:http://www ... -
理解Android 上的安全性
2011-11-27 11:18 1473理解 Android 上的安全性 ...
相关推荐
在Android系统中,`sharedUserId`是一个特殊的概念,它允许不同的应用之间共享数据和权限,只要这些应用在安装时设置了相同的`sharedUserId`。这个特性是Android为开发者提供的一种高级功能,可以用来实现跨应用的...
每个Android应用都运行在一个独立的Linux用户ID下,这个ID仅对应用自己的数据有权限。这意味着,即使两个应用安装在同一设备上,它们也无法直接访问彼此的数据,除非它们明确获得了相应的权限。这种设计极大地提高了...
其他应用通过`ContentResolver`查询或修改这些数据,`sharedUserId`使得它们能够无需权限就能访问。 5. **服务共享**:应用还可以通过绑定服务来共享功能或数据。使用`startService()`或`bindService()`,一个应用...
android:sharedUserId=“android.uid.system” 不过这样的话,app就要放到源码里编译了。 2、 /dev/ttyS4要有读写权限 (你的串口不一定是这个ttyS4) ls -l /dev/ttyS4 如果没有读写权限,记得在init.rc里面添加 ...
为了确保用户数据的安全以及应用程序间的隔离,Android采用了多层权限管理系统。 #### 二、Linux文件系统权限 在Linux文件系统中,每个文件都有一个权限字符串表示所有者(user)、所属组(group)和其他用户(others)...
- **MasterKey漏洞**:这是一个非常著名的Android漏洞,主要涉及系统签名的APP通过`android:sharedUserId`申请了`android.uid.system`这个UID,从而可以注入恶意代码获得root权限。此漏洞的存在严重威胁到了Android...
总结一下,Android提供了多种方式来实现不同应用间的数据共享和存储:通过ContentProvider公开数据接口,使用Services进行后台通信,以及通过设置SharedUserId提升信任应用的权限。每个方法都有其适用场景,开发者应...
如需使用此类权限,需要按照特定步骤配置,包括但不限于修改AndroidManifest.xml中的`android:sharedUserId`属性,以及使用正确的证书签名等。 #### 五、示例解析 假设我们有一个应用需要获取读取联系人的权限,...
正常权限不会直接影响用户隐私,而危险权限则涉及用户的个人数据。`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`是属于危险权限,通常需要用户明确授权。 在Android 6.0及更高版本,应用需要在运行时动态请求...
综上所述,Android的安全体系是多层次的,包括进程隔离、权限管理、应用签名、用户ID分配、文件权限、运行时权限检查等,旨在保护用户数据安全及隐私,同时也为开发者提供了一个可控的开发环境。在进行Android应用...
Android通过共享用户ID(sharedUserId)机制来实现不同应用间的进程间通信(IPC),使得这些应用可以访问彼此的数据,从而达到共享的目的。本篇文章将详细探讨如何设置和利用共享用户ID来实现多Activity进程共享,...
例如,两个应用程序如果想要共享数据,可以通过在各自的`manifest`文件中设置`android:sharedUserId`属性为相同的值,这样它们就会被赋予同一个UID,从而能够相互访问数据。 ### 总结 综上所述,Android中的PID和...
- 在`AndroidManifest.xml`中,确保你的测试应用声明了需要测试的主应用的`android:sharedUserId`和`android:testOnly="true"`属性。 3. **编写测试用例** - 在`src/androidTest/java`目录下创建测试类,继承自`...
在Android操作系统中,权限管理是非常关键的,确保了应用的安全性和用户数据的保护。通常,普通用户级别的应用程序是无法直接访问或控制系统的敏感功能,如关机或重启。本文主要讨论如何让App获取系统级权限,尤其是...
这通常通过在AndroidManifest.xml中声明`android:sharedUserId="android.uid.system"`,并在Android.mk中设置`LOCAL_CERTIFICATE := platform`来实现,然后通过源码环境下的mm命令编译应用。然而,由于系统权限涉及...
1. 替换系统拨号应用:通过设置`android:sharedUserId="android.uid.phone"`和签名证书,开发者可以创建自己的拨号应用来替换系统默认的拨号器。 2. 自定义UI:使用Android的布局和控件,开发者可以自由设计拨号...
但是,使用sharedUserId需要谨慎,因为它涉及到权限提升,可能导致安全问题,所以必须确保插件的安全性和可靠性。 在"plugin1"和"plugin2"这两个插件中,可能包含了不同的功能代码,比如新的活动(Activity)、服务...