網(wǎng)站首頁 編程語言 正文
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)包含normal和dangerous(運(yùn)行時(shí))級別的權(quán)限,特權(quán)應(yīng)用可能會(huì)增加signature和privileged級別的權(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ū)
- 如果在Android.mk內(nèi)組合了
-
對于特權(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
相關(guān)推薦
- 2022-06-07 進(jìn)行數(shù)據(jù)處理的6個(gè)?Python?代碼塊分享_python
- 2023-05-20 工程級?React?注冊登錄全棧級流程分析_React
- 2022-05-10 Element-ui 中 Table 表格的設(shè)置表頭/去除下標(biāo)線/設(shè)置行間距等屬性的使用及 slot
- 2022-09-20 Springboot整合Redis與數(shù)據(jù)持久化_Redis
- 2022-07-12 Docker-swarm快速搭建redis集群的方法步驟_docker
- 2022-04-12 GitHub_git push出現(xiàn)[rejected] master -> master (non-
- 2022-07-23 asp.net6?blazor?文件上傳功能_實(shí)用技巧
- 2022-07-31 Android?中的類文件和類加載器詳情_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支