android模拟器中,不能将文件拷贝到的/system分区的原因,以及自动化解决方法

原创 2012年03月30日 22:38:55

某些情况下,要调试的apk需要一些共享库,而这些库要放/system/lib下才能在运行时连接到。

但android模拟器每次启动后,系统分区/system是以只读方式挂载的,不能用向/system分区拷贝文件。


事情到这里,有两种方法解决,一是重新生成system.img文件,将自己的库也打包进去,但重新打包system.img貌似需要linux环境,步骤也不少,而且每次修改共享库后都要重新打包,对于调试应用程序来说,非常不划算。


另一种,方法是将/system分区修改为可以读写的,这个可以在adb shell中通过下面的命令实现:

#mount -o remount  /dev/block/mtdblock0 /system <回车>

命令中/dev/block/mtdblock0表示/system分区实际设备,可通过mount <回车>查看。

即使把/system分区修改为可读写的,也不能向里面拷贝文件,拷贝时会报错:

failed to copy 'xxx' to '/system/xxx': Out of memory

这是因为eclipse启动模拟器时,系统分区的内容实际上是分配一块与system.img等大小的内存空间,来作为系统分区的,所以会出现内存不足的提示。这个可以用df命令查看:

/dev: 63304K total, 0K used, 63304K available (block size 4096)
/mnt/asec: 63304K total, 0K used, 63304K available (block size 4096)
/system: 77568K total, 77568K used,0K available(block size 4096)
/data: 65536K total, 26152K used, 39384K available (block size 4096)
/cache: 65536K total, 1156K used, 64380K available (block size 4096)
/mnt/sdcard: 64504K total, 1K used, 64502K available (block size 512)
/mnt/secure/asec: 64504K total, 1K used, 64502K available (block size 512)


关于/system分区内存不足也有两种解决方法,一是增大/system占用的内存,可以通过命令行启动模拟器,设置内存大小:

emulator -avd [YOUR_AVD_NAME] -partition-size 512
这里设置内存大小为512MB,启动后,remount /system分区为读写状态,就可以拷贝文件到/system分区了,如果要添加到/system分区的文件较大,可以采用这种方式,启动模拟器。

另一种方法是,删除/system分区中一些不用的文件,腾出空间,就可以向里面拷贝文件了,需要拷贝的东西较小时,可以用这种方法。


但由于上面的修改都只是在内存中,不会写到system.img中,每次重启模拟器后,这些改动都不会存在了。又需要重新修改一次,每次修改都奔波于cmd端和adb shell端,操作也不少,容易漏掉步骤。用批处理可以实现自动化处理,解决这个问题。


关于批处理一些问题可以参考在android运行脚本的注意事项http://blog.csdn.net/victoryckl/article/details/7408771

这里给出这些操作的批处理:push.bat

adb shell mount

adb shell mount -o remount /dev/block/mtdblock0 /system

adb shell /system/bin/rm /system/app/Email.*

adb shell /system/bin/rm /system/app/Mms.*

adb shell /system/bin/rm /system/app/Phone.*

adb shell /system/bin/rm /system/app/Browser.*

adb shell /system/bin/df

adb push libxxx1.so /system/lib

adb push libxxx2.so /system/lib

adb push libxxx3.so /system/lib

在启动模拟器后,运行批处理,就可以直接在eclipse中启动运行apk了。



相关文章推荐

Android emulator中的system.img,userdata.img和ramdisk.img

Android emulator中的system.img,userdata.img和ramdisk.img 1、android文件系统的结构 android源码编译后得到s...
  • htttw
  • htttw
  • 2011年09月17日 00:02
  • 5178

持久化修改Android模拟器的system分区

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

Android 把应用APK安装包放到system/app下的方法

方法一: 然后打开cmd命令编辑器,建议下载PowerCmd方便操作。 输入adb shell回车 输入su回车 输入mount -o rw,remount/system回车 再打开另外...

删除Android system目录下文件的方法

方法是使用adb shell进入系统,然后使用命令重新挂载“/system”目录为读写权限,具体操作及命令如下: 1、打开dos窗口 2、输入命名:adb shell 3、切换到ro...

mount:Read-only file system Android手机不能挂载读写,终极解决方案

以荣耀6手机为例 首先要保证你的手机已经root了。 然后保证你有一个终端模拟器,比如电脑版的adb shell。 第一步进入命令界面,输入su 回车 1|root@hwH60:/ $ s...
  • lsmsrc
  • lsmsrc
  • 2015年07月21日 18:12
  • 9300

在模拟器上创建虚拟的SD卡以及文件拷贝到SD卡

一、在模拟器上创建虚拟的SD卡以及文件拷贝到虚拟的SD卡,操作步骤如下 1.在命令CMD下,出入android SDK下的tools目录下 eg:F:\study\Android\soft\and...

将文件放到Android模拟器的SD卡中的两种解决方法

两种方式: 一、窗口界面操作 1、打开DDMS页面 2、打开File Explorer页,如果没有,在Window --> Show View -->File Explorer 3、一般就在mnt -...

安卓开发模拟器运行时报错原因以及解决方法

小可是搞移动互联网开发的,期初学习android时,发现安卓模拟器吧经常报一下错误: 问题一: WARNING: Data partition already in use. Changes wil...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android模拟器中,不能将文件拷贝到的/system分区的原因,以及自动化解决方法
举报原因:
原因补充:

(最多只允许输入30个字)