1. 程式人生 > >Android應用的uid和pid

Android應用的uid和pid

大家在用開發工具連線手機時一定見過下圖的程序編號:

   

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屬性來指定程序)。