我想获取应用程序的UID,我有应用程序包名称,我希望它在C中。
是否有任何API返回与源中给定包相关的UID?在什么课程中,它的要求是什么?
答案 0 :(得分:2)
您可以使用Process.myUid()在Java中执行此操作。
在原生时,您可以使用getuid(),包括unistd.h
和sys/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);