最近需要开发一个程序不停地读取android手机的桌面,由于该程序涉及到读/dev/graphics/fb0,开发用c++,我一开始就开发一个linux程序,用android ndk交叉编译成一个可执行程序,然后上传到模拟器路径/system/sbin上,上传过程中/system/sbin': Read-only file system。adb shell到模拟器,然后su到root,然后 chmod 777/system/sbin,这个过程也还是会在chmod提示Read-only,这是由于/system/sbin在挂载的时候/system 为只读程序
adb shell到模拟器环境中后
su到root
然后执行 mount 命令
这时候有显示结果
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,nosuid,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
这里可以看出 /system 为只读 ro
此时我们需要重新mount /system
在root用户下,执行
mount -o remount,rw /dev/block/mtdblock0 /system
这个时候重新挂载了/system
再执行chmod 777 /system/sbin 这时候成功了,接着我们可以执行 adb push libs/armeabi-v7a/getscreen /system/sbin,这时候出现一个新的问题
failed to copy 'libs/armeabi-v7a/getscreen' to '/system/sbin': Out of memory
/system/sbin内存不足
我们执行程序df
#df
Filesystem Size Used Free Blksize
/dev 252M 32K 252M 4096
/mnt/asec 252M 0K 252M 4096
/mnt/obb 252M 0K 252M 4096
/system 161M 161M 0K 4096
/data 191M 5M 185M 4096
/cache 64M 1M 62M 4096
模拟器中/system中确实没有内存
解决方法:
带参数启动模拟器(根据情况适当调整分区的大小)
./emulator -partition-size 256 -avd AVDMTK