1. Android 9.0 环境搭建
1.1 安装openJDK8
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jre //安装jdk后显示已安装
java -version //验证java安装版本
注:我java环境变量没有设置,如需要请自行设置。
1.2 安装Android 9 依赖
安卓官网有搭建环境的设置:
https://source.android.google.cn/docs/setup/start/requirements?hl=zh-cn
1). 您必须先安装 OpenJDK、Make、Python 3 和 Repo,然后才能使用 AOSP;
2). 需安装 Ubuntu 18.04 或更高版本所需的软件包;
我在ubuntu22.04安装下面依赖:(sudo apt-get install xxx)
2. MTK Android 9.0 编译
source build/envsetup.sh
lunch xxx //根据具体配置
make -j8 //线程数取决电脑或服务器性能
3. MTK Android 9.0 编译问题
问题1:报错Can’t locate Switch.pm in @INC
$ cpan
cpan[1]> install Switch 输入cpan后会进入输入命令行,直接敲install Switch即可
cpan[2]> exit 输入exit退出即可
sudo apt-get install libswitch-perl
注1:libswitch-perl和cpan>install Switch可能重复了,我是这两步都执行了;
注2:安装完退出终端,重新进入;
参考:https://blog.csdn.net/CrazyZik/article/details/117163973
问题2:
FAILED: out/host/linux-x86/obj/EXECUTABLES/dtc_intermediates/dtc-lexer.c
/bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/host/linux-x86/obj/EXECUTABLES/dtc_intermediates/dtc-lexer.c external/dtc/dtc-lexer.l"
flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted
尝试1:build/envsetup.sh脚本添加export LC_ALL=C;并在makefile中注释 unexport LC_ALL 无效;
尝试2:export LC_CTYPE=C.UTF-8 无效
尝试3:重新编译flex-2.5.39,可以解决这个错误。
具体参考博主:https://blog.csdn.net/qq_32607609/article/details/128318438
问题3:
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
搜索博主文章有两个解决方法:https://blog.csdn.net/xiandang8023/article/details/124750391
方法1:降低gcc版本,ubuntu22.04是gcc-11 需要降低到gcc-9。这个方法没有试,由于服务器还需要编译其他模块,所以没有降低gcc版本;
方法2:相关代码中‘YYLTYPE yylloc’ 修改为 ‘extern YYLTYPE yylloc’ 有效;下面是修改后文件状态。
然后经过4个小时,mtk代码就编译成功了,记录一下。