将Android PackageManager中的uid与ls -l中的uid进行比较

时间:2013-06-11 22:36:51

标签: android uid

我怀疑我收到的一些错误报告(无法打开数据库,或者是Context.getFilesDir()返回的null)是由于底层的Linux权限不好;我看过一些引用说有时Android应用程序进入一个糟糕的状态,其中应用程序的数据目录的所有者是与分配给应用程序的UID不同的UID。

所以在我使用的工作设备上

adb shell
run-as my.package.name
ls -lR

并得到了UID为u0_a29。 我还运行了这段代码:

PackageManager pm = getPackageManager();
ApplicationInfo packageInfo = pm.getApplicationInfo("my.package.name", 0);
Log.d("UIDTEST", "Package " + packageInfo.packageName +
    " has uid " + packageInfo.uid);

并获得了10029的UID。

据推测,这些实际上是相同的价值,看看应用程序在这个设备上的工作方式,但这里的实际关系是什么?它是“取最后2个字符,丢弃其余字符,并根据你的方式前置u0_a或100”?因为这看起来很奇怪。 a29看起来像十六进制,但当然只有2601.我想在将代码部署到现场之前了解这一点,以尝试从破损的安装中捕获这些信息。

1 个答案:

答案 0 :(得分:2)

u0_a29是用户名称,而不是UID。在桌面Linux发行版上,您会看到benkcmmurphy

id命令显示运行run-as环境的用户ID和用户名。