我怀疑我收到的一些错误报告(无法打开数据库,或者是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.我想在将代码部署到现场之前了解这一点,以尝试从破损的安装中捕获这些信息。
答案 0 :(得分:2)
u0_a29
是用户名称,而不是UID。在桌面Linux发行版上,您会看到benkc
或mmurphy
。
id
命令显示运行run-as
环境的用户ID和用户名。