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了。



关于往安卓模拟器中复制文件的问题

最近在做图片的显示的时候,需要王安卓模拟器的内部存储器中复制素材,发现直接粘贴是没有作用的,目前的解决办法就是打开然后点击右上角的push file 而且要选择对的文件夹,首先选择的是这个文件夹是...
  • qq_28483283
  • qq_28483283
  • 2016年03月05日 14:17
  • 2232

从PC中向Android模拟器中复制文件

首先打开一个DOS命令窗口,最好定位到你的音乐文件存放的目录(等下添加文件时可以少输几个字符)。所有安装程序和添加的文件都是放在模拟器的 sdcard目录下,如果直接添加文件,以后文件多了会显得乱,所...
  • shexinwei
  • shexinwei
  • 2011年09月30日 18:18
  • 5996

把外部文件拷贝的AVD安卓模拟器上的sdcard上,并且在AVD中浏览sdcard的文件

首先,实现这一切的大前提是,你的AVD安卓模拟器,在启动之前,有设置好sdcard的大小,如下图。同时,你的AVD安卓模拟器,要处于启动状态。否则无法执行如下的操作。 这里以《【Androi...
  • zerokkqq
  • zerokkqq
  • 2017年03月21日 22:58
  • 914

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

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

Java多线程产生死锁的原因和解决方法

一般造成死锁必须同时满足如下4个条件:  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源; ...
  • hongtashan11
  • hongtashan11
  • 2011年05月24日 20:11
  • 1400

Android使用第三方模拟器开发调试app

厌倦了AVD的各种bug和启动过慢的毛病,现在开发软件除了真机调试外又多了一种选择,使用第三方的模拟器,目前常见的第三方Android模拟器有BlueStacks,靠谱助手等, 本文使用bluesta...
  • qq379454816
  • qq379454816
  • 2015年10月26日 13:09
  • 85647

Android 调试之模拟器之困!

近日调试android,需要用到模拟器,一个个尝试过来,最终得到了最佳的方式.  前提条件:如前文平台搭建好后,并已正常生成APK. 环境:EClipse+jdk+adt 1, android 自带...
  • snowbird13
  • snowbird13
  • 2016年01月02日 11:47
  • 363

Android——ForceClose

有时候一些异常可能是不可避免或者是我们还未预测到,这时候程序会强行关闭,即平常所说的forceclose弹窗。 1.出现原因    导致出现Force Close的原因有很多,常见的有比如NullP...
  • ls5718
  • ls5718
  • 2016年07月08日 09:40
  • 276

不能将 类型的值 分配到 类型的实体

参考: http://bbs.csdn.net/topics/391071992
  • qing101hua
  • qing101hua
  • 2016年10月22日 10:49
  • 1759

调试Android程序,不使用模拟器,无需数据线真机调试的方法

Android 调试 模拟器 TCP/IP ADB网络来连接设备
  • u012369153
  • u012369153
  • 2016年10月26日 21:13
  • 1092
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android模拟器中,不能将文件拷贝到的/system分区的原因,以及自动化解决方法
举报原因:
原因补充:

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