ICSから一部機能が搭載されはじめ、JB4.1では(隠された)UIが存在しましたがユーザを追加することはできませんでした。
●JB4.1でマルチユーザ機能の蓋開けを行う方法は下記。
1. 端末で利用できるユーザ数の上限を引き上げる
$ setprop fw.max_users 22. ユーザを作成する
$ pm create-user <userName>3. ユーザを切り替える
[power]キー長押しの電源オプションにユーザが追加されているのでこれを選択(下図)
●JB4.2のエミュレータでマルチユーザ機能を確認する方法は下記。
JB4.2エミュレータでは、端末形状に関わらず fw.max_users値 が1で定義されています。
このため、マルチユーザ機能が蓋閉めされている状態です。
※JB4.2標準ではタブレットのみマルチユーザ機能がONになる
定数定義はframeworks/base/core/res/res/values/config.xmlのconfig_multiuserMaximumUsers
JB4.2エミュレータでマルチユーザ機能を確認するためには、ユーザ数の上限を引き上げる必要があります。
$ setprop fw.max_users 2上記システムプロパティを編集すれば、マルチユーザ管理に必要なUIが表示されるようになります。
マルチユーザ環境下でのデータフォルダの扱い
下記はシングルユーザ時とマルチユーザ時のデータフォルダの扱いの違いです。●シングルユーザ時
/data/data/。。。
●マルチユーザ時
ユーザを1名追加した後のデータフォルダ状態。
・ユーザ状態
Primary : 初期ユーザ
newOne : 追加したユーザ
・Primaryユーザ用ディレクトリ
/data/data/。。。
/data/user/0/。。。
・newOneユーザ用ディレクトリ
/data/user/10/。。。
/data/userディレクトリに各ユーザ用のデータフォルダが作成される。
Primaryユーザ用のディレクトリは2つあるわけではなく、/data/user/0が/data/dataへのシンボリックリンクとして扱われます。
$ ls -la /data/user lrwxrwxrwx root root 2013-02-05 10:11 0 -> /data/data/ drwxrwx--x system system 2013-02-06 06:34 10
蛇足
○設定アプリの[ユーザ]項目の表示/非表示判定箇所com.android.settings.Settings.updateHeaderList(List<Header>)
} else if (id == R.id.user_settings) { if (!UserHandle.MU_ENABLED || !UserManager.supportsMultipleUsers() || Utils.isMonkeyRunning()) { target.remove(i); // [ユーザ]項目を削除
android.os.UserManager.getMaxSupportedUsers()
public static int getMaxSupportedUsers() { // Don't allow multiple users on certain builds if (android.os.Build.ID.startsWith("JVP")) return 1; return SystemProperties.getInt("fw.max_users", Resources.getSystem().getInteger( R.integer.config_multiuserMaximumUsers)); }# どうも"JVP"から始まるビルドIDはマルチユーザ強制非対応の様子。