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

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

2013-10-9 21:51
25869
对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

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年秋季班火热招生!!

收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 1083
活跃值: 活跃值 (662)
能力值: ( LV12,RANK:480 )
在线值:
发帖
回帖
粉丝
熊猫正正 活跃值 9 2013-10-9 23:20
2
0
看一看,顶一顶
雪    币: 21
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zorodey 活跃值 2013-10-10 10:01
3
0
这算是解除了对sdk目录下的system.img的锁定吗?!那以后它自动引用的应该就是avd下面的system.img了吧!!
雪    币: 4225
活跃值: 活跃值 (445)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangyalei 活跃值 2013-10-10 10:05
4
0
以前为此也困惑过好久,好像最后是直接编辑img加入文件解决的,谢谢版主提供的方法
雪    币: 1367
活跃值: 活跃值 (156)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 活跃值 6 2013-10-10 10:14
5
0
对,之后就用的avd下的system.img,而不是SDK下的了。
雪    币: 5627
活跃值: 活跃值 (843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhczf 活跃值 2013-10-11 15:15
6
0
来支持楼主分享技术细节,很好的参考资料
雪    币: 74
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
windflyer 活跃值 2013-10-13 20:29
7
0
我一般用uyaffs和mkyaffs2image对android的img进行修改:

https://code.google.com/p/yafuse/downloads/list
雪    币: 48
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dreamasm 活跃值 2014-6-3 18:35
8
0
你好,请问下android sdk怎么解除root?模拟器本来就自带root权限。
雪    币: 8589
活跃值: 活跃值 (375)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无边 活跃值 2015-8-19 07:54
9
0
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)
雪    币: 9
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
edwardlp 活跃值 2015-8-21 11:57
10
0
用全路径看看
雪    币: 8589
活跃值: 活跃值 (375)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无边 活跃值 2015-8-21 23:41
11
0
~/.android/avd/root.avd/system.img
这个就是完整路径
雪    币: 494
活跃值: 活跃值 (25)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
鬼谷子c 活跃值 1 2016-7-18 16:36
12
0
不是完整路径的,加上 /home/user/.android/avd 这样了才可以的。
雪    币: 5
活跃值: 活跃值 (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
影子不寂寞 活跃值 2016-7-26 08:54
13
0
谢谢楼主分享
雪    币: 140
活跃值: 活跃值 (237)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 活跃值 1 2016-7-26 10:16
14
0
之后启动还是得用
emulator -avd root -qemu -nand system,size=0x1f400000,file=~/.android/avd/root.avd/system.img,才可以。
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我是风景 活跃值 2016-9-7 10:54
15
0
挂载system读写还行,如果需要root,还有一个更简便得方法,现在一键root工具那么多,这就很方便我们了,我下载了一个kingroot安装到模拟器,就直接获取到了root权限。
游客
登录 | 注册 方可回帖
返回