认识Android的UID(Unix user ID)与权限

    在传统计算机上,UID是跟随着「人」(例如计算机的使用者或用户)。Android里的UID是跟随着「软件」(例如Android应用程序)。
由于每个应用程序都有个UID,只有带着此UID,才能存取该UID所涵盖的有关资料。所以如果AP-1与AP-2的UID不同,则在预设(Default)情况下,双方都无法读取对方的数据。这种分而治之的方式,可以减轻黑客软件的恶意伤害数据,提升手机的安全性。
当手机使用者(即User)下载你(即开发者)的应用程序,在安装(Install)时,Android就会给予一个UID。这个UID可连结到该应用程序的 AndroidManifest.xml档案的内容。所以User在安装你的应用程序时,在屏幕上的窗口里可以检视这个AndroidManifest.xml档案的内容。在检视时,用户会看到你对应用程序的目的、权限等说明。当你接受这支程序的意图、权限说明之后,Android就安装它,并给它一个UID。万一在你的应用程序执行期间有越轨(企图做出非权限范围)的行为时,用户将会得到Android的警告讯息。
有一些特殊情形下,两支应用程序是可以持有一样的UID。例如,同一位开发者撰写的应用程序,常常需要推出新版本,这两种版本的程序可以持有一样的UID, 才有权限去将旧版程序所产生的数据拷贝转移到新版软件里。
一个用户在其使用手机的用例(Use Case)里,通常由一个Activity启动开始,透过Intent对象去启动其它的Activity、Service、ContentProvider等具有不同UID的一连串应用程序,才能满足一个用例的目标。在传统计算机上,UID是跟随着「人」,一个用户持着一个UID就能执行一连串的应用程序,而且在预设条件下是可以互相共享数据。但是在Android里,这一连串的应用程序是各有自己的UID,而且可能都持着不同的UID,原则上是不能任意存取对方的资料。
    UID与AndroidManifest.xml档案的连结除了可以保护各程序的私有数据之外,还可以禁止程序越权使用手机的各项资源。例如,开发者在AndroidManifest.xml档案里表明此程序有READ_CONTACTS的授权。用户在安装此应用程序时,检视过AndroidManifest.xml的授权内涵,而且接受之。此应用程序就能合法地存取手机里的通讯簿数据,甚至授权拨打电话、发简讯等等。
刚才提到过,一个用户的用例(Use Case)里,通常由多个不同UID的Activity、Service、ContentProvider等一连串的应用程序所串接,才能满足用例的目标。此时,如果它们都必须存取通讯簿的话,必须都持有相同的READ_CONTACTS授权才行。
    以上就应用程序的开发者、使用者的角度来说明Android的UID之意义和用法

你可能感兴趣的:(android)