android4.2及之后开启手机多用户功能的笔记
2015-04-14 15:40
489 查看
*上周同时拿到了android4.2的SDK和源代码,启动了个手机版的模拟器,结果发现多用户用不起来,后来查看源代码发现卡在一个地方:
* Returns the maximum number of users that can be created on this device. A return value
* of 1 means that it is a single user device.
* @hide
* @return a value greater than or equal to 1
*/
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的build,任你怎么折腾都不能用multi-user这个新feature,除非把buildid改掉,然后看呆了两个关键字:fw.max_users和multiuserMaximumUsers
于是去源代码搜索一把:
./frameworks/base/core/res/res/values/symbols.xml:295:
./frameworks/base/core/java/android/os/UserManager.java:335: Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers));
./device/asus/grouper/overlay/frameworks/base/core/res/res/values/config.xml:233: 8
./device/asus/tilapia/overlay/frameworks/base/core/res/res/values/config.xml:236: 8
./device/samsung/manta/overlay/frameworks/base/core/res/res/values/config.xml:169: 8
嘿嘿,如果是asus的grouper(Nexus 7)和tilapia,还有samsung的manta的话,是支持多用户的,最多8个,其余的暂时免谈,那么想要在模拟器上玩多用户怎么办?
笔者手动搞了个办法,有看到fw.max_users这个system property吗?办法来了
启动android4.2的模拟器,然后连上adb
在adb shell下敲如下命令:
不过这个方法只是临时之策,重启模拟器(snapshot的除外)后。发现又不能添加用户了(除非再做一次上面的事情),怎么办?笔者想过把fw.max_users写到/data/local.prop里面发现没作用,后来看源代码发现
宏ALLOW_LOCAL_PROP_OVERRIDE阻止了读取/data/local.prop里面的内容。
好吧,那就只能从别的prop文件做文章了,或者修改config.xml
/default.prop (改这个文件只需重做ramdisk.img)
/system/build.prop (改这个文件要重做system.img)
/system/default.prop (改这个文件要重做system.img)
/data/local.prop (模拟器不支持)
/data/property (只支持读persist开头的system property)
config.xml (改这个文件要重做system.img)
选择改代价最小的/default.prop吧
重启模拟器,发现是不是可以添加/切换用户了?
转载自看雪论坛:
标 题: 【原创】如何给android4.2模拟器开启多用户
作 者: figofuture
时 间: 2012-11-16,22:54:07
链 接: http://bbs.pediy.com/showthread.php?t=158773
*
vi frameworks/base/core/java/android/os/UserManager.java
/*** Returns the maximum number of users that can be created on this device. A return value
* of 1 means that it is a single user device.
* @hide
* @return a value greater than or equal to 1
*/
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的build,任你怎么折腾都不能用multi-user这个新feature,除非把buildid改掉,然后看呆了两个关键字:fw.max_users和multiuserMaximumUsers
于是去源代码搜索一把:
grep -r -n fw.max_users .
./frameworks/base/core/java/android/os/UserManager.java:334: return SystemProperties.getInt(“fw.max_users”,grep -r -n multiuserMaximumUsers .
./frameworks/base/core/res/res/values/config.xml:937: 1./frameworks/base/core/res/res/values/symbols.xml:295:
./frameworks/base/core/java/android/os/UserManager.java:335: Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers));
./device/asus/grouper/overlay/frameworks/base/core/res/res/values/config.xml:233: 8
./device/asus/tilapia/overlay/frameworks/base/core/res/res/values/config.xml:236: 8
./device/samsung/manta/overlay/frameworks/base/core/res/res/values/config.xml:169: 8
嘿嘿,如果是asus的grouper(Nexus 7)和tilapia,还有samsung的manta的话,是支持多用户的,最多8个,其余的暂时免谈,那么想要在模拟器上玩多用户怎么办?
笔者手动搞了个办法,有看到fw.max_users这个system property吗?办法来了
启动android4.2的模拟器,然后连上adb
在adb shell下敲如下命令:
setprop fw.max_users 8 (最大支持的用户数,数字你想多大设多大)
stop (停掉android java虚拟机)
start (启动android java虚拟机)
然后用pm/am命令添加/切换用户是不是发现已经可以工作了?不过这个方法只是临时之策,重启模拟器(snapshot的除外)后。发现又不能添加用户了(除非再做一次上面的事情),怎么办?笔者想过把fw.max_users写到/data/local.prop里面发现没作用,后来看源代码发现
宏ALLOW_LOCAL_PROP_OVERRIDE阻止了读取/data/local.prop里面的内容。
vi system/core/init/property_service.c
static void load_override_properties() {ifdef ALLOW_LOCAL_PROP_OVERRIDE
const char *debuggable = property_get("ro.debuggable"); if (debuggable && (strcmp(debuggable, "1") == 0)) { load_properties_from_file(PROP_PATH_LOCAL_OVERRIDE); }
endif /* ALLOW_LOCAL_PROP_OVERRIDE */
}好吧,那就只能从别的prop文件做文章了,或者修改config.xml
/default.prop (改这个文件只需重做ramdisk.img)
/system/build.prop (改这个文件要重做system.img)
/system/default.prop (改这个文件要重做system.img)
/data/local.prop (模拟器不支持)
/data/property (只支持读persist开头的system property)
config.xml (改这个文件要重做system.img)
选择改代价最小的/default.prop吧
cd /tmp
mkdir ramdisk
gzip -dc /opt/android-sdk-update-manager/add-ons/addon-google_apis-google-17/images/armeabi-v7a/ramdisk.img | cpio -i
vi default.prop
添加fw.max_users=100 (数字自己想写多大写多大)find . | cpio -o -H newc | gzip > ../ramdisk.img
将新生成的ramdisk.img替换avd下的那个,重启模拟器,发现是不是可以添加/切换用户了?
转载自看雪论坛:
标 题: 【原创】如何给android4.2模拟器开启多用户
作 者: figofuture
时 间: 2012-11-16,22:54:07
链 接: http://bbs.pediy.com/showthread.php?t=158773
*
相关文章推荐
- 举例说明BroadcastReceiver的使用方法----实现android手机开机之后显示画面的功能
- 【Android】手机地图功能——利用手机GPS获取用户地理坐标
- [转]Android笔记:Android判断用户是平板还是手机的方法
- Android项目实战--手机卫士22--卸载和分享功能的完成以及用户及系统应用的切换
- 黄聪:WordPress 多站点建站教程(一):怎样开启WordPress多站点功能,实现手机移动端主题开发,与主站用户数据共享
- Android手机用户对各大主流安全软件的“私密联系人”功能十分熟悉
- Android新手机开启日志功能(本人用的是酷派大神f2手机)
- Android新手机开启日志功能(本人用的是酷派大神f2手机)
- 在app未开启时,实现对用户进行通知提醒功能总结(添加事件到手机系统日历并设置闹钟提醒)
- [RK3399][Android7.1] 调试笔记 --- DDR动态调节功能开启
- 阅读Telephony通信功能笔记2—Android手机上网实现机制
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- 小刚的Android研究笔记~在未开启USB调试的Android手机绕过锁屏密码
- Android手机注册登录时获取验证码之后倒计时功能(知识点总结)
- 在app未开启时,实现对用户进行通知提醒功能总结(添加事件到手机系统日历并设置闹钟提醒)
- android 4.2 多用户
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- (AccessibilityService) Android 辅助功能笔记
- JS判断用户手机是IOS还是Android
- android关闭手机偷录她人功能实现(退出程序依然录像)