UIDandroid
A. 安卓的UID是什麼意思
Android 里的 UID 是 跟隨著「軟體」(例如 Android 應用程序)。 由於每個應用程序都有個 UID,只有帶著此 UID,才能存取該 UID 所涵蓋的有關資料。就跟安裝軟體的附件一樣吧。
B. android中如何生成uid
一般android系統會自動為應用生成一個uid,並且每個應用會被分配不同的UID ,用於管理各個應用的許可權以及數據共享。。。其次我查了一些資料。在AndroidMenifest.xml中 在<manifest>標簽裡面增加 android:sharedUserId="xxxx",「xxxx」就是你自定義的uid了。。
C. android中如何生成uid
一般android系統會自動為應用生成一個uid,並且每個應用會被分配不同的UID
,用於管理各個應用的許可權以及
數據共享
。。。其次我查了一些資料。在AndroidMenifest.xml中
在
標簽裡面增加
android:sharedUserId="xxxx",「xxxx」就是你自定義的uid了。。
D. android系統的uid問題
不對,UID不是數字,PID才是,PID也沒有你說的那種情況。應用程序的UID是app_#,#代表數字。而系統進程的UID是root或者system
連上android設備或者模擬器,進入adb shell,top就可以看到當前所有進程。
E. android手機中PID和UID有什麼聯系
PID就是各進程的身份標識,獨一無二。
UID在linux中就是用戶的ID,表明時哪個用戶運行了這個程序,主要用於許可權的管理。
找了一個詳細講解的網頁,你看下。http://www.cnblogs.com/perseus/articles/2354173.html
F. android uid 和 pid 的理解獲取
1.理解
uid:uid 對於 應用來說其實就是指我們當前應用是在那個 group 組內
就是指這個shareuserid,一個組內的uid相同,,並且具有相同的uid的應用才能共享用戶內存
pid:是指每個進程在liunx下的 進程的id 是唯一的。
2.獲取
獲取uid:
PackageManager pm = getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo("com.speedsoftware.rootexplorer", PackageManager.GET_ACTIVITIES);
Log.d("!!", "!!" + ai.uid);
獲取pid:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> list = activityManager.getRunningAppProcesses();
for(ActivityManager.RunningAppProcessInfo runningAppProcessInfo : list){
if(runningAppProcessInfo.pid == pid){
processName = runningAppProcessInfo.processName;
}
}
G. Android中的uid
uid 是user 用戶id
Android 里的UID是基於應用程序,每一個程序都有一個UID,如果應用程序1和應用程序2的uid不同,則在default情況下,二者無法讀取對方的數據,這樣提升了應用的安全性。
當使用者安裝了某一應用程序時,android系統就會賦予一個uid,用戶可以在屏幕上的窗口裡可以檢視這個AndroidManifest.xml檔案的內容,用戶回了解這個應用程序的目的、許可權等,並選擇接受與不接受。
一些特殊情形下,兩個應用程序是可以持有一樣的UID。
例如,當需要推出新版本時,這兩種版本的程序可以持有一樣的UID, 才有許可權將舊版程序的數據轉移到新版軟體里。
Pid 是 process 進程ID,Uid 是 user 用戶ID,只是Android和計算機不一樣。
計算機每個用戶都具有一個Uid,而Android中每個程序都有一個Uid。
默認情況下,Android會給每個程序分配一個普通級別互不相同的 Uid,如果用互相調用,只能是Uid相同才行,這就使得共享數據具有了一定安全性。
每一個不同的 程序 都能有一個UId,但是一個應用裡面可以有多個PId。
一個用戶可以打開多個進程(Pid),並且這些進程的uid是一樣的;
一個pid對應一個進程,每次打開時系統都會賦予不同的pid,但是uid是當你安裝Apk時,系統賦予的,是不變的,除非你卸載了重裝,又會重新賦予一個Uid;
參考: 認識Android的UID(Unix user ID)與許可權
ANDROID 中UID與PID的作用與區別
H. Android uid
Process#uid 即 ApplicationInfo#appId 、UserHandle#appId 為從 Process#FIRST_APPLICATION_UID 開始增加的數字。其中約定 system 應用的 uid 為 Process#SYSTEM_UID,phone 進程為 Process#SYSTEM_UID 等。
這個 uid 在應用安裝時就由 PMS 分配:
I. 如何獲得所有android應用程序UID
一、修改Android Studio(以下簡稱AS)的內存配置
因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件
並將其作為要使用的SDK的java SDK。
三、生成導入AS所需配置文件(*.ipr)
①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)
②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar
如果idegen.jar不存在,執行:
mmm development/tools/idegen/
在5.0.1的源碼中會生成res.java的文件夾,導致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。
我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。
③執行
development/tools/idegen/idegen.sh
等待出現類似下面的結果:
Read excludes: 5ms
Traversed tree: 44078ms
這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件
Tips:
AS在導入代碼時比較慢,建議先修改android.iml,將自己用不到的代碼exclude出去.可以仿照過濾.repo文件夾的語法,如:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
刪除掉所有不需要的mole-library項
這樣在導入時就會跳過abi和art文件夾.過濾的越多,AS的處理速度就會越快.
④在AS中打開源碼根目錄下新生成的android.ipr
如果在導入時AS出現
則建議按照其給定的解決方法來解決(網址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit)
四、解決源碼中跳轉錯誤問題
①為當前工程設置正確的SDK和JDK
②設置'Moles'的依賴
先將所有依賴刪掉(注意:這里刪除全部只是為了方便。如果確實用到了.jar,在將它們的路徑添加進來就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
點擊指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來.如:
註:推薦把frameworks和external這兩個移到最上面,這樣在代碼跳轉時會優先從這兩個文件夾下查找,而不是在Android.jar中查找。
其它版本的代碼在添加frameworks時可能會顯示成:
沒有關系,只是顯示問題,點擊OK還是會把frameworks路徑添加進去的.
如果還有代碼跳轉錯誤,請仿照上面的步驟將相應代碼的路徑或jar文件添加到其Dependencies標簽頁中即可.
五、DEBUG源碼
可以通過給剛導入的工程在'Moles'中添加'Android Framework'來讓AS將它作為一個Android工程,從而方便調試代碼.
可以來添加Android Framework支持.
在代碼中加斷點,然後選擇'Run'->'Attach debugger to Android process'
在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.
六、其它
代碼中很多地方提示Call requires API Level x.... 出現這個問題是因為AS將工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.
只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
J. Android 怎樣添加對應的許可權UID,使用 property
1.首先在源代碼根目錄(src下)下創建一個名為netconfig.properties的文件(也可以在其他目錄下)。
2.打開netconfig.properties文件,在該文件中添加下列代碼.
Java代碼:
#該處為注釋
IP=192.168.1.111
PORT=3535
MSG=這是一個很長的字元串,<br>我們可以使其換行 \
一行顯示不下時,<br>可以分行顯示。
#該處為注釋
IP=192.168.1.111
PORT=3535
MSG=這是一個很長的字元串,<br>我們可以使其換行 \
一行顯示不下時,<br>可以分行顯示。
說明:上面代碼中,#為配置文件中的注釋,而在配置文件中,可以使用<br>等進行格式處理,在配置文件中,如果某個屬性過長,一行不能輸入完全是,可以通過 \ 通知系統,下一行同樣為該屬性的值。
3.之後創建一個工具類Utils類,其代碼如下所列。
**
* @description: 工具類
* @version 1.0
* @created on 2010-12-3 下午02:39:52
*/
public class Utils {
/**
* 得到netconfig.properties配置文件中的所有配置屬性
*
* @return Properties對象
*/
public static Properties getNetConfigProperties() {
Properties props = new Properties();
InputStream in = Utils.class.getResourceAsStream("/netconfig.properties");
try {
props.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return props;
}
}
4.在需要使用配置文件中配置的屬性值時,直接調用上述方法即可,如下所示。
String IP = Utils.getNetConfigProperties().getProperty("IP");