網站首頁 編程語言 正文
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目錄下的應用就是特權應用。普通三方應用只應包含normal和dangerous(運行時)級別的權限,特權應用可能會增加signature和privileged級別的權限。
-
如果在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分區
- 如果在Android.mk內組合了
-
對于特權應用來說,它的啟動時機是不可控的,對于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
相關推薦
- 2022-03-17 淺析.netcore中的Configuration具體使用_實用技巧
- 2022-03-27 Unity實現物體跟隨鼠標移動_C#教程
- 2022-11-27 C++常見的stl容器與相關操作?示例解析_C 語言
- 2022-01-11 小程序 ------ [mini-css-extract-plugin] css沖突問題
- 2022-12-02 Python?selenium?get_cookies獲取cookie不全的解決方案_python
- 2022-03-23 Android應用內懸浮窗Activity的簡單實現_Android
- 2022-02-06 pecl 安裝出現No releases available for package 解決方案
- 2022-05-03 詳解Python實現圖像分割增強的兩種方法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支