现今在 AOSP 代码Curry,我们首先次看见了 Pixel 2 的身材,即使只是个代号
“Muskie”。它和其余一多级 谷歌(Google卡塔尔 Nexus/Pixel
设备代号并列在联合,没其他身份!

linux境况下编写翻译安卓源码,是种种Android开采者深远学习Android系统以至源码所要必得领悟的。接下来作者会将详细介绍Android源码的编写翻译进度。

源码下载盘算

真机运营须要厂家的驱动,商家的驱动是不带有在AOSP中的,你须要依赖你挑选的Branch:
https://source.android.com/source/build-numbers.html
去驱动页面:
https://developers.google.com/android/nexus/drivers#shamulrx21o
下载合适的驱动。

除此以外还能够见到 “Walleye”(大眼梭鲈卡塔尔、“Taimen”(哲罗鱼卡塔尔国三个代号,身份不详。

编写翻译景况搭建

源码下载

有美国媒体猜忌前者是小尺寸的 Pixel。

安装Ubuntu系统

自家利用的是Ubuntu15.10操作系统卡塔尔(قطر‎陆十个人,12.1.1的VMare设想机,在设想机上成立新的设想机配置如下(首要的配置图):

澳门新葡萄京官网注册 1

慎选操作系统

筛选相应的操作系统连串,依据本人设置的种类项目进行铺排;

澳门新葡萄京官网注册 2

设想机新闻配置

设想机名称自定义;
岗位表示创造虚构机的储存地方(选用硬盘空间丰富大的,因为接下去要求分配虚构内部存款和储蓄器);

澳门新葡萄京官网注册 3

布局虚构内部存款和储蓄器

内存大小很首要,android5.X下载完整源码要求将近50G的大大小小,何况还不满含编写翻译须要的内部存款和储蓄器大小(也接近50多G);

澳门新葡萄京官网注册 4

丰硕设置镜像文件

布局安装的镜像文件,然后运营该虚构机,轻便计划部分音信,就能够完成系统安装;

注意:根据Android
Source中对此操作系统的渴求:
Android 平时是在 GNU/Linux 或 Mac OS
操作系统中开展编写翻译。您也足以应用虚构机在不援助的系统(例如Windows)中编写翻译 Android。

  • GNU/Linux
    Android 6.0 (Marshmallow) – AOSP master:Ubuntu 14.04 (Trusty)
    Android 2.3.x (Gingerbread) – Android 5.x (Lollipop):Ubuntu 12.04
    (Precise)
    Android 1.5 (Cupcake) – Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)

  • Mac OS (Intel/x86)
    Android 6.0 (马尔斯hmallowState of Qatar – AOSP master:Mac OS v10.10 (Yosemite)或越来越高版本,具备 Xcode 4.5.2 和命令行工具
    Android 5.x (Lollipop卡塔尔国:Mac OS v10.8 (Mountain LionState of Qatar,具备 Xcode
    4.5.2 和命令行工具
    Android 4.1.x-4.3.x (Jelly BeanState of Qatar – Android 4.4.x (KitKat卡塔尔:Mac OS
    v10.6 (斯诺 Leopard卡塔尔国 或 Mac OS X v10.7 (Lion卡塔尔国,以致 Xcode 4.2(Apple
    的开采者工具)
    Android 1.5 (Cupcake) – Android 4.0.x (Ice Cream Sandwich):Mac OS
    v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X
    v10.5 SDK

下载repo工具:

mkdir ~/bin
PATH=~/bin:$PATH
curl
https://storage.googleapis.com/git-repo-downloads/repo
> ~/bin/repo
chmod a+x ~/bin/repo

据早前报导,Pixel 2 如故交给 OPPO 代工,前面一个已经拿出原型机供 谷歌(Google卡塔尔(قطر‎参照他事他说加以调查,有希望在 5 月 17 日的 I/O 2017 大会上伴随下代系统 Android O
一齐发表。

Android Source参考

能够访谈Android
Source,参谋对应的布置供给和铺排进程;
以下内容是Android Source中,对于编写翻译遇到的有的渴求:

  • Java 开辟套件 (JDK卡塔尔
    请留神,由于未有适用于 Ubuntu 14.04 的受扶植 OpenJDK 8
    程序包,因而你必需手动安装 Ubuntu 15.04
    程序包。要翻看具体表达,请参阅适用于 Ubuntu LTS 14.04 的
    JDK。
    AOSP 中 Android 的 master 分支:Ubuntu – OpenJDK
    8;Mac
    OS – jdk 8u45
    或更加高版本
    Android 5.x (Lollipop) – Android 6.0 (Marshmallow):Ubuntu –
    OpenJDK
    7;Mac
    OS –
    jdk-7u71-macosx-x64.dmg
    Android 2.3.x (Gingerbread) – Android 4.4.x (KitKat):Ubuntu – Java
    JDK
    6;Mac
    OS – Java JDK
    6
    Android 1.5 (Cupcake) – Android 2.2.x (Froyo):Ubuntu – Java JDK
    5

  • 器重程序包
    python.org
    中提供的 Python 2.6 – 2.7
    gnu.org
    中提供的 GNU Make 3.81 – 3.82;对于 Android 3.2.x (Honeycomb卡塔尔(قطر‎及更低版本,则须求将 make 3.82
    还原到相当的低版本,以幸免现身编译错误
    git-scm.com
    中提供的 Git 1.7 或更加高版本

  • 配备二进制文件
    下载预览、出厂影像、驱动程序、有线 (OTA卡塔尔(قطر‎ 更新和下列别的Blob。如需更加多详细消息,请参阅下载专有二进制文件。
    预览二进制文件
    (Blob卡塔尔(قطر‎ –
    用于 AOSP master
    分层开垦
    出厂影象 –
    针对运转带标志的 AOSP 版本分支的受援救器材
    硬件支撑二进制文件 –
    针对运转带标识的 AOSP 版本分支的设施
    OTA
    映像 –
    用于通过有线格局手动更新 Nexus 设备

确立办事目录:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

Building 12 configured target(s): aosp-master/aosp_arm64-eng
aosp-master/aosp_x86-eng git_master/aosp_muskie-userdebug
git_master
/aosp_walleye-userdebug
git_master
/bullhead-userdebug_fastbuild3a_linux
git_master/gce_x86_phone-userdebug_fastbuild3c_linux
git_master/marlin-userdebug git_master/muskie-userdebug
git_master
/sailfish-userdebug
git_master/sailfish-userdebug_fastbuild3_linux
git_master/taimen-userdebug git_master/walleye-userdebug.

设置配备JDK
  • 安装JDK
    依照上边的java套件的渴求,大家将设置OpenJdk7.率先更新系统程序,然后再推行安装OpenJdk7的装置命令
    更新程序包

sudo apt-get update

安装OpenJdk7:

sudo apt-get install openjdk-7-jdk

  • 陈设JDK意况(那篇小说无需配置,一时不做铺排)

把 REPO_U奥德赛L 一行替换来下边包车型客车:

REPO_URL =
‘https://gerrit-google.tuna.tsinghua.edu.cn/git-repo’

澳门新葡萄京官网注册 5

安装编写翻译的依据包

sudo apt-get install bison g++-multilib git gperf libxml2-utils make
python-networkx zlib1g-dev:i386 zip

sudo apt-get install git gnupg flex bison gperf build-essential zip
curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386
libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev
g++-multilib tofrodos python-markdown libxml2-utils xsltproc
zlib1g-dev:i386

地方的施行命令中原来是有mingw32软件包的,不过实际上安装进度却“无法稳固mingw32”,接下去单独安装mingw32;

sudo gedit /etc/apt/sources.list
//在sources.list末尾增添,保存
deb
http://us.archive.ubuntu.com/ubuntu
trusty main universe
sudo apt-get update
sudo apt-get install mingw32
中规中矩地点的操作就足以成功安装mingw32;
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/libGL.so

开始化酒店:要求有些特定的 Android 版本(以android-6.0.1_r77为例)

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

来自:驱动之家 作者:上方文Q

构造USB使用权限

在 GNU/Linux 系统中,特别是在 Ubuntu
系统中,默许情形下普通客商不也许直接使用 USB
设备。您须要对系统举行构造以允许接纳此类设备。
提议您以 root 客户的身份在 /etc/udev/rules.d/51-android.rules
下创办一个文本。
为此,请运维以下命令来下载本网址附带的
51-android.txt
文件,对其举行改造以含有您的顾客名,然后将其置李晖确地方:

wget -S -O –
http://source.android.com/source/51-android.txt
| sed “s/<username>/$USER/” | sudo tee >/dev/null
/etc/udev/rules.d/51-android.rules; sudo udevadm control
–reload-rules

如上命令由于必要翻墙只怕不能实践成功,不过能够在互连网下载51-android.txt文本,然后配置到本人的服务器上然后替换命令上的url就足以正确施行;
这一个新法规会在下一次安排设备时生效。由此,您恐怕需求先拔下设备,然后再将其插到Computer上。

推行以下命令达成结构,使新改动的规规矩矩生效:

sudo udevadm control –reload-rules

千帆竞发联合具名:

repo sync

安装repo

repo是GIT的管理工科具,有效的兑现单个项目下得以蕴含两个git子项目同期实现项目里面包车型客车正视调用关系安插,何况repo封装了八个git的指令,进而完成创造分支,查看分支,删除分支等等;由于Android项目包蕴多个子项目工程,使用repo能够有效的落到实处AOSP的治本;所以下载Android源码必要安装repo,接下去大家来拜访repo的安装进度。
先是,创制须要寄存repo的文件夹,然后施行以下命令来cloen对应的品类:

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

切换来新创立的目录下,我们拜访到新添的文本夹git-repo.git,接下去将文件夹git-repo.git下的repo文件复制到~/bin/repo到该公文:

cp git-repo.git/repo ~/bin/repo

给~/bin/repo那么些文件授权为可奉行文件

chmod a+x ~/bin/repo

修改~/bin/repo文件中的REPO_URL值

sudo vi ~/bin/repo

REPO_URL=”https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/”

配置.bashrc

vi ~/.brashrc

增加内容:

export PATH=~/bin:$PATH

源码编写翻译

source build/envsetup.sh
lunch

You’re building on Linux

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
  14. mini_emulator_x86_64-userdebug
  15. mini_emulator_x86-userdebug
  16. aosp_flounder-userdebug
  17. aosp_angler-userdebug
  18. aosp_bullhead-userdebug
  19. aosp_hammerhead-userdebug
  20. aosp_hammerhead_fp-userdebug
  21. aosp_shamu-userdebug
安装ccache

ccache是c/c++在编写翻译进程中的缓存注重包,通过设置ccache能够进步c/c++编写翻译的频率;日常缓存设置的大大小小为50G;

sudo apt-get install ccache
source ~/.bashrc

计划缓存大小:

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

现今,意况已经搭建完毕。

Which would you like? [aosp_arm-eng] 19

PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=6.0.1
TARGET_PRODUCT=aosp_hammerhead
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-91-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=M4B30Z

下载源码

  • 先开始化repo目录,

mkdir aosp
cd aosp

实施命令:

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

进行进度现身

澳门新葡萄京官网注册 6

SecureCRT

急需安插git config

git config –global user.name “your name”
git config –global user.email “your email”

  • 一同代码

repo sync

OUT_DIR=out

dean@dean:~/share/aosp/aosp_android6$ choosecombo
Build type choices are:

  1. release
  2. debug

Which would you like? [1] 1

Which product would you like? [aosp_hammerhead]

Variant choices are:

  1. user
  2. userdebug
  3. eng
    Which would you like? [eng] 3

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=6.0.1
TARGET_PRODUCT=aosp_hammerhead
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-91-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=M4B30Z

编写翻译源码

先是配置奉行碰到

cd aosp
. build/envsetup.sh

构造缓存:

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

分选编写翻译指标包:

lauch

You’re building on Linux
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_hammerhead-userdebug
  8. aosp_mako-userdebug
  9. mini_emulator_x86_64-userdebug
  10. mini_emulator_mips-userdebug
  11. m_e_arm-userdebug
  12. mini_emulator_x86-userdebug
  13. mini_emulator_arm64-userdebug
  14. aosp_manta-userdebug
  15. aosp_shamu-userdebug
  16. aosp_tilapia-userdebug
  17. full_fugu-userdebug
  18. aosp_fugu-userdebug
  19. aosp_grouper-userdebug
  20. aosp_flo-userdebug
  21. aosp_deb-userdebug

    Which would you like? [aosp_arm-eng] 1

    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=5.0.2
    TARGET_PRODUCT=aosp_arm
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a
    TARGET_CPU_VARIANT=generic
    TARGET_2ND_ARCH=
    TARGET_2ND_ARCH_VARIANT=
    TARGET_2ND_CPU_VARIANT=
    HOST_ARCH=x86_64
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-4.2.0-42-generic-x86_64-with-Ubuntu-15.10-wily
    HOST_BUILD_TYPE=release
    BUILD_ID=LRX22G

    OUT_DIR=out

中间1是通用型的,那几个得依照自身的硬件条件来决定的。

推行编写翻译命令

make -j4

1.make前面能够更参数:如您的机械时双核,每核双线程的话,使用make
-j4,那样速度更加快,但编写翻译时采用的内部存储器也越多
2.make退步或终止后,能够使用make -k 继续编译

OUT_DIR=out

模拟器测量试验

做到编写翻译之后,查看源码以至编写翻译生成的out文件夹大小

澳门新葡萄京官网注册 7

编译完结的暗许输出文件out,接下去运维模拟器查看

cd aosp
emulator &

假如现身以下难点,即“未找到命令”

澳门新葡萄京官网注册 8

扼杀办法:
可将如下情况变量重新伊始化三次(也等于历次重复走入系统运作的时候,都亟待开端化一遍卡塔尔(قطر‎,lunch前边的参数要与你编写翻译的ROM选项一致。

. build/envsetup.sh
lunch aosp_arm-eng

aosp_arm-eng 上边编写翻译是的选料,必需保持一致;

接下去继续实践运维模拟器命令:

emulator &

实施结果:

澳门新葡萄京官网注册 9

操作模拟器查占星应的Android版本音信是不是和编写翻译的版本相仿(选拔编写翻译版本android_5.0.2_r):

澳门新葡萄京官网注册 10

千帆竞发编写翻译

dean@dean:~/share/aosp/aosp_android6$ make -j8

编译进程的主题素材

1.是因为源代码和javadoc中的类,方法,属性不相近,导致报错

澳门新葡萄京官网注册 11

解决办法,google 给了五个筛选::

  • 在你增多的API只怕变量后边,扩展javadoc
    注释@hide。可是要留意的是,并非粗略写个@hide 或许 /@hide/
    就可以了,那个都以大谬不然的javadoc注释格式,规范的javadoc皆以这么的
    /** */ 并且对于 format 变量 应该加上 { }。所以我们理应那样写
    /** {@hide} */
  • 您正是想要生成的javadoc里面现身那些艺术恐怕变量,你必需输入:

make update-api

可是借使退换的是google未有开放出来的类,举个例子XC60IL,PhoneFactory,就不会见世这几个标题,
实则作者并未去改正源码,所以自身揣摸只怕是Android源码和javadoc存在一些间隔招致的,所以小编遵照第二种方法去杀绝,履行完之后会在out/target/common/docs/doc-common-check
目录下成立文件current.txt和removed.txt,通过标志须要跳过的不二法门来落到实处编写翻译通过;
2.clang++的问题

clang++: error: unable to execute command: Killed
clang++: error: clang frontend command failed due to signal (use -v to
see invocation)
clang version 3.5
Target: i386–linux-gnu
Thread model: posix
clang++: note: diagnostic msg: PLEASE submit a bug report to
http://llvm.org/bugs/
and include the crash backtrace, preprocessed source, and associated
run script.
clang++: note: diagnostic msg:


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg:
/tmp/android_system_OsConstants-6e651d.cpp
clang++: note: diagnostic msg:
/tmp/android_system_OsConstants-6e651d.sh
clang++: note: diagnostic msg:


host C: libbacktrace_libc++ <=
system/core/libbacktrace/thread_utils.c
make: ***
[out/host/linux-x86/obj32/SHARED_LIBRARIES/libjavacore_intermediates/luni/src/main/native/android_system_OsConstants.o]
错误 254
make: *** 正在等待未到位的天职….

刷机

可以知道adb链接的时候实施 adb reboot bootloader
fastboot devices
只要现身“no permissions fastboot”:

原因:fastboot 没有root权限:
解决:
    到fastboot目录下运行:
        sudo chown root:root fastboot && sudo chmod +s fastboot

fastboot flashall -w

如果出现:“error: neither -p product specified nor ANDROID_PRODUCT_OUT set”
原因:在root模式下没有设置项目的路径。
    解决:
        改变命令为:
            ANDROID_PRODUCT_OUT=out/target/product/hammerhead fastboot flashall -w

make failed to build some targets (26:09 (mm:ss))

  • 原因:
    那是swap区远远不够大的来头。招致clang++ kernel opps
  • 不留余地办法:
    请加大分区:
    sudo fallocate -l 6G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    开机自动挂载swap:
    选取 vi 或 nano 在 /etc/fstab 文件底部增加如下内容:
    /swapfile none swap sw 0 0

总结

从那之后,进过三到八日的白昼黑夜,大家的一体Android5.0.2_r版本的源码就全体编写翻译实现。大家也足以品尝连接真机设备进行刷机烧录操作,同临时候也得以应用源码举行frameworks层的支出,能够针对frameworks模块单独编写翻译烧录,达成framework自定义开拓。针对真机烧录和framework层的开销,后续将跟进。那篇文章重如果将全方位android源码编写翻译进度详细情形体现,亲身体会搭建情况和编写翻译进程,参看英特网的资料整理现身来的,上边会将参考的博客一一列出,所以是站在受人尊敬的人肩上实现的,接待大家报告以致指正商量

参照他事他说加以调查资料:

  • http://source.android.com/source/initializing.html
  • http://blog.csdn.net/u011974987/article/details/50978291
  • http://blog.csdn.net/chouretang/article/details/43769839
  • http://blog.csdn.net/morixinguan/article/details/54709425