Ubuntu16.04 desktop android-4.0.1_r1的编译环境搭建
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2020-06-08,13:19:31
作者By-----Reverse-xiaoyu----博客园
Ubuntu12.04,Ubuntu14.04的环境我都有搭配过,但是适配我自己其他开发环境,我依旧采用Ubuntu16.04 desktop来创建android-4.0.1_r1的编译环境,搭建这个环境耗费了我很长时间,记录一下从我搭建Ubutnu系统开始吧
1、Ubuntu16.04虚拟机的搭建
我使用的是VMware Workstation 15中文版来创建Ubuntu16.04 desktop。
VMware Workstation 15中文版下载连接:提取码:3qnh
Ubuntu16.04 desktop:提取码:ppmx
1.1、Ubuntu16.04 的安装
点击创建新的虚拟机如下图所示:
点击下一步:
下一步:
下一步:
下一步:
下一步:先选择硬件配置
自定义硬件:博主的机器是i7:10750H CPU,16GB内存,所以给虚拟机分配的是8G 内存,8线程
网络适配器建议选择NAT模式:
主要是这几个的配置,后面 USB 控制器,声卡,打印机,显示器,就都默认配置就好了,配置完成后,点击关闭
点击完成后如下:
点击 Install Ubuntu进行安装
点击 Continue,安装过程中千万不到勾选下载更新跟安装第三方软件,否则你会因为 Ubuntu 默认源的原因,导致你的安装时间漫长无比,可以等系统安装完,进入系统更改下载源后,通过命令行去更新软件或者下载软件,请跟随我博客的脚步我带你节省最大的时间去安装。
点击 Install Now
会弹出下面一个框,继续点击 Continue
选择你的位置:这个会关系到你 Ubuntu 系统的时间,无所谓了,爱写哪写哪,反正只是虚拟机拿来做编译环境用,看时间还是可以使用大家的手机,手表看的
这个框会因为分辨率问题,窗口部分显示不全,没关系,你鼠标拖进去,是可以移动的,键盘也默认配置就OK
点击 Continue
配置计算机用户名跟密码
框不完整?鼠标可以拖动啦,分辨率显示的问题,后面系统安装完成可以修改,点击Continue开始系统的安装吧,耐心等待他安装完成就行
1.2、VMware Tools 的安装
虚拟机安装完成后,请安装 VMware Tools,它能解决 Ubuntu 终端不能粘贴复制的问题,也能解决屏幕自动适应客户端窗口大小问题
1、在虚拟机下会看到安装 VMware Tools,单击安装。
2、在虚拟机设备下出现VMware Tools这一项,点击打开,里面有一个VMwareTools-10.1.6-5214329.tar.gz
3、将这个文件复制到某个目录下,比如在 home下新建 Documents 文件夹
4、进入 Documents 解压到VMwareTools-10.1.6-5214329.tar.gz
1 cd ~/Documents
2 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz
5、进入到刚刚提取到的vmware-tools-distrib文件夹下,然后输入命令:sudo ./vmware-install.pl,然后回车。碰到yes/no 你就输入 yes,没有 yes/no 等待你就按 Enter,一路执行下去让他安装完毕就 OK 了
1 cd vmware-tools-distrib
2 sudo ./vmware-install.pl
6、安装完毕,重启虚拟机,然后你的屏幕会正常显示大小了,终端可以复制粘贴了
1.3、Ubuntu Software & updates 下载源的更新
1、点击桌面右上角,设置,点击 System Settings
2、点击 Software & Updates
3、点击 Download from:,然后点击 Other...
4、找到 China 选择阿里云,当然 China 底下的源随便你选了,我选的是 阿里 源,点击 Choose Server
5、输入你创建系统时如数的密码,点击 authenticate(证明,证实),然后就 OK 了
6、最后打开 Ubuntu 终端,更新下载源以及软件
1 sudo apt-get install update
2 sudo apt-get install upgrade
1.4、配置 vim
没有 vim 用 Ubuntu 我会很难受,所以今早把 vim 进行简单配置一下
1、使用命令 $ sudo apt-get install vim 来安装vim,安装后的vim需要进行一些配置,不然使用起来会有些不方便,比如不会自动缩进。
2、使用命令 $ vim /etc/vim/vimrc 修改vim配置文件 (修改该文件对所有用户都生效),在该文件最后添加如下代码:
1 set ai " 自动缩进,新行与前面的行保持—致的自动空格
2 set aw " 自动写,转入shell或使用:n编辑其他文件时,当前的缓冲区被写入
3 set flash " 在出错处闪烁但不呜叫(缺省)
4 set ic " 在查询及模式匹配时忽赂大小写
5 set nu
6 set number " 屏幕左边显示行号
7 "set showmatch " 显示括号配对,当键入“]”“)”时,高亮度显示匹配的括号
8 set showmode " 处于文本输入方式时加亮按钮条中的模式指示器
9 set showcmd " 在状态栏显示目前所执行的指令,未完成的指令片段亦会显示出来
10 set warn/nowarn " 对文本进行了新的修改后,离开shell时系统给出显示(缺省)
11 set ws/nows " 在搜索时如到达文件尾则绕回文件头继续搜索
12 set wrap/nowrap " 长行显示自动折行
13 "colorscheme evening " 设定背景为夜间模式
14 filetype plugin on " 自动识别文件类型,自动匹配对应的, “文件类型Plugin.vim”文件,使用缩进定义文件
15 set autoindent " 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
16 set cindent " 以C/C++的模式缩进
17 set noignorecase " 默认区分大小写
18 set ruler " 打开状态栏标尺
19 set scrolloff=5 " 设定光标离窗口上下边界 5 行时窗口自动滚动
20 set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
21 set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格,不足 4 个时删掉所有剩下的空格)
22 set tabstop=4 " 设定 tab 长度为 4
23 set wrap " 自动换行显示
24 syntax enable
25 syntax on " 自动语法高亮
注意第10、11、12行只能选一个值,不然会报错。如果有些功能自己不需要可以在行前使用符号"注释该行
上面的方法是对vim的一些基本配置,更高级的配置可以通过vim插件实现。这里只介绍 vim 的基本配置就行了,能保证使用,更高级的配置另寻百度,这里不是我们搭建安卓编译环境的重点
2、android-4.0.1_r1代码的获取
2.1、git 的安装与简单使用
git 的安装与使用并不是本文重点,但是由于安卓代码需要用 repo 来获取,下载 repo 需要先安装 git,因此附带简单描述
1 sudo apt-get install git
2 sudo apt-get install git-doc git-svn git-email git-gui gitk
其中 Git 软件包包含了大部分 Git 命令,是必须安装的软件包。而第二条语句中安装的 git-doc、git-svn、git-email、git-gui、gitk 本来也是 Git 软件包的一部分,但是因为有着不一样的软件包依赖(如更多的 perl 模组和 tk 等),所以单独作为软件包发布,如果不需要使用这些软件包,可以不安装他们。
git init :创建版本库
git status:查看文件修改
git add:将修改的文件提交至暂存区
git commit:将暂存区提交至本地仓库
git push;将本地仓库的提交提交至远端仓库
git branch:创建分支
git checkout:切换分支
具体的 git 使用请移步至其他 git 使用的博客
2.2、配置 git ssh
1、由于 GitHub 上传代码时需要 SSH 校验。因此,需要使用下面的命令在~/.ssh目录中生成一个密钥文件(id_rsa)和一个公钥文件(id_rsa.pub)
1 git config --global user.name "你的用户名"
2 git config --global user.email "你的注册邮箱"
然后我们可通过命令 git config --list,查看是否设置成功。
2、如果你的 Home 目录没有 .ssh目录,请先 mkdir ~/home/.ssh,并进入 .ssh 目录(cd ~/.ssh)
1 ssh-keygen -t rsa -C "youremail@example.com"
请将 “youremail@example.com” 换成注册 GitHub 张号时输入的 E-mail。执行上面的命令会要求做一些选择或输入
title这里取个便于自己区分记忆的名字即可,Key输入框中粘贴id_rsa.pub公钥文件中的内容。
找到id_rsa.pub文件(/home/.ssh/id_rsa.pub),将文件中的内容全部复制粘贴到Key中,点击“Add SSH key”。
如果生成的公钥、密钥错误或者设置不正确,则会输出如下的信息。
Permission denied(publickey)
fatal:The remote end hung up unexpectedly
如果一切都做得很完美,就会输出如下信息:
Hi androidguy! You've successful authenticated, but GitHub does not provide shell access
2.3、下载 repo 工具:
1 mkdir ~/bin
2 PATH=~/bin:$PATH
3 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
4 chmod a+x ~/bin/repo
上面的经过实测,是可以获取到 repo 工具的。
1 curl http://android.googlesource.com/repo > ~/bin/repo
2.4、安装python3.6以上版本
由于Ubuntu16以下默认的python版本为Python 2.7.12、Python 3.5.2,但是repo的运行环境是在python3.6以上版本,因此我们需要自己手动安装python3.6以上版本,博主这里安装的是目前最新的python3.8.1版本
配置依赖环境:
1 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev
1、下载python3.8.1版本
python3.8.1:提取码:efo1
2.解压下载的包,在这之前你可以先mv你的包到指定位置解压
1 tar -zxvf Python-3.8.1
3.进入解压目录
1 cd Python-3.8.1/
4.建立安装的目录
1 sudo mkdir -p /usr/local/python3
5.编译安装
执行这步是后面最好加上 --enable-optimizations 会自动安装pip3及优化配置
1 ./configure --prefix=/usr/local/python3 --enable-optimizations
2 make
3 sudo make install
6.删除软链接
先执行查看版本,如果有则证明软链接已存在,需要先删去以前的再重新建立
1 //这里表明我已有python3的软链接而没有pip3的软链接所以需要删除python3的软链接重新建立
2 admin@J-computer:~/Python-3.7.1$ python3 -V
3 Python 3.5.2
4
5 admin@J-computer:~$ pip3 -V
6 bash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: No such file or directory
1 rm -rf /usr/bin/python3
2 rm -rf /usr/bin/pip3
7.建立新的指向python3.7的软链接
1 #添加python3的软链接
2 ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
3 #添加 pip3 的软链接
4 ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3
8.检测版本
1 admin@J-computer:~$ python3 -V
2 Python 3.7.1
3 admin@J-computer:~$ pip3 -V
4 pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
2.5、下载源码(这里提供两种方式)
1.使用每月更新的初始化包(推荐)
由于首次同步需要下载约 30GB 数据,过程中任何网络故障都可能造成同步失败,强烈建议使用初始化包进行初始化。下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以只保留了 .repo 目录,下载后解压再repo sync 一遍即可得到完整的目录。
使用方法如下:
1 wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
2 tar xf aosp-latest.tar
3 cd AOSP ## 解压得到的 AOSP 工程目录
4 ## 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
5 ## repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 (选择版本同步)
6 repo sync ## 通常同步一遍即可得到完整目录
7 ## 或 repo sync -l 仅checkout代码
此后,每次只需运行 repo sync
即可保持同步。强烈建议保持每天同步,并尽量选择凌晨等低峰时间,上面的下载大约需要好几天,博主自己下载花费了4天4夜
查看所有分支
1 cd .repo/manifests
2 git branch -a
如果想切换到其它分支可以重新执行
1 repo init -b android-6.0.1_r63
2 repo sync
2.传统初始化方法
建立工作目录:
1 mkdir WORKING_DIRECTORY
2 cd WORKING_DIRECTORY
初始化仓库:
1 repo init -u https://android.googlesource.com/platform/manifest
2 ## repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest (也可以)
上述命令会要求Repo下载最新的Android源代码,也就是master分支,如果想下载其他指定分支
1 repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
同步Android源代码
1 repo sync
博主这里下载的是指定分支,下载的android-4.0.1_r1,这里的代码下载需要FQ,需要一个较稳定的网速,我大概是下载了1天
这里后续我会上传百度网盘链接,由于我已经编译过了,代码不干净,所以不好打包压缩,后续我再下一份纯净的代码,上传百度网盘供大家下载
下载好的代码,相关目录如下
目录名 | 描述 |
abi | 应用程序二进制接口(Application Binary Interface) |
bionic | C/C++运行时库。在NDK程序中很大一部分调用的就是这里面的程序 |
bootable |
用于安卓装载和启动程序。其中就包括著名的bootloader和recovery。bootloader是Android中唯一在Linux内核运行之前的程序。通过这段程序可以初始化硬件、建立内存空间的映射图等,总之一句话,bootloader就是为Linux内核准备合适的运行环境。 对于刷过机的读者对recovery应该很是熟悉。Recovery可以将一个压缩包(一般为zip格式)中的文件覆盖到手机内存中系统目录(主要是/system)的程序,也就是俗称的刷机程序 |
build | 用于编译Android源代码以及建立system.img、randisk.img等文件的工具 |
cts | 用于兼容性测试的工具 |
dalvik | Dalivik虚拟机的源代码 |
development | 高层的开发和调试工具 |
device | 与设备相关的代码。其中包含了moto、三星的设备相关代码 |
docs | 包含与Android源代码项目的文档和工具,如Dalivk虚拟机格式文档等 |
external | 扩展工具的源代码 |
frameworks | Android框架层源代码。也就是Android SDK(Java开发包)的源代码 |
hardware | 硬件层接口和库。HAL的源代码就在这个目录中 |
libcore | Java核心库 |
ndk | NDK的相关源代码 |
packages | 与Android系统一同发布的应用程序(apk程序)的源代码,如拍照、短信等程序都可以在这个目录中找到 |
prebuilts | Android在各种平台下编译之前要使用的工具 |
sdk | 在开发环境中使用的工具,如ddms、draw9patch、sdkmanager等 |
system | Android的基本系统 |
2.6、还原python3版本
repo 使用时需要3.6以上版本,但是当我将python3.8.1安装完后,将终端关闭掉,会发现后续终端无法打开,因此我将 python3 更换为 python3.8.1 下载安卓源码,在安卓源码下载完毕后,还原 python3 为Python 3.5.2 版本。
以便我能打开终端
目前博主只知道这个方法,如果有知道不还原 python3 版本的,修改其他位置能使 终端打开的,希望不忘吝啬告诉我一下方法,万分感激
1 sudo mv /usr/bin/python3 /usr/bin/python3.mak
2 sudo mv /usr/bin/pip3 /usr/bin/pip3.mak
3 sudo ln -s /usr/bin/python3.5 python3
1 admin@J-computer:/usr/bin$ python3 -V
2 Python 3.5.2
还原过后,Ubuntu终端就可以使用了
3、编译android-4.0.1_r1源码
先不要着急怎么编译,请先看我编译过程中遇到的报错过程,看完你就不会想着要先编译了,先按我的步骤,一步步的修改把,虽然不保证一次能过,但是能减少一步步编译导致的不断编译报错
1 sudo apt-get install git-core gnupg flex bison gperf build-essential \
2
3 zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
4
5 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
6
7 libgl1-mesa-dev g++-multilib mingw32 tofrodos \
8
9 python-markdown libxml2-utils xsltproc zlib1g-dev:i386
3.1、android 4.0 配置 Java SE 1.6
1、下载 jdk-6u33-linux-i586.bin:提取码:qus4
2、移到/opt目录下执行
1 chmod a+x jdk-6u33-linux-i586.bin
2 sudo ./jdk-6u33-linux-i586.bin
3、添加环境变量:
1 sudo vim /etc/profile
在文件最后添加
1 #set java environment
2 export JAVA_HOME=/opt/jdk1.6.0_33
3 export JRE_HOME=/opt/jdk1.6.0_33/jre
4 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
5 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
4、最后使环境变量生效:
1 source /etc/profile
5、配置完后,再查看jdk版本:
1 $ java -version
2 java -version
3 java version "1.6.0_33"
4 Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
5 Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)
3.2 Ubuntu16.04 默认 make 版本过高会导致编译报错
报错信息就不贴了,我这里代码都已经编译过了,博文后面我去找一下他人的报错信息贴上
1 /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。
2 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen/focaltech' failed
3 make[5]: *** [drivers/input/touchscreen/focaltech] Error 2
4 make[5]: *** 正在等待未完成的任务....
5 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen' failed
6 make[4]: *** [drivers/input/touchscreen] Error 2
7 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input' failed
8 make[3]: *** [drivers/input] Error 2
9 /home/fei/dev/android/source/prada/kernel/Makefile:1116: recipe for target 'drivers/modules.builtin' failed
10 make[2]: *** [drivers/modules.builtin] Error 2
11 make[2]: *** 正在等待未完成的任务....
12 make[2]: *** wait: 没有子进程。 停止。
13 Makefile:145: recipe for target 'sub-make' failed
14 make[1]: *** [sub-make] Error 2
15 make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'
16 kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed
1、下载 make-3.81.tar.bz2 :提取码:xhqp
2、解压:
将下载好的 make-3.8.1.tar.bz2 移动至 home 目录下,然后执行该命令:
1 tar -xvf make-3.81.tar.bz2
3、编译:/usr/bin/make 存在2个 make
1 cd make-3.81/
2 ./configure --prefix=/usr
指定编译目录,如果只是执行 ./configure 该命令的话,系统默认将 make 安装到 usr/local/bin/make 中,无法替换系统默认的 make4.1,系统默认仍然是 make4.1;
然后执行 make 命令编译:
1 make
2 sudo make install
可以通过该命令查看当前系统的 make 版本:
1 make --version
3.3 Ubuntu16.04 默认 gcc、g++ 版本过高会导致编译报错
Ubuntu16.04上更换的阿里源是无法直接 sudo apt-get install gcc-4.4、sudo apt-get install g++-4.4版本的
首先需要更改 /etc/apt/sources.list
1 sudo vim /etc/apt/sources.list
将下面的粘贴至末尾
1 deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe
2 deb http://dk.archive.ubuntu.com/ubuntu/ trusty-updates main universe
保存退出后更新一下源
1 sudo apt-get update
这个时候可以直接获取了
1 sudo apt-get install g++-4.4
2 sudo apt-get install gcc-4.4
可以使用 gcc --version、g++ --version查看 g++ 跟 gcc 的版本,如果是4.4版本,就OK了
3.4 perl的switch库
如果没有安装这个库,将会导致编译报错
1 Import includes file: out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/import_includes
2 target Generated: libwebcore <= external/webkit/Source/WebCore/css/tokenizer.flex
3 <span style="rgb(255, 255, 51);">Can't locate Switch.pm in @INC (you may need to install the Switch module)</span> (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
4 BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
5 Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
6 BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
7 make: *** [out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2
8 make: *** Waiting for unfinished jobs....
9 make: *** [out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error 2
10 target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in
安装perl的switch库:
1 sudo apt-get install libswitch-perl
3.5、dalvik 报错
1 dalvik/vm/native/dalvik_system_Zygote.cpp:216:43: error: ‘setrlimit’ was not declared in this scope
2 err = setrlimit(contents[0], &rlim);
3 ^
4 <command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]
5 dalvik/vm/native/java_lang_Float.cpp:1:0: note: this is the location of the previous definition
6 /*
7 ^
8 make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] Error 1
9 make: *** Waiting for unfinished jobs....
解决办法
添加头文件#include <sys/resource.h>到以下文件
dalvik/vm/native/dalvik_system_Zygote.cpp
3.6、host Executable 报错
报错信息:
1 host Executable: emulator_renderer (out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer)
2 /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o: undefined reference to symbol 'XInitThreads'
3 //usr/lib/i386-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
4 collect2: ld returned 1 exit status
5 make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer] Error 1
6 make: *** Waiting for unfinished jobs....
解决办法:
修改development/tools/emulator/opengl/host/renderer/Android.mk文件
1 sudo gedit development/tools/emulator/opengl/host/renderer/Android.mk
添加一行:LOCAL_LDLIBS += -lX11 注意最好是复制过去,右边的容易写错
3.7、后续报错信息解决
错误1、/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1
解决:
1 sudo apt-get install libc6-dev-i386
错误2、make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] error 1
解决:
1 sudo apt-get install g++-4.4-multilib
错误3、
1 external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory
2 compilation terminated.
3 make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o] Error 1
解决:
1 sudo apt-get install zlib1g-dev
错误4:
1 /usr/bin/ld: cannot find -lz 2 collect2: ld returned 1 exit status 3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
解决:
1 sudo apt-get install lib32z1-dev
错误5:
1 bison -d -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
2 /bin/bash: bison: command not found
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127
解决:
1 sudo apt-get install bison
错误6:
1 Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
2 /bin/bash: flex: command not found
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127
解决:
1 sudo apt-get install flex
错误7:
1 /usr/bin/ld: cannot find -lncurses
2 collect2: ld returned 1 exit status
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error
解决:
1 sudo apt-get install lib32ncurses5-dev
错误8:
1 prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error: X11/Xlib.h: No such file or directory
2 compilation terminated.
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o] Error 1
解决:
1 sudo apt-get install libx11-dev
错误 9:
1 sh: gperf: not found
2 calling gperf failed: 32512 at ./makeprop.pl line 96.
3 make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25
4 make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'
解决:
1 sudo apt-get install gperf
错误10:
1 development/tools/emulator/opengl/host/libs/Translator/GLcommon/GLDispatch.cpp:22: fatal error: GL/glx.h: No such file or directory compilation terminated.
2 make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon_intermediates/GLDispatch.o] Error 1
解决方法:
1 sudo apt-get install libgl1-mesa-dev
错误11:
1 host SharedLib: lib64EGL_translator (out/host/linux-x86/obj/lib/lib64EGL_translator.so)
2 /usr/bin/ld: cannot find -lGL
3 collect2: ld returned 1 exit status
4 make: *** [out/host/linux-x86/obj/lib/lib64EGL_translator.so] Error 1
5 make: *** Waiting for unfinished jobs....
解决方法 :
1 sudo apt-get install libglu1-mesa-dev
3.8、/usr/bin/ld: cannot find -lxxx问题解决
报错信息:
/usr/bin/ld: 找不到 -lz collect2: error: ld returned 1 exit status
这个地方的报错我百度了很多,虽然有很多博文讲诉,但是均没有解决我的编译报错问题,不知道这些转发的博主们都有没有实测过,反正百度了很多,大都是八九不离十的重复,我几乎都尝试过,都没有解决我的编译报错问题,但可以肯定的是 这个目录下的 /usr/lib/i386-linux-gnu/libX11.so 库版本或者路径没有对应上,解决我报错的方法如下:
1 sudo apt-get install libglu1-mesa-dev -y
或者:sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so
最后开始真正的编译把
进入你的安卓代码目录:source ./build/envsetup.sh
lunch 选择 full-eng
选择1就 OK 了
make -j 编译你的代码把,我这里给我的虚拟机配置的是8线程,所以我就用 -j8来编译了,具体 -j 多少要看你为你的虚拟机分配了几核几线程
编译成功后,就可以看到你的安卓代码目录下多了一个 out/ 目录了,里面会有一个 system.img 了,可以烧录到开发板中了
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2020-06-08,13:19:31
作者By-----Reverse-xiaoyu----博客园