编译环境为ubuntu 20
编译的android版本为11
该内容大部分是从网上找的,自己一步一步进行的
这里不对网上比较常见的错误进行描述,很容易百度出来
1、下载repo工具
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > repo
chmod a+x repo
2、下载源码
源码库是清华的。
1)下载最新源码
./repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
./repo sync
2)下载特定版本源码
1))查看特定源码标识:
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
这里选择的特定版本为android-11.0.0_r48
2))./repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r48
./repo sync
大概1-2小时的时间下载,wait wait wait!!!
3、配置编译环境
source build/envsetup.sh
lunch sdk_phone_armv7
/关于lunch参数可以直接搜索build目录,里面有详细内容,比直接lunch后提示的要多很多,搞不清为什么会这样设计,没深究/
3、开始编译
make -j16 /开始先这个进行编译,多核编译快 ,过程中会出现一次关于内存的报错,这个时候需要将参数值减少,释放内存,我设定的是make -j5/
4、开始处理模拟器
1)配置环境
export PATH=$PATH:/home/zeng/sda/android11/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/zeng/sda/android11/out/target/product/generic_x86
export ANDROID_SWT=/home/zeng/sda/android11/out/host/linux-x86/framework
source ~/.bashrc
2)如何运行模拟器
因为已经配置过环境,直接运行emulator命令即可,如下:
比较悲催,ARMV7版本的编译出来没有界面,一直黑屏,开机时有提示建议使用x86版本,说速度能提升10倍来着,但这里感觉就是压根没有起来。
这里想用ARMV7版本的主要原因是想后面在上面装第三方的APP,综合考虑,暂时不考虑第三方APP的情况了,直接尝试x86版本(其实我是先整的x86版本,再尝试的ARMV7版本 0 0)
5、直接上x86的编译:
1)source build/envsetup.sh
2)lunch sdk_phone_x86
3)编译make -j16 (如果报错就调整为make -j5)
4)编译完成添加环境变量配置:
export PATH=$PATH:/home/zeng/share/7_1_2_android/newAndroid/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/zeng/share/7_1_2_android/newAndroid/out/target/product/generic_x86
export ANDROID_SWT=/home/zeng/share/7_1_2_android/newAndroid/out/host/linux-x86/framework
5)启动模拟器
emulator
注:启动模拟器前,必须要先执行
source build/envsetup.sh
lunch sdk_phone_x86
至此,模拟器实际运行起来了。
在命令行执行adb shell能直接访问到安卓系统命令行,尝试将编写的代码导入到系统;
adb push yuerin / #提示没有权限
先整个权限:
adb root
adb push yuerin / #提示只读文件系统,无法创建文件
有在网上查资料,说重新改配置重新挂载,各种尝试都没有成功,
于是尝试将文件导入到非只读文件系统中,从系统中查看哪些目录是tmpfs
adb shell #进入系统
mount #查看当前挂载情况
根目录下的/mnt目录具备tmpfs特性,于是:
在ubuntu下执行:
adb push yuerin /mnt #提示上传成功
接下来打算执行yuerin可执行文件,报错提示,也没有权限,加了chmod权限也没有用,
看样子目录这样的环境在非原生系统可执行程序都无法正常执行。
两个方向:
1)将这个所谓的只读文件系统折腾成非只读文件系统,前面已经做过一定的尝试,没有得到有效的输出,暂不想折腾了
2)直接将需要的可执行文件及相关的依赖库,在编译文件系统时,直接打包到文件系统固件中去,
补上非只读文件系统的操作方法:
adb root && adb shell setenforce 0 && adb root && adb remount system && adb remount vendor && adb shell
adb remout failed
1. adb root
2. adb disable-verity
3. adb reboot
4. adb root
5. adb remount
如果有部分需要使用的文件,比如音频素材、视频素材等,可以直接将素材预先放到
out/target/product/generic_x86/system/bin/目录下,实际上如果对文件系统目录结构足够了解,可以找到更加合适的存放点,当前我还只是个小白,就没有去折腾这方面了,现有条件也能满足我的开发需求。
整个过程完成后,再对源码进行一下文件系统打包即可得到模拟器需求的环境。
通过上面内容,可以看出,yuerin可执行程序已经在文件系统中包含了,执行如下:
至此,所有流程处理完成,可按实际情况进行调试了。