获取Android应用程序的Linux UID

获取Android应用程序的Linux UID,android,linux,uid,Android,Linux,Uid,我希望能够获得已安装Android应用程序的Linux UID(用户ID) 摘自:“在安装时,Android为每个软件包提供一个不同的Linux用户ID。在该设备上软件包的生命周期内,该标识保持不变。” 有办法检索此UID吗?使用PackageManager和getApplicationInfo() ‍packages.xml文件存在于/data/system packages.list文件存在于/data/system 包含已安装的应用程序及其相应UID的列表。adb shell dumps

我希望能够获得已安装Android应用程序的Linux UID(用户ID)

摘自:“在安装时,Android为每个软件包提供一个不同的Linux用户ID。在该设备上软件包的生命周期内,该标识保持不变。”


有办法检索此UID吗?

使用
PackageManager
getApplicationInfo()
  • packages.xml
    文件存在于
    /data/system
  • packages.list
    文件存在于
    /data/system

包含已安装的应用程序及其相应UID的列表。

adb shell dumpsys package com.example.myapp | grep userId=正如Commonware已经编写的一样,您可以使用
PackageManager
获取UID

PackageManager packageManager = getPackageManager();
try {
    applicationId = String.valueOf(packageManager.getApplicationInfo("com.example.app", PackageManager.GET_META_DATA));
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
下面是一个例子:

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);

使用
android.os.Process.myUid()
直接获取调用应用程序的UID


查找自己的UID不需要使用PackageManager。

是的,我错过了ApplicationInfo类中的最后一个字段。谢谢:)您知道如何从android的linux内核获取应用程序的uid吗?@user489152如果应用程序当前有一个打开的进程,那么通过内核导出的/proc/pid结构执行的
ps
命令将显示该进程的uid。