Android模拟器设置/system为可以读写

背景介绍

在学习Android源码过程中,需要经常写入文件,来验证代码是否正确,但是,默认的Android模拟器是只读状态(只有少数几个文件夹是可以读写的),不能读写。

 

步骤

(1)使用 “emulator  -writable-system” 命令设置可写

gs@aigo:~/nvme_1T/android9.0.0_35$ emulator -kernel kernel/goldfish/arch/x86_64/boot/bzImage -system system.img -writable-system 
emulator: WARNING: Couldn't find crash service executable /home/gs/nvme_1T/android9.0.0_35/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: WARNING: system partition size adjusted to match image file (2560 MB > 800 MB)

emulator: WARNING: System image is writable
emulator: INFO: boot completed

(2)在pc终端上输入“ adb remount”命令。让模拟器以读/写方式重新装载 system/(默认情况下,它以只读方式装载)。

gs@aigo:~/nvme_1T/android9.0.0_35/out/host/linux-x86/bin$ ./adb remount
remount succeeded
gs@aigo:~/nvme_1T/android9.0.0_35/out/host/linux-x86/bin$ 

备注:如果不成功,请输入“adb root”再次尝试。

(3)输入“adb shell”进入模拟器的终端,此时就可以在system目录下创建新的文件夹。

generic_x86_64:/system # mkdir 01_test
generic_x86_64:/system # 
generic_x86_64:/system # ls | grep 01                                                                                                                                               
01_test
generic_x86_64:/system #

(4)编写demo,在模拟器上测试;

在Android源码的目录下,android9.0.0_35/external/hello,创建两个文件,分别是:Android.mk  hello.c

// Android.mk  

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := hello
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)




// hello.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char** argv)
{
	char *prog = argv[0];
	(void)argc;

	printf("hello word! %c.\n", *prog);


	return 0;
}

(4.1)在pc上编译“external/hello”目录下的 hello.c 文件,使用mmm命令。

gs@aigo:~/nvme_1T/android9.0.0_35$ mmm ./external/hello/
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
TARGET_PRODUCT=aosp_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.4.0-72-generic-x86_64-Ubuntu-18.04.5-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PQ2A.190405.003
OUT_DIR=out
============================================
ninja: no work to do.
ninja: no work to do.
No need to regenerate ninja file
No need to regenerate ninja file
[100% 6/6] Install: out/target/product/generic_x86_64/system/bin/hello

#### build completed successfully (4 seconds) ####

gs@aigo:~/nvme_1T/android9.0.0_35$ 

生成的 hello 文件在 “out/target/product/generic_x86_64/system/bin/” 目录下。

(5)将步骤(4)中的hello文件,拷贝到模拟器的 system/01_test 目录下,运行 hello,如下:

generic_x86_64:/system/01_test # ls
hello 
generic_x86_64:/system/01_test # 
generic_x86_64:/system/01_test # ./hello                                                                                                                                            
hello word! ..
generic_x86_64:/system/01_test # 

备注,如果执行命令,报权限的错误,请使用命令“ chmod 777 hello”修改权限。

到此,结束!

 

参考

从命令行启动模拟器

其中:有几个非常好用的命令:

(1) -kernel filepath 

使用特定的linux内核,当自己编译内核的时候,指定指定的内核,就使用这个命令,如:

emulator -kernel kernel/goldfish/arch/x86_64/boot/bzImage 

(2) -show-kernel

在终端窗口中显示内核调试消息

emulator -kernel kernel/goldfish/arch/x86_64/boot/bzImage -show-kernel

(3) -verbose

将模拟器初始化消息输出到终端窗口。此命令,可以查看emulator的默认配置参数,例如默认使用的linux内核文件;

gs@aigo:~/nvme_1T/android9.0.0_35$ emulator -verbose | grep kernel
emulator: autoconfig: -kernel /home/gs/nvme_1T/android9.0.0_35/out/target/product/generic_x86_64/kernel-ranchu
  kernel.path = /home/gs/nvme_1T/android9.0.0_35/out/target/product/generic_x86_64/kernel-ranchu

由上面的命令,可以知道使用的linux内核的路径。

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值