Android AOSP 6,上海大厂Android面试经历

编译android源码强烈建议在Linux操作系统下,最好在物理机器上安装Linux操作系统,笔者使用发行版ubuntu 16.04作为PC系统,不建议在win上安装虚拟机vmvare解决,因为稳定性大打折扣,笔者曾经不知所以虚拟机上的操作系统就挂掉了,如果打算研究源码,物理机器上安装双系统或者仅仅安装Linux,作为开发者建议使用Linux,不要问我为什么。

有了Linux操作系统还是不够的,这只表明你可以下载编译android源码了,如果想了解源码,那么一部nexus手机就是必备的,当然现在google已经不再发布nexus系列了,可以购买最新版的Pixel系列手机,总之,android开发者尽量使用太子是好事,如果你的app兼容太子,那么其他第三方ROM手机支持不好,那一定是他们把源码改乱了,很大程度和我们关系不大,有时需要做专门的适配工作,但首先应该适配的永远是太子系列。纸上得来终觉浅,绝知此事要躬行。只有自己编译源码,打入Log查看运行流程,才能理清楚源码工作的一些细枝末节,这部手机基本是必备的。

良好的网络环境,最好科学上网。我这里介绍的是使用国内镜像下载对应分支的源码。笔者使用安装ubuntu 16.04 PC一台,Nexus 5手机一台,高品质数据线一根,使用清华的源码镜像。

二、ubuntu操作系统安装

作为使用广泛的linux发行版之一,ubuntu广受欢迎,目前的最新稳定版本为16.04,可以到cn.ubuntu.com/download/乌班图官网下载。网络上制作U盘系统的工具很多按照步骤制作即可,安装的时候用u盘启动,一直提示:vesamenu.c32:not a COM32R image无法进行下一步,则直接输入live回车即可。

三、下载源码工具准备

在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 ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

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

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

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

四、下载android源码

1.建立工作目录

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

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

mkdir android-6.0.1_r72
cd android-6.0.1_r72

2.下载相应版本的源码

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

BuildBranchVersionSupported devices
NDE63Xandroid-7.1.0_r7NougatPixel XL, Pixel
M4B30Xandroid-6.0.1_r72MarshmallowNexus 5
MOB30Yandroid-6.0.1_r60MarshmallowNexus 5
MMB29Kandroid-6.0.0_r1MarshmallowNexus 5

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

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/sh
repo sync
while [ $? -ne 0 ]
do
repo sync
done

用这段脚本执行,替换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 multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb-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:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g+±multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g+±multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo 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/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk

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

sudo gedit /etc/profile

在末尾追加下面代码:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH

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

source /etc/profile

检查OpenJDK配置是否正确:

java -version

配置正确如下图:

image

2.修改源码待编译

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

ifneq ( ( W I T H O U T H O S T C L A N G ) , t r u e ) 改为 i f e q ( (WITHOUT_HOST_CLANG),true) 改为 ifeq ( (WITHOUTHOSTCLANG),true)改为ifeq((WITHOUT_HOST_CLANG),false)

3.下载驱动

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

image
image

我这里下载对应的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.sh
chmod a+x extract-lge-hammerhead.sh
chmod 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.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/htc/flounder/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including sdk/bash_completion/adb.bash

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

lunch

Lunch menu… pick a combo:

  1. aosp_arm-eng
  2. aosp_arm64-eng
  3. aosp_mips-eng
  4. aosp_mips64-eng
  5. aosp_x86-eng
  6. aosp_x86_64-eng
  7. aosp_deb-userdebug
  8. aosp_flo-userdebug
  9. full_fugu-userdebug
  10. aosp_fugu-userdebug
  11. mini_emulator_arm64-userdebug
  12. m_e_arm-userdebug
  13. mini_emulator_mips-userdebug
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结:

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

  • BAT大厂面试题、独家面试工具包,

  • 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

  • BAT大厂面试题、独家面试工具包,

  • 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
    [外链图片转存中…(img-nm6zcI23-1712334652170)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值