日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

sharedUid、系統(tǒng)簽名、預(yù)置應(yīng)用

作者:菜鳥xiaowang 更新時(shí)間: 2022-10-11 編程語言

1.sharedUid

1.1共享資源

Android給每個(gè)APK進(jìn)程分配一個(gè)單獨(dú)的空間,manifest中的userid就是對應(yīng)一個(gè)分配的Linux用戶ID,并且為它創(chuàng)建一個(gè)沙箱,以防止影響其他應(yīng)用程序(或者被其他應(yīng)用程序影響)。

通常,不同的APK會(huì)具有不同的userId,因此運(yùn)行時(shí)屬于不同的進(jìn)程中,而不同進(jìn)程中的資源是不共享的(比如只能訪問/data/data/自己包名下面的文件),保障了程序運(yùn)行的穩(wěn)定。在有些時(shí)候,我們自己開發(fā)了多個(gè)APK,并且需要他們之間互相共享資源,那么就需要通過設(shè)置shareUserId來實(shí)現(xiàn)這一目的。
通過Shared User id,擁有同一個(gè)User id的多個(gè)APK可以配置成運(yùn)行在同一個(gè)進(jìn)程中,可以互相訪問任意數(shù)據(jù)。也可以配置成運(yùn)行成不同的進(jìn)程, 同時(shí)可以訪問其他APK的數(shù)據(jù)目錄下的數(shù)據(jù)庫和文件,就像訪問本程序的數(shù)據(jù)一樣(使用IPC機(jī)制,不同進(jìn)程之間,比如AIDL)。

Android中不允許相同的uid有不同的簽名

1.2通過shareduserid來獲取系統(tǒng)權(quán)限?


(1)在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
(2)在Android.mk文件里面添加LOCAL_CERTIFICATE := platform(使用系統(tǒng)簽名)
(3)在源碼下面進(jìn)行mm編譯
這樣生成的apk能夠獲取system權(quán)限,可以在任意system權(quán)限目錄下面進(jìn)行目錄或者文件的創(chuàng)建,以及訪問其他apk資源等(注意創(chuàng)建的文件(夾)只有創(chuàng)建者(比如system,root除外)擁有可讀可寫權(quán)限-rw-------)。

1.3擴(kuò)展


系統(tǒng)中所有使用android.uid.system作為共享UID的APK,都會(huì)首先在manifest節(jié)點(diǎn)中增加android:sharedUserId="android.uid.system",然后在Android.mk中增加LOCAL_CERTIFICATE := platform。可以參見Settings等;

系統(tǒng)中所有使用android.uid.shared作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加android:sharedUserId="android.uid.shared",然后在Android.mk中增加LOCAL_CERTIFICATE := shared。可以參見Launcher等;

系統(tǒng)中所有使用android.media作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media。可以參見Gallery等。
?

2.系統(tǒng)簽名

要實(shí)現(xiàn)apk靜默安裝,修改系統(tǒng)聲音之類的功能,需要對apk進(jìn)行系統(tǒng)簽名,系統(tǒng)簽名跟證書簽名是不同的兩個(gè)概念

系統(tǒng)簽名需要系統(tǒng)證書,該系統(tǒng)證書是編譯安卓版本的時(shí)候產(chǎn)生的文件,用于證明你的apk準(zhǔn)許操作系統(tǒng)層級的指令,如果你想獲得該證書則需要找到提供安卓系統(tǒng)的廠家

如果要使用系統(tǒng)證書簽名,則需要在AndroidManifest.xml中添加? sharedUserId

3.預(yù)置應(yīng)用

  • 位于系統(tǒng)分區(qū)的priv-app目錄下的應(yīng)用就是特權(quán)應(yīng)用。普通三方應(yīng)用只應(yīng)包含normaldangerous(運(yùn)行時(shí))級別的權(quán)限,特權(quán)應(yīng)用可能會(huì)增加signatureprivileged級別的權(quán)限。

  • 如果在app的Android.bp文件內(nèi)定義了privileged: true, 或者在Android.mk內(nèi)定義了LOCAL_PRIVILEGED_MODULE := true 那么這個(gè)apk就會(huì)被編譯到system/priv-app分區(qū)內(nèi)成為特權(quán)應(yīng)用。

    • 如果在Android.mk內(nèi)組合了LOCAL_PRODUCT_MODULE := true,那么編譯位置變成system/product/priv-app分區(qū)
    • 同理在Android.bp內(nèi)組合了product_specific: true,那么也將編譯到system/product/priv-app分區(qū)
  • 對于特權(quán)應(yīng)用來說,它的啟動(dòng)時(shí)機(jī)是不可控的,對于privileged/signature權(quán)限,如果不進(jìn)行預(yù)先授予,那么必將導(dǎo)致設(shè)備嚴(yán)重bug。因此必須聲明在permission白名單內(nèi)。

  • 不同的Android版本定義的特權(quán)分區(qū)如下:

    • 小于等于Android 8.1的版本,特權(quán)分區(qū)為/system。
    • 大于等于Android 9的版本,特權(quán)分區(qū)為/system, /product和/vendor。
    • 對于安卓11版本,特權(quán)分區(qū)新增了/system_ext。

原文鏈接:https://blog.csdn.net/xiaowang_lj/article/details/127249411

欄目分類
最近更新