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

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

2013-10-9 21:51
28122

对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] http://allencch.wordpress.com/2012/02/29/learn-to-root-android-using-emulator/
[2] http://blog.thecobraden.com/2012/06/making-persistent-changes-to-android.html
[3] http://stackoverflow.com/questions/15417105/forcing-the-android-emulator-to-store-changes-to-system
[4] http://download.chainfire.eu/supersu


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

收藏
免费 5
支持
分享
最新回复 (14)
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
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
雪    币: 25418
活跃值: (4772)
能力值: ( 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
雪    币: 11075
活跃值: (17602)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
来支持楼主分享技术细节,很好的参考资料
2013-10-11 15:15
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我一般用uyaffs和mkyaffs2image对android的img进行修改:

https://code.google.com/p/yafuse/downloads/list
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
活跃值: (130)
能力值: ( 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
活跃值: (1623)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//