首页
社区
课程
招聘
[分享]修改Android模拟器的system分区,以及加入SuperSU
发表于: 2013-10-9 21:51 28476

[分享]修改Android模拟器的system分区,以及加入SuperSU

2013-10-9 21:51
28476

对Android的模拟器,如果要修改其system分区里的文件,除了remount之外,还需要对数据进行持久化——因为默认情况下emulator会以只读的形式加载system.img,即便remount之后对其进行的修改也不会实际被保存下来。

网络上提到多种解决这一持久化问题的方案。例如[1],将/system拷贝至清空后的/data分区,然后将相应的userdata-qemu.img改名为system.img。以及[2],对live的/system,通过yaffs工具将其dump为一个镜像文件。这些方法都比较复杂,下面介绍一种简单的方法,来自[3]。

1. 创建一个AVD,在这个例子里,我们用Android 4.2.2,命名为root。

2. 将SDK下这个系统的system.img文件拷贝至AVD的目录下一份,例如,在这里:

$ cp adt-bundle-mac/sdk/system-images/android-17/armeabi-v7a/system.img ~/.android/avd/root.avd/

3. 手工指定挂载参数地启动它:

$ emulator -avd root -qemu -nand system,size=0x1f400000,file=~/.android/avd/root.avd/system.img

其中,0x1f400000是指给/system分区500MB的空间。

4. 系统启动后,adb remount一下,然后通过adb mount可以看到system分区已经变为rw了。

5. 现在可以对/system分区做希望的修改了。

6. 修改完成后,关掉模拟器。之后正常启动即可:

$ emulator -avd root

之后如果再要对system做修改,重复第3-6步即可。

嗯,从AVD的名字大家已经可以看出来了,我是想在里面加个root。方法是:

1. 下载Chainfire的SuperSU的UPDATE zip包[4],并解压缩。

2. 在上述第5步,执行以下命令:

$ adb push arm/su /system/xbin/
$ adb chmod 06755 /system
$ adb chmod 06755 /system/xbin/su
$ adb install common/Superuser.apk

3. 在模拟器里,进入SuperSu,会提示更新二进制文件,选择常规方法即可。

参考链接

[1] dc8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4D9L8r3g2F1j5$3y4Z5i4K6u0W2N6$3!0J5k6s2m8J5k6i4y4K6i4K6u0W2j5$3!0E0i4K6u0r3x3U0l9I4x3W2)9J5c8U0l9J5i4K6u0r3x3U0W2Q4x3V1k6D9k6h3q4J5L8W2)9J5k6s2c8G2i4K6u0V1M7X3!0G2N6q4)9J5k6r3q4F1k6s2u0G2K9h3c8Q4x3X3c8#2M7$3W2F1k6#2)9J5k6r3g2E0N6h3I4S2N6r3!0J5i4K6u0r3
[2] defK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2@1K9r3g2U0L8$3u0J5j5h3c8W2L8W2)9J5k6h3y4G2L8g2)9J5c8U0t1H3x3e0u0Q4x3V1j5H3y4W2)9J5c8X3#2S2K9$3W2F1k6#2)9J5k6s2m8W2M7Y4y4A6M7%4c8W2L8Y4c8Q4x3X3c8U0K9r3q4F1k6$3g2K6i4K6u0V1N6r3!0Q4x3X3c8S2L8X3c8J5L8$3W2V1i4K6u0W2K9s2c8E0L8l9`.`.
[3] 418K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1j5h3y4C8L8%4k6W2M7X3k6D9L8%4N6Q4x3X3g2U0L8$3#2Q4x3V1k6I4N6h3g2K6N6r3W2G2L8Y4y4Q4x3V1j5I4y4e0b7I4y4K6p5H3y4g2)9J5c8X3k6G2M7X3y4A6L8X3N6Q4x3X3c8@1K9r3g2Q4x3X3c8S2L8X3c8J5L8$3W2V1i4K6u0V1k6h3#2#2L8r3q4@1L8%4u0Q4x3X3c8@1L8#2)9J5k6s2y4@1L8%4u0W2i4K6u0V1j5$3S2S2L8X3N6W2M7#2)9J5k6s2c8G2i4K6u0V1M7%4W2K6N6r3g2E0
[4] b56K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5$3S2S2K9h3&6X3K9i4u0W2i4K6u0W2k6i4g2Q4x3V1k6K6N6i4m8W2M7Y4y4#2


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (14)
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
2
看一看,顶一顶
2013-10-9 23:20
0
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这算是解除了对sdk目录下的system.img的锁定吗?!那以后它自动引用的应该就是avd下面的system.img了吧!!
2013-10-10 10:01
0
雪    币: 28827
活跃值: (6682)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
以前为此也困惑过好久,好像最后是直接编辑img加入文件解决的,谢谢版主提供的方法
2013-10-10 10:05
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
5
对,之后就用的avd下的system.img,而不是SDK下的了。
2013-10-10 10:14
0
雪    币: 12038
活跃值: (18892)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
来支持楼主分享技术细节,很好的参考资料
2013-10-11 15:15
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2013-10-13 20:29
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你好,请问下android sdk怎么解除root?模拟器本来就自带root权限。
2014-6-3 18:35
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
emulator -avd root -qemu -nand system,size=0x1f400000,file=~/.android/avd/root.avd/system.img
执行后出错
NAND: could not open file ~/.android/avd/root.avd/system.img, No such file or directory
请问这个怎么解决呢(system.img已经复制到该目录,chmod 777)
2015-8-19 07:54
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
用全路径看看
2015-8-21 11:57
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
~/.android/avd/root.avd/system.img
这个就是完整路径
2015-8-21 23:41
0
雪    币: 507
活跃值: (420)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
不是完整路径的,加上 /home/user/.android/avd 这样了才可以的。
2016-7-18 16:36
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢楼主分享
2016-7-26 08:54
0
雪    币: 163
活跃值: (1874)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
之后启动还是得用
emulator -avd root -qemu -nand system,size=0x1f400000,file=~/.android/avd/root.avd/system.img,才可以。
2016-7-26 10:16
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
挂载system读写还行,如果需要root,还有一个更简便得方法,现在一键root工具那么多,这就很方便我们了,我下载了一个kingroot安装到模拟器,就直接获取到了root权限。
2016-9-7 10:54
0
游客
登录 | 注册 方可回帖
返回