2

我想获取应用程序的 UID,我有应用程序包名称,并且我想要它在 C 中。

是否有任何 API 返回与源中给定包相关的 UID?那么在什么级别,它的要求是什么?

4

3 回答 3

2

您可以使用Process.myUid()在 Java 中执行此操作。

在本机上,您可以在包含and时使用getuid()unistd.hsys/types.h

如果您想为另一个应用程序获取它,请使用 PackageManager 并在 SO 上查看此答案。

一般来说,阅读这个关于 UID 的Unix 问题。和 GID

于 2013-09-04T12:23:02.497 回答
1
pid_t pid;
char args[4096], path[4096];

uid = getuid();

snprintf(path, sizeof(path), "/proc/%u/cmdline", pid);
fd = open(path, O_RDONLY);
if (fd < 0) {
    return -1; 
}   
len = read(fd, args, sizeof(args));
err = errno;
close(fd);
if (len < 0 || len == sizeof(args)) {
    return -1; 
}   

printf("The package name is %s\n", args);
于 2013-10-10T08:04:28.550 回答
1

您可以参考系统标准的“PS”实现。包名称是 procfs 中的 cmdline。

完整代码位于https://android.googlesource.com/platform/system/core/+/master/toolbox/ps.c

我认为代码可能是这样的:

迭代 proc/pid/cmdline 首先找到 pid,然后执行以下操作:

sprintf(statline, "/proc/%d/stat", pid);
struct stat stats;
stat(statline, &stats);
uid = stats.st_uid
于 2013-09-04T12:30:48.800 回答