全部Android应用程序都必须被开发者数字签名,即便用私有密钥数字签署一个给定的应用程序,以便识别代码的做者,检测应用程序是否发生了改变,而且在相同签名的应用程序之间创建信任,进而使具有互信关系的应用程序安全地共享资源。使用相同数字签名的不一样应用程序能够相互授予权限来访问基于签名的API。若是应用程序共享UID,则能够运行在同一进程中,从而容许彼此访问对方的代码和数据。安全
应用程序签名就须要生成私有密钥与公共密钥对,使用私有密钥签署公共密钥证书。应用程序商店与应用程序安装包都不会安装没有数字证书的应用。可是,签名的数字证书不须要权威机构来认证,应用程序签名可由第三方完成,如OEM厂商,运营商及应用程序商店等,也可由开发者本身完成签名,即所谓自签名。自签名容许开发者不依赖于任何第三方自由发布应用程序。spa
在安装应用程序APK时,系统安装程序首先检查APK是否被签名,有签名才可以安装。当应用程序升级时,须要检查新版应用的数字签名与已安装的应用程序的签名是否相同,不然,会被看成一个全新的应用程序。一般,由同一个开发者设计的多个应用程序可采用同一私钥签名,在manifest文件中声明共享用户ID,容许它们运行在相同的进程中,这样一来,这些应用程序能够共享代码和数据资源。Android开发者们有可能把安装包命名为相同的名字,经过不一样的签名能够把它们区分开,也保证了签名不一样的包不被替换掉,同时有效地防止了恶意软件替换安装的应用。设计
Android提供了基于签名的权限检查,应用程序间具备相同的数字签名,它们之间能够以一种安全的方式共享代码和数据。
进程