【发布时间】:2011-09-01 16:18:41
【问题描述】:
我希望能够获取已安装 Android 应用程序的 Linux UID(用户 ID)。
摘自Security and Permissions:“在安装时,Android 会为每个包提供一个不同的 Linux 用户 ID。该标识在包在该设备上的整个生命周期内保持不变。”
有没有办法检索这个 UID?
【问题讨论】:
我希望能够获取已安装 Android 应用程序的 Linux UID(用户 ID)。
摘自Security and Permissions:“在安装时,Android 会为每个包提供一个不同的 Linux 用户 ID。该标识在包在该设备上的整个生命周期内保持不变。”
有没有办法检索这个 UID?
【问题讨论】:
使用android.os.Process.myUid()直接获取调用应用的UID。
使用 PackageManager 不是必须找到自己的 UID。
【讨论】:
正如 CommonsWare 已经写的,你可以使用PackageManager 来获取 UID。
这是一个例子:
int uid;
try {
ApplicationInfo info = context.getPackageManager().getApplicationInfo(
context.getPackageName(), 0);
uid = info.uid;
} catch (PackageManager.NameNotFoundException e) {
uid = -1;
}
Log.i(LOG_TAG, "UID = " + uid);
【讨论】:
PackageManager packageManager = getPackageManager();
try {
applicationId = String.valueOf(packageManager.getApplicationInfo("com.example.app", PackageManager.GET_META_DATA));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
【讨论】:
/data/system 中的 packages.xml 文件
/data/system 中存在的 packages.list 文件
包含已安装应用程序的列表及其对应的 UID。
【讨论】:
adb shell dumpsys package com.example.myapp | grep userId=
【讨论】:
使用PackageManager 和getApplicationInfo()。
【讨论】:
ps 命令将显示该进程的 UID。