1. 前言

        我们做andorid系统开发,肯定时刻与源码打交到,特别是做新项目时,最重要的事情就是下载源码,然后配置环境编译,假如你的电脑是刚重装系统过,一个全新的开发环境,那么首要解决的事情就是完善好andorid源码编译的环境,你前期工作准备好的话,就可以减少在编译过程中频繁报错的次数。

        本人是借用的一台全新安装的Ubuntu 18.04操作系统的电脑,重新下载一份Android 10项目代码,接下来就来准备前期工作。

2.1 安装所需的程序包(Ubuntu的18.04)

在终端命名安装:       

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

2.2 安装和配置工作中常用的包

一行一行的执行命令安装

git config --global core.editor vim
git config --global credential.helper store
sudo apt-get update
sudo apt install python libssl-dev python-crypto samba  openssh-server libncurses5 libncurses5:i386 gitk   net-tools  flameshot vim ccache
sudo usermod -aG plugdev $LOGNAME

2.3 源码编译初始化

接下来进入到项目代码中,熟悉的命令:

        1.  source build/envsetup.sh

        2.  lunch  xxx

        3.  make -j16

        接下来就是编译开始..........

        然后你的工作就来了,新电脑新环境,源码编译依赖的环境肯定没有安装全,或者依赖工具的版本不匹配,导致一直编译不过...... 但是不要心态炸裂,遇见什么问题就解决什么问题

3. 编译报错汇总

编译过程中,本人遇到过如下报错:

错误1:
【报错】 fatal error: openssl/名单.h: No such file or directory。
【解决方案】 就是没有安装libssl-dev~  sudo apt-get install libssl-dev 

错误2:
【报错】:ImportError: No module named Crypto.Signature
【解决方案】: sudo pip3 install pycrypto 

错误3:

【报错】:error while loading shared libraries: libncurses.so.5 
【解决方案】: sudo apt-get install libncurses5 libncurses5:i386


错误4:
【报错】编译过程中:
******************************
You have tried to change the API from what has been previously approved.

To make these errors go away, you have two choices:
   1. You can add '@hide' javadoc comments to the methods, etc. listed in the
      errors above.

   2. You can update current.txt by executing the following command:
         make android.test.mock.docs.system-update-current-api

      To submit the revised current.txt to the main Android repository,
      you will need approval.
******************************
【解决方案】:根据第二条提示: make android.test.mock.docs.system-update-current-api


错误5:
【报错】:/bin/bash: bison: command not found
【报错】: /bin/bash: xsltproc: command not found
【报错】:/bin/bash: flex: command not found
【报错】:/bin/bash: gcc: command not found
 等等同类错误

【解决方案】:下文会说明

特别是第5类错误,我们可以在单独安装一下 sudo apt-get install  xxx 

但是呢,每次编译一下就报个错,你得停下来解决了,然后在重新编译验证,而且第一次编译时间本来就很长,着实很搞人心态。 那有没有办法解决呢?

4. 自检查环境

其实在第一次Android源码编译之前就可以大致检查下编译环境配置是否ok?

在你执行source build/envsetup.sh   lunch  xxx 命令后,终端会打印,如下:

TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-2a
TARGET_CPU_VARIANT=cortex-a75
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-2a
TARGET_2ND_CPU_VARIANT=cortex-a55
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.15.0-46-generic-x86_64-Ubuntu-18.04.3-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
HOST_PYTHON_VERSION=  找不到文件
BUILD_ID=QP1A.190711.020
OUT_DIR=out

而且我上面的lunch后中,还有 HOST_PYTHON_VERSION=  找不到文件 提示, 这个就是python找不到 , 那么就是提示你要去安装python的环境
 

也会还有其他问题报错(根据具体项目会有差异),如下:

/bin/sh: 1.cc not found

recipe for target 'scripts/basic/fixdep' failed

recipe for target 'sub_make' failed

android 源码编译ndk 编译android源码 硬件配置_Android源码编译

这个报错就提示你要去安装 gcc ,但是你安装的时候,提示你会有依赖,无法安装成功

怎么解决呢?下文会解决方法

对比配置ok后,lunch后成功执行完成的提示:

android 源码编译ndk 编译android源码 硬件配置_Android源码编译_02

5. 最优解决方案

对于编译报错停止后,通过log, 我们肯定是缺什么就在去安装什么,比如当你看到  fatal error: zlib.h: No such file or directory 这个报错时,你的第一反应就是单独去安装zlib1g-dev      :     sudo  apt-get install zlib1g-dev  一般情况下会有依赖,导致你安装不成功

android 源码编译ndk 编译android源码 硬件配置_Android_03

这时你需要安装aptitude

1.  sudo apt-get install  aptitude

2.  sudo  aptitude install  zlib1g-dev

接下来就如图下面选择:第一个选择n   第二个选择 Y

android 源码编译ndk 编译android源码 硬件配置_解决方案_04

        aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具,与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

        也就是说当你安装么某个特定包的时候,出现依赖导致安装不成功,这个时候aptitude 就派上用场了,它的优点就是自动帮你解除依赖关系,非常省心地正常安装。

      顺便提及一下其他 aptitude 的命令:

命令

作用

aptitude update

更新可用的包列表

aptitude safe-upgrade

执行一次安全的升级

aptitude full-upgrade

将系统升级到新的发行版

aptitude install pkgname

安装包

aptitude remove pkgname

删除包

aptitude purge pkgname

删除包及其配置文件

aptitude search string

搜索包

aptitude show pkgname

显示包的详细信息

aptitude clean

删除下载的包文件

aptitude autoclean

仅删除过期的包文件

6. 总结

        在新电脑环境第一次编译andorid源码的时候,肯定会遇到很多编译问题,也需要我们有点耐心去解决问题, 所以前期尽可能的配置好编译环境,当你在第一次执行全部安装包命令(第二个步骤中比较长的命令)的时候,如果出现了某些有依赖的包,导致安装不成功的,一定要留下心,先记录下来。

        接下来,在第4个步骤上,自检查下编译环境是否都正常?

        然后把aptitude 安装上,接下来去单独安装有依赖的包,因为你前期不解决这些问题,在编译过程中肯定会遇上的,又来回折腾。

        说了这么多,就是要把前期编译环境尽肯能配置完整一点,便于节省时间编出大版本。