当前位置:   article > 正文

android11源码编译及模拟器安装_android如何把新编译的包装进模拟器中

android如何把新编译的包装进模拟器中

编译环境为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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果有部分需要使用的文件,比如音频素材、视频素材等,可以直接将素材预先放到
out/target/product/generic_x86/system/bin/目录下,实际上如果对文件系统目录结构足够了解,可以找到更加合适的存放点,当前我还只是个小白,就没有去折腾这方面了,现有条件也能满足我的开发需求。

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

在这里插入图片描述

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

在这里插入图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/236542
推荐阅读
相关标签
  

闽ICP备14008679号