Android UID and PID

Android UID and PID

  我们经常在一个activity中去start另一个activity,或者与另一个acitivity的结果进行交互 (startActivityForResult)。但有没有想过可能会出现的permission问题呢?如果你遇到了permission denial的Exception,那么你需要读读这篇文章啦。

我们在同一个application内部,可以随意的startActivity from Activity A to Activity
B,而官方的文档中说startActivity可能会报NotFoundException,表示被start的Activity不存在。因此,我们很
容易忽略另一个可能的Exception,Permission Denial。

当我们在不同的application中,如application A中的Activity去start一个application
B中的Activity,也许你什么Exception都不会得到,也可能会直接Force Close掉。因为再Start
Activity时,代码是有去检验permission的。

如下情况,可以成功startActivity而不会得到permission denial

1、同一个application下

2、Android:exported=”true”

5、目标Activity具有相应的IntentFilter,存在Action动作或其他过滤器并且没有设置exported=false

6、启动者的Pid

7、启动者的Uidandroid.system.Uid的application,我们称之为获得Root权限)

如果上述调节,满足一条,一般即可(与其他几条不发生强制设置冲突),否则,将会得到Permission Denial的Exception而导致Force Close。

现在,我来解释一下Pid是进程ID,AndroidUid,哪个用户start的程序,这个程序的Android中每个程序都有一个Android会给每个程序分配一个普通级别互不相同的 Uid相同才行,这就使得共享数据具有了一定安全性,每个软件之间是不能随意获得数据的。而同一个application 只有一个android:exported=”true”
的作用,而一旦设置了intentFilter之后,exported就默认被设置为true了,除非再强制设为false。当然,对那些没有
intentFilter的程序体,它的exported属性默认仍然是false,也就不能共享出去。

2、权限提示暴露,这就是为什么经常要设置usePermission的原因,如果人家设置了 Uid强制设置为一样的。这种情况下必须使用具有该公司签名的签名文档才能,如果使用一个系统自带软件的ShareUID,例如Contact,那么无须第三方签名。

这种方式保护了第三方软件公司的利益于数据安全。

当然如果一个activity是又system process跑出来的,那么它就可以横行霸道,任意权限,只是你无法开发一个第三方application具有系统的Pid不固定),但是你完全可以开发一个具有系统android.system.Android.mk中声明 Certificate:platform则可以了,既采用系统签名。这个系统编译的系统一致,例如官方的系统得用官方的签名文件,CM的系统就得用CM的签名文件。

时间: 2024-11-12 16:14:00

Android UID and PID的相关文章

Android uid和pid安全机制

1.概述 Android 安全机制来源于Linux,并且以Linux权限管理为基础,要了解Android的安全机制,需要从linux中的安全机制了解开始,而用户的权限管理又是linux安全机制的最基本的一个组成 2.Android 系统中的UID.GID.GIDS与PID 在 Android 上,一个用户 UID 标示一个应用程序.应用程序在安装时被分配用户 UID,应用程序在设备上的存续期间内,用户 UID 保持不变.对于普通的应用程序,GID即等于UID. GIDS 是由框架在 Applic

Android中的UID和PID意义,及查看方式

Pid是进程ID,Uid是用户ID,只是Android和计算机不一样,计算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid就是那个用户,而Android中每个程序都有一个Uid,默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性,每个软件之间是不能随意获得数据的.而同一个application 只有一个Uid,所以application下的Activity之间不存在访问权限的问题.

android.uid.system无法读取SD卡信息

[Android]android.uid.system无法读取SD卡信息[转] 在AndroidManifest.xml中我们可以看到android:sharedUserId="android.uid.system"但是有了这句后,就无法对sd卡进行读写操作,比如在SD卡中创建一个新文件夹,是创建不成功的. 但是如果把android:sharedUserId="android.uid.system"注释掉,就可以在SD卡进行IO操作了. 在Settings中andr

ANDROID 中UID与PID的作用与区别

PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大. UID:一般理解为User Identifier,UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理.而在android 中又有所不同,因

Android中UID和PID的作用和区别

PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大. UID:一般理解为User Identifier,UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理.而在android 中又有所不同,因

ADB命令获取Android UID

有三种方案: 1. adb shell dumpsys package 先通过 "adb shell dumpsys package 如: ~ adb shell dumpsys package com.predict.horoscope.daily.zodiac.sign | grep userId= userId=10096 gids=[3003, 1028, 1015] 2. adb shell cat /proc/ 这个命令中的关键是 pid,可通过以下命令获取. adb shell p

mahout做推荐时uid,pid为string类型

很幸运找到这篇文件,解了燃眉之急. http://blog.csdn.net/pan12jian/article/details/38703569 mahout做推荐的输入只能是long类型,但在某些网站中,存储的数据不是long类型,是string类型. 现在的手机APP,每个手机都有其device_id,也是string类型.如果能以string类型作为uid,即使用户不注册,不登录.只要采用device_id作为其uid,也可以做精准推荐. mahout提供了一个接口,能把string转为

[Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)

1: 获取PackageManager 获取全部静态已安装的应用: ? 1 PackageManager pm = getPackageManager(); <br>List<PackageInfo> infos = pm.getInstalledPackages(0); <br><br>icon  : info.applicationInfo.loadIcon(pm)<br>appName : info.applicationInfo.load

android从应用到驱动之—camera(2)---cameraHAL的实现

本来想用这一篇博客把cameraHAL的实现和流程都给写完的.搞了半天,东西实在是太多了.这篇先写cameraHAL的基本实现框架,下一篇在具体写camerahal的流程吧. cameraHAL的实现: 对于初学者来说,最大的疑问是系统是如何调用hardware的.这里就以camera来举例说明.调用hardware的程序是cameraservice,我们就去它里面看看它是如何找到hardware的 先把源码贴上来: /* ** ** Copyright (C) 2008, The Androi