Android應用的uid和pid
阿新 • • 發佈:2018-12-11
大家在用開發工具連線手機時一定見過下圖的程序編號:
PID和UID存在的意義
Pid是程序ID,Uid是使用者ID,只是Android和計算機不一樣,計算機每個使用者都具有一個Uid,哪個使用者start的程式,這個程式的Uid 就是那個使用者,而Android中每個程式都有一個Uid,預設情況下,Android會給每個程式分配一個普通級別互不相同的 Uid,如果應用之間要互相呼叫,只能是Uid相同才行,這就使得共享資料具有了一定安全性,每個軟體之間是不能隨意獲得資料的。而同一個 application 只有一個Uid,所以application下的Activity之間不存在訪問許可權的問題。
uid共享資料例項
假設我們有這樣一個需求,A和B是兩個應用,現在要求在A中獲取B的一張名字為icon_home的圖片資源(以Drawable例項的形式呈現),那我 們可以考慮將A和B的註冊檔案的manifest節點新增sharedUserId,並且賦值相同,然後在A中可以用如下方式實現:
Context subContext = null; try { //首先根據B應用的包名獲取其上下文,注意這個方法是Context的,如果沒找到會丟擲異常 subContext = createPackageContext("com.geo.plugin", Context.CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //然後根據上下文獲取資源 Resources res = subContext.getResources(); //然後根據圖片的名字獲取其id int menuIconId = res.getIdentifier("icon_home", "drawable", "com.geo.plugin"); //最後根據id生產Drawable例項 Drawable drawable = res.getDrawable(menuIconId);
最後需要注意的是,一個應用只有一個uid,但是可以有多個pid(通過process屬性來指定程序)。