写点什么

Android AOSP 6,flutter 面试题

用户头像
Android架构
关注
发布于: 刚刚

三、下载源码工具准备

在 Linux 平台下进行 Android 系统项目开发时,需要 git 和 repo 管理。


Git 和 Repo 的区别:


  1. Git:Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

  2. Repo: Repo 是谷歌用 Python 脚本写的调用 git 的一个脚本。主要是用来下载、管理 Android 项目的软件仓库(也就是说 Repo 是用来管理给 Git 管理的一个个仓库的)

1.Git 安装

已安装忽略这一步骤


apt-get install git

2.Repo 下载与使用

下载 repo 工具:


mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo


无法下载的话,先用 git clone 一份


git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo


拷贝其中的 repo 脚本到你的 PATH 里即可,设置方式可以参照上面。

四、下载 android 源码

1.建立工作目录

mkdir WORKING_


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


DIRECTORYcd WORKING_DIRECTORY


例如笔者在用户目录下新建 android-6.0.1_r72 文件夹,进入这个文件夹。


mkdir android-6.0.1_r72cd android-6.0.1_r72

2.下载相应版本的源码

先查询设备支持的版本,你要下载那个版本的源码,科学上网查看source.android.com/source/buil…。表格如下格式,查询对应设备的相应分支。



源码下载,具体下载那个版本只需修改后面的分支名称。


repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r72


init 成功后,开始漫长的同步源码树(以后只需执行这条命令来同步)。


repo sync


这还不够,因为很有可能出错跳出来了,我们需要一个脚本,在出问题的情况下再次执行 repo sync,在当前需要下载源码的目录下新建 down.sh 文件,直接使用 vi 命令即可。


vi down.sh


接下来,在 vi 编辑器内输入下面这段脚本代码,保存退出。


#!/bin/shrepo syncwhile [ $? -ne 0 ]dorepo syncdone


用这段脚本执行,替换 repo sync 这条命令。


./down.sh


N 个小时过去后,终于下载好了。小水管的笔者下了 15 个多小时才完成。开始着手搭建源码编译环境。

五、源码编译

对应分支的源码下载好以后,接下来就开始激动人心的编译工作,但编译之前还需要先配置环境。

1.搭建编译环境

笔者环境


  • Ubuntu 16.04 LTS

  • Android android-6.0.1_r72 分支源码

  • Open JDK 7


上面的两者已经具备了,那么还需要安装 Open JDK 7,注意是 Open JDK,并非甲骨文的 Oracle JDK。


这部分内容引自 csdn 博主梧桐那时雨。

(1) 更换软件源

为了更快的安装软件,我们需要更换软件源为国内的软件源,这里推荐使用 Ubuntu 官方指定的国内软件源阿里云,具体方法是:


sudo gedit /etc/apt/sources.list


在文件最前面加入下面代码:


deb http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse


(2) 安装依赖


sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilibsudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-devsudo apt-get install git-core gnupg flex bison gperf build-essential

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilibsudo apt-get install libc6-dev-i386sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-devsudo apt-get install lib32z-dev ccachesudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4


Ubuntu 16.04 请务必使用上面的依赖,Ubuntu 16.04 需要的依赖和 Ubuntu 14.04 所需要的依赖是不同的。


(3) 安装 open JDK7

由于 Ubuntu 16.04 没有 OpenJDK7 的源,因此在 16.04 上安装 OpenJDK7 需要执行下面的命令:


sudo add-apt-repository ppa:openjdk-r/ppasudo apt-get updatesudo apt-get install openjdk-7-jdk


配置 OpenJDK.打开/etc/profile 文件:


sudo gedit /etc/profile


在末尾追加下面代码:


export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64export JRE_HOME={JAVA_HOME}/lib:{JAVA_HOME}/bin:$PATH


修改了/etc/profile 文件需要重启才能生效,但使用下面命令可以在不重启的情况下在当前 bash 环境生效:


source /etc/profile


检查 OpenJDK 配置是否正确:


java -version


配置正确如下图:

2.修改源码待编译

修改 android-6.0.1_r72/art/build/Android.common_build.mk 文件,定位到 75 行,将下面的代码改为 false:


ifneq ((WITHOUT_HOST_CLANG),false)

3.下载驱动

官网下载对应版本的驱动:developers.google.com/android/nex…




我这里下载对应的 M4B30X,下载成功后得到三个压缩包 broadcom-hammerhead-m4b30x-7c7b231f.tgz、lge-hammerhead-m4b30x-74fa3aa5.tgz、qcom-hammerhead-m4b30x-158606cf.tgz,解压这三个压缩包,解压出来是三个 sh 文件,放到 Android 源码目录下面即 android-6.0.1_r72 下,然后执行。会将相关驱动放到 vender 目录下面。


拷贝三个 sh 到源码目录:


cp /media/lhw/LHW/extract-broadcom-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/cp /media/lhw/LHW/extract-lge-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/cp /media/lhw/LHW/extract-qcom-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/


拷贝成功后,赋予执行权限


chmod a+x extract-broadcom-hammerhead.shchmod a+x extract-lge-hammerhead.shchmod a+x extract-qcom-hammerhead.sh


执行每个 sh,输入 I ACCEPT,最终将驱动放到 vender 目录待使用。

4.开始编译

(1) 在 .bashrc 文件末尾添加:export USE_CCACHE = 1


echo export USE_CCACHE=1 >> ~/.bashrc


(2) 为了提高编译效率,设置编译器高速缓存:


prebuilts/misc/linux-x86/ccache/ccache -M 50G


(3) 接着导入编译 Android 源码所需的环境变量和其它参数:


source build/envsetup.sh


including device/asus/deb/vendorsetup.shincluding device/asus/flo/vendorsetup.shincluding device/asus/fugu/vendorsetup.shincluding device/generic/mini-emulator-arm64/vendorsetup.shincluding device/generic/mini-emulator-armv7-a-neon/vendorsetup.shincluding device/generic/mini-emulator-mips/vendorsetup.shincluding device/generic/mini-emulator-x86_64/vendorsetup.shincluding device/generic/mini-emulator-x86/vendorsetup.shincluding device/htc/flounder/vendorsetup.shincluding device/huawei/angler/vendorsetup.shincluding device/lge/bullhead/vendorsetup.shincluding device/lge/hammerhead/vendorsetup.shincluding device/moto/shamu/vendorsetup.shincluding sdk/bash_completion/adb.bash


(4) 运行 lunch 命令选择编译目标:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android AOSP 6,flutter面试题