Android-sharedUserId数据权限
- 博客分类:
- Android
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 794转: Android Service学习之本地服务 htt ... -
match_parent和fill_parent的区别 .
2012-02-18 11:49 1777match_parent和fill_parent的区别 有 ... -
Android中SQLiteOpenHelper类的onUpgrade方法的作用
2012-02-09 11:50 4557Android中SQLiteOpenHelper类的onUpg ... -
Android启动各种系统服务线程
2012-02-09 10:59 1892Android启动各种系统服务 ... -
android
2012-02-08 09:22 0Android数据库内容变化的监听 首先介绍内容监 ... -
在线升级Android应用程序的思路
2012-02-07 11:34 816在线升级Android应用程序的思路 http://www. ... -
Android数据库内容变化的监听
2012-02-07 11:31 5985Android数据库内容变化的监听 首先介绍内容监 ... -
android中的数据库操作
2012-02-07 10:50 1406android中的数据库操作 ... -
SQLiteOpenHelper类与自动升级数据库
2012-02-07 10:31 2234SQLiteOpenHelper类与自动升级数据库 S ... -
SQLite外键的实现
2012-02-07 10:30 1652SQLite外键的实现 SQLite现在的版本还不支持 ... -
Android到处都在使用的回调分析
2011-12-21 15:53 3495Android到处都在使用的回调分析 ... -
android中LayoutInflater的使用
2011-12-21 11:35 1896android中LayoutInflater的使用 ... -
SIM卡满处理流程分析
2011-12-19 15:15 1839SIM卡满处理流程分析 //框架层分析 // SMSD ... -
短信发送状态报告流程分析
2011-12-19 15:07 2347短信发送状态报告流程分析 //应用层分析: //Sms ... -
Android平台 短信接送流程剖析(含编码)
2011-12-16 15:29 3192Android平台 短信接送流程剖析(含编码) ... -
修改语言环境方法
2011-12-16 15:20 990修改语言环境方法 private void se ... -
Android平台 短信发送流程剖析(含编码)
2011-12-12 17:12 4256Android平台 短信发送流程剖析(含编码) 本文对A ... -
Android 应用程序签名
2011-11-27 11:34 1599Android 应用程序签名 转:http://www ... -
理解Android 上的安全性
2011-11-27 11:18 1419理解 Android 上的安全性 ...
相关推荐
Android-sharedUserId数据共享
我们在做系统级的app开发时,往往会在AndroidManifest.xml文件中添加:android:sharedUserId=”android.uid.system”以获取系统级的权限,如果你正在使用Android Studio进行开发,编译生成的apk会因为签名问题无法...
sharedUserId实现不同APK数据共享
android:sharedUserId=“android.uid.system” 不过这样的话,app就要放到源码里编译了。 2、 /dev/ttyS4要有读写权限 (你的串口不一定是这个ttyS4) ls -l /dev/ttyS4 如果没有读写权限,记得在init.rc里面添加 ...
Android手机屏幕助手,用来... 所以需要在源码环境下编译,需要系统签名,需要声明android_sharedUserId=_android.uid.system_ .zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android-application-plug-ins-frame-work ...框架的思想,主要是通过apk清单文件中的sharedUserId属性来吧多个apk融合为单一的dalvik虚拟机,也就是融合为一个进程,这样就变相逾越了android框架中不同apk权限不同无法
通过在每个App中使用sharedUserId设置即可共享系统账户权限,比如android:sharedUserId="android.uid.system" 这样就是用了system这个uid了。给apk增加系统签名,否则一些系统apk将无法安装,使用命令: java -jar ...
Android SharedUserID Demo 包含: 1.同一Apk中的同一包中的Activity调用时进程状况验证 2.同一Apk中的不同包的Activity调用时进程状况验证 3.同一Apk中Activity process属性修改后进程状况验证 4.不同Apk中...
NULL 博文链接:https://dengzhangtao.iteye.com/blog/1989065
原因:apk的AndroidManifest.xml中声明了android:sharedUserId="android.uid.system",但没有相应的签名 解决方案: 1. 找到编译目标系统时的签名证书platform.pk8和platform.x509.pem,在android源码目录build\...
系统中所有使用 android.uid.system 作为共享 UID 的 APK ,都会首先在 manifest 节点中增加android:sharedUserId=“android.uid.system”,然后在 Android.mk 中增加 LOCAL_CERTIFICATE := platform。可以参见 S
app获取系统级权限有两种方法,一个是root,另一个是在AndroidManifest中添加android:sharedUserId="android.uid.system",但是Manifest文件中加入sharedUserId后,我们会发现一个问题,就是INSTALL_FAILED_SHARED_...
Android 插件Demo 事例 android:sharedUserId="org.igeek.android.pluginframework.demo
权限提升方法:一种方法:1、在AndroidManifest.xml中的manifest节点中添加 android:sharedUserId=”android.uid.system”。2、添加后程序在虚拟机上是不可以直接用的。但可以用eclipse编译成apk。3、(这一步经验证...
android:sharedUserId 指定在多个包之间共享的用户ID android:versionCode 内部版本号 android:versionName 版本名称 描述:定义一个用来控制其他包对本包内的组件访问的全乡对象。这将产生一个新的结构体,应用组件...
android 数据存储 与 跨应用 数据访问 Services 和 广播 简单 实例 附带详细注释
常用的给应用开放系统权限的方法是直接将该应用做成系统应用(即在AndroidManifest.xml文件里加上:android:sharedUserId=”android.uid.system”),但是这种做法限制了应用本身的自由,也就是说经过系统签名后的...
在不刷root权限的情况下,如果想在应用层修改系统时间是...本资源是通过android:sharedUserId="android.uid.system",先打包apk,然后用压缩文件打开apk,删除META-INF文件夹下的CERT.SF和CERT.RSA,然后运行.bat处理即可
有时候使用某些api需要使用系统权限,如调用PackageInstaller的相关接口,需要android.permission.INSTALL_PACKAGES权限,该权限...2、添加sharedUserId=”android.uid.system”配置,同时使用系统签名对apk进行重签