【问题标题】:Obtain the Linux UID of an Android App获取Android App的Linux UID
【发布时间】:2011-09-01 16:18:41
【问题描述】:

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

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

有没有办法检索这个 UID?

【问题讨论】:

    标签: android linux uid


    【解决方案1】:

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

    使用 PackageManager 不是必须找到自己的 UID。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        PackageManager packageManager = getPackageManager();
        try {
            applicationId = String.valueOf(packageManager.getApplicationInfo("com.example.app", PackageManager.GET_META_DATA));
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        

        【讨论】:

          【解决方案4】:
          • /data/system 中的 ‍packages.xml 文件
          • /data/system 中存在的 packages.list 文件

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

          【讨论】:

            【解决方案5】:

            adb shell dumpsys package com.example.myapp | grep userId=

            【讨论】:

              【解决方案6】:

              使用PackageManagergetApplicationInfo()

              【讨论】:

              • 是的,我错过了 ApplicationInfo 类中的最后一个字段。谢谢你:)
              • 你知道我们如何从android的linux内核中获取App的uid吗?
              • @user489152 如果应用程序当前有一个打开的进程,那么遍历内核导出的 /proc/pid 结构的ps 命令将显示该进程的 UID。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-12-20
              • 1970-01-01
              • 1970-01-01
              • 2012-05-13
              • 2016-09-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多