AOSP:如何在c中获取给定包名的uid?

时间:2013-09-04 12:09:23

标签: android android-ndk android-source

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

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

3 个答案:

答案 0 :(得分:2)

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

在原生时,您可以使用getuid(),包括unistd.hsys/types.h

如果您想将其用于其他应用程序,请使用PackageManager并在SO上查看this answer

一般情况下,请阅读此Unix question有关UID的信息。和GID

答案 1 :(得分: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

答案 2 :(得分: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);