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

學無先后,達者為師

網站首頁 編程語言 正文

sharedUid、系統簽名、預置應用

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

1.sharedUid

1.1共享資源

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

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

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

1.2通過shareduserid來獲取系統權限?


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

1.3擴展


系統中所有使用android.uid.system作為共享UID的APK,都會首先在manifest節點中增加android:sharedUserId="android.uid.system",然后在Android.mk中增加LOCAL_CERTIFICATE := platform。可以參見Settings等;

系統中所有使用android.uid.shared作為共享UID的APK,都會在manifest節點中增加android:sharedUserId="android.uid.shared",然后在Android.mk中增加LOCAL_CERTIFICATE := shared。可以參見Launcher等;

系統中所有使用android.media作為共享UID的APK,都會在manifest節點中增加android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media。可以參見Gallery等。
?

2.系統簽名

要實現apk靜默安裝,修改系統聲音之類的功能,需要對apk進行系統簽名,系統簽名跟證書簽名是不同的兩個概念

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

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

3.預置應用

  • 位于系統分區的priv-app目錄下的應用就是特權應用。普通三方應用只應包含normaldangerous(運行時)級別的權限,特權應用可能會增加signatureprivileged級別的權限。

  • 如果在app的Android.bp文件內定義了privileged: true, 或者在Android.mk內定義了LOCAL_PRIVILEGED_MODULE := true 那么這個apk就會被編譯到system/priv-app分區內成為特權應用。

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

  • 不同的Android版本定義的特權分區如下:

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

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

欄目分類
最近更新