@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カードなど)」がないため、「ユーザー間で共有できるデータ置き場」は内部にはなさそう。