@weather 晴時々曇
@title あさ〜
@category 生活
@s
0500充電開始、1200再起動。
@title 一日
@category 生活
@s
「500gのごはんにかける適量なカレールーが何gか把握したことがないな・・・」と思いつついろいろ。
@s
まかべさんと上海小咆に行く話など。
@s
夕飯を食いに出たらTVのeva破に出遅れ。BDで遅延参加しつつ、Nexus7の4.2化など。
@title Android4.2マルチユーザー
@category Android
@s
ということで、4.2で導入されたマルチユーザーの動作検証など。とりあえずセカンダリユーザーでnicoWnnGが落ちるのを確認。
@s
LogCatで追ってみると、SQLite DBの新規オープンで例外が出ている。何してるか追うにはrootする必要があるなーということで、意を決してNexus7のunlockとroot化作業。
@ul
ユーザーデータ実体は /data/data/[package]/ から /data/user/[user]/[package]/ へ変更になってて、そこから /data/data/[package]/ へリンクされるようになっている。
ただし、 /data/data/[package]/ そのものはリンクじゃないので、 /data/data/[package]/ へ書いちゃったデータはプライマリユーザーしか読めないし、セカンダリユーザーはそこへのアクセスができない。nicoWnnGは /data/data/[package]/ にユーザー辞書データを設置する構造になっているため、サブユーザーではユーザー辞書データの作成に失敗して落ちる、ということが判明。
対策は、 /data/data/[package]/ へ保存しないといけないようなデータは「Context#getDir(subdir)」か「Context#getDatabasePath()」あたりで得られるフォルダを使うようにすること。なお前者は /data/user/[user]/[package]/package_subdir 、後者は /data/user/[user]/[package]/Databases を返す。
@s
おまけ。 /sdcard/ や /mnt/sdcard/ は /mnt/shell/emulated/[user]/ をリンクするようになっており、Environment#getExternalStorageDirectory()やEnvironment#getExternalStoragePublicDirectory()はユーザー個別のフォルダを返すようになっている。Nexus7は「ファイルシステムにmount/unmount可能な外部ストレージ(SDカードなど)」がないため、「ユーザー間で共有できるデータ置き場」は内部にはなさそう。