android11源码编译及模拟器安装

编译环境为ubuntu 20
编译的android版本为11

该内容大部分是从网上找的,自己一步一步进行的

这里不对网上比较常见的错误进行描述,很容易百度出来

1、下载repo工具
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > repo
chmod a+x repo
android11源码编译及模拟器安装_第1张图片

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

android11源码编译及模拟器安装_第2张图片

大概1-2小时的时间下载,wait wait wait!!!

3、配置编译环境
source build/envsetup.sh
lunch sdk_phone_armv7
/关于lunch参数可以直接搜索build目录,里面有详细内容,比直接lunch后提示的要多很多,搞不清为什么会这样设计,没深究/

android11源码编译及模拟器安装_第3张图片

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

android11源码编译及模拟器安装_第4张图片

source ~/.bashrc

2)如何运行模拟器
因为已经配置过环境,直接运行emulator命令即可,如下:

android11源码编译及模拟器安装_第5张图片

比较悲催,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

android11源码编译及模拟器安装_第6张图片

至此,模拟器实际运行起来了。

在命令行执行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/目录下,实际上如果对文件系统目录结构足够了解,可以找到更加合适的存放点,当前我还只是个小白,就没有去折腾这方面了,现有条件也能满足我的开发需求。

整个过程完成后,再对源码进行一下文件系统打包即可得到模拟器需求的环境。

android11源码编译及模拟器安装_第7张图片

通过上面内容,可以看出,yuerin可执行程序已经在文件系统中包含了,执行如下:

android11源码编译及模拟器安装_第8张图片

至此,所有流程处理完成,可按实际情况进行调试了。

你可能感兴趣的:(Android11,android,git,android,studio)