全部Android應用程序都必須被開發者數字簽名,即便用私有密鑰數字簽署一個給定的應用程序,以便識別代碼的做者,檢測應用程序是否發生了改變,而且在相同簽名的應用程序之間創建信任,進而使具有互信關係的應用程序安全地共享資源。使用相同數字簽名的不一樣應用程序能夠相互授予權限來訪問基於簽名的API。若是應用程序共享UID,則能夠運行在同一進程中,從而容許彼此訪問對方的代碼和數據。安全
應用程序簽名就須要生成私有密鑰與公共密鑰對,使用私有密鑰簽署公共密鑰證書。應用程序商店與應用程序安裝包都不會安裝沒有數字證書的應用。可是,簽名的數字證書不須要權威機構來認證,應用程序簽名可由第三方完成,如OEM廠商,運營商及應用程序商店等,也可由開發者本身完成簽名,即所謂自簽名。自簽名容許開發者不依賴於任何第三方自由發佈應用程序。spa
在安裝應用程序APK時,系統安裝程序首先檢查APK是否被簽名,有簽名纔可以安裝。當應用程序升級時,須要檢查新版應用的數字簽名與已安裝的應用程序的簽名是否相同,不然,會被看成一個全新的應用程序。一般,由同一個開發者設計的多個應用程序可採用同一私鑰簽名,在manifest文件中聲明共享用戶ID,容許它們運行在相同的進程中,這樣一來,這些應用程序能夠共享代碼和數據資源。Android開發者們有可能把安裝包命名爲相同的名字,經過不一樣的簽名能夠把它們區分開,也保證了簽名不一樣的包不被替換掉,同時有效地防止了惡意軟件替換安裝的應用。設計
Android提供了基於簽名的權限檢查,應用程序間具備相同的數字簽名,它們之間能夠以一種安全的方式共享代碼和數據。
進程