私が受け取ったエラー レポート (データベースを開けない、または Context.getFilesDir() によって null が返された) の一部は、基盤となる Linux パーミッションが不適切であることが原因ではないかと疑っています。アプリケーションのデータ ディレクトリの所有者が、アプリケーションに割り当てられたものとは異なる UID である場合に、Android アプリが悪い状態になることがあるといういくつかの参考文献を見てきました。
だから私が使用した作業デバイスで
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 は 16 進数のように見えますが、もちろん 2601 しかありません。コードを現場に展開して、壊れたインストールからこの情報を取得しようとする前に、これを理解したいと思います。