1

我怀疑我收到的一些错误报告(无法打开数据库,或 Context.getFilesDir() 返回 null)是由于底层 linux 权限错误造成的;我看到一些参考资料说,有时 android 应用程序会进入一个糟糕的状态,即应用程序数据目录的所有者与分配给应用程序的 UID 不同。

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

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

并获得了 u0_a29 的 UID。我还运行了这段代码:

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。在将代码部署到现场以尝试从损坏的安装中捕获此信息之前,我想了解这一点。

4

1 回答 1

2

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

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

于 2013-06-11T22:45:18.920 回答