|
|
中文 / EN
|
https://source.android.com/source/initializing.html
以下说明适用于所有分支(包括 master
)。
我们会定期在最近推出的一些 Ubuntu LTS (14.04) 版本中对 Android 编译过程进行内部测试,但大多数 Ubuntu 分发版本都应该有所需的编译工具。欢迎向我们报告在其他分发版本中的测试结果(无论结果是成功还是失败)。
如果是 Gingerbread (2.3.x) 及更高版本(包括 master
分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
注意:要查看完整的硬件和软件要求列表,请参阅要求。然后,请按照下方适用于 Ubuntu 和 Mac OS 的详细说明进行操作。
Android 开放源代码项目 (AOSP) 中 Android 的 master
分支在 platform/prebuilts/jdk/jdk8
中有预编译版本的 OpenJDK。因此,无需再额外安装。
较低版本的 Android 需要另行安装 JDK。在 Ubuntu 上,请使用 OpenJDK。要了解确切版本,请参阅 JDK 要求;要了解相关说明,请参阅以下各个部分。
请运行以下命令:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
目前没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。Ubuntu 15.04 OpenJDK 8 程序包能够在 Ubuntu 14.04 中成功使用。我们发现,按照以下说明操作时,更高的程序包版本(例如适合 15.10、16.04 的版本)在 Ubuntu 14.04 中无法正常工作。
.deb
软件包:0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0
)9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849
)6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c
)例如,使用 sha256sum
工具:
sha256sum {downloaded.deb file}
sudo apt-get update
为下载的每个 .deb 文件运行 dpkg
。运行过程中可能会因缺少依赖项而出现错误:
sudo dpkg -i {downloaded.deb file}
解决缺少依赖项的问题:
sudo apt-get -f install
(可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:
sudo update-alternatives --config java
sudo update-alternatives --config javac
在编译过程中,如果您遇到 Java 版本错误,请按照错误的 Java 版本部分中的说明设置其路径。
您将需要 64 位版本的 Ubuntu。建议您使用 Ubuntu 14.04。
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
注意:要使用 SELinux 工具进行政策分析,还需要安装 python-networkx
软件包。
注意:如果您使用 LDAP 并且希望运行 ART 主机测试,还需要安装 libnss-sss:i386
软件包。
您可以使用 Ubuntu 12.04 来编译较低版本的 Android。master 或最近推出的一些版本不支持 Ubuntu 12.04。
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 mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
不再支持在 Ubuntu 10.04-11.10 中进行编译,但它们仍可用来编译较低版本的 AOSP。
sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
在 Ubuntu 10.10 中,请运行以下命令:
sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
在 Ubuntu 11.10 中,请运行以下命令:
sudo apt-get install libx11-dev:i386
按照说明设置用于开发的设备,以安装适用于所有 Android 设备且由社区维护的默认 udev
规则集。
默认情况下,每次编译的输出都会存储在相应源代码树的 out/
子目录下。
在一些拥有多个存储设备的计算机上,如果将源文件和输出存储在单独的存储卷中,编译速度会更快。若要进一步提高编译速度,可以将输出存储在已针对速度(而非崩溃稳定性)进行优化的文件系统中,这是因为在文件系统损坏时可以重新生成所有文件。
要进行这项设置,请导出 OUT_DIR_COMMON_BASE
变量,使其指向将存储输出目录的位置。
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
对于每个单独的源代码树,其输出目录都将以其存放目录命名。
例如,如果您有源代码树 /source/master1
和 /source/master2
,并且 OUT_DIR_COMMON_BASE
设为了 /output
,那么输出目录将为 /output/master1
和 /output/master2
。
在这种情况下,切勿将多个源代码树存储在具有相同名称的目录下,否则会导致输出目录共享终止,并且会出现不可预知的结果。
只有 Jelly Bean (4.1) 及更高版本(包括 master
分支)支持这种做法。
在默认安装过程中,Mac OS 会在一个保留大小写但不区分大小写的文件系统中运行。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status
)的行为出现异常。因此,我们建议您始终在区分大小写的文件系统中对 AOSP 源文件进行操作。使用下文中介绍的磁盘映像可以非常轻松地做到这一点。
有了适当的文件系统,在新型 Mac OS 环境中编译 master
分支就会变得非常简单。要编译较低版本的分支,则需要一些额外的工具和 SDK。
您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。
您也可以通过 shell 使用以下命令创建磁盘映像:
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
这将创建一个 .dmg
(也可能是 .dmg.sparseimage
)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。
如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
对于存储在主目录下的名为 android.dmg
的磁盘映像,您可以向 ~/.bash_profile
中添加辅助函数:
mountAndroid
时装载磁盘映像,请运行以下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
注意:如果系统创建的是 .dmg.sparseimage
文件,请将 ~/android.dmg
替换成 ~/android.dmg.sparseimage
。
umountAndroid
时卸载磁盘映像,请运行以下命令:# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
装载 android
存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。
要查看在开发各种 Android 版本时要使用的 Java 版本,请参阅相关要求。
xcode-select --install
对于较低版本的 Mac OS(10.8 或更低版本),您需要通过 Apple 开发者网站安装 Xcode。如果您尚未注册成为 Apple 开发者,则需要创建一个 Apple ID 才能下载。
通过 macports.org 安装 MacPorts。
注意:请确保在路径中 /opt/local/bin
显示在 /usr/bin
之前。否则,请将以下内容添加到 ~/.bash_profile
文件中:
export PATH=/opt/local/bin:$PATH
注意:如果主目录中没有 .bash_profile
文件,请创建一个。
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
如果您使用 Mac OS X v10.4,还需要安装 bison:
POSIXLY_CORRECT=1 sudo port install bison
在 Android 4.0.x (Ice Cream Sandwich) 及更低版本中,gmake 3.82 中存在一个会导致 Android 无法编译的错误。您可以按照以下步骤使用 MacPorts 来安装 3.81 版:
/opt/local/etc/macports/sources.conf
,在 rsync 行上方添加下面这行内容:file:///Users/Shared/dports
然后创建该目录:
mkdir /Users/Shared/dports
dports
目录下,运行以下命令:svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
portindex /Users/Shared/dports
sudo port install gmake @3.81
在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。
要提高此上限,请将下列行添加到 ~/.bash_profile
中:
# set the number of open files to be 1024
ulimit -S -n 1024
您可以视需要指示编译过程使用 ccache 编译工具,ccache 是适用于 C 和 C++ 的编译器缓存,有助于提高编译速度。这对于编译服务器和其他高容量生产环境来说尤其有用。ccache 可用作用于加快重新编译速度的编译器缓存。如果您经常使用 make clean
,或者经常在不同的编译产品之间切换,则非常适合使用 ccache。
注意:如果您是在执行增量编译(例如个人开发者而非编译服务器),ccache 可能会让您为缓存未命中埋单,从而减慢您的编译速度。
要使用 ccache,请在源代码树的根目录下执行以下命令:
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G
建议的缓存大小为 50G 到 100G。
请将以下内容添加到 .bashrc
(或等同文件)中:
export USE_CCACHE=1
默认情况下,缓存将存储在 ~/.ccache
下。如果主目录位于 NFS 或一些其他的非本地文件系统中,您还需要在 .bashrc
文件中指定目录。
在 Mac OS 中,您应将 linux-x86
替换成 darwin-x86
:
prebuilts/misc/darwin-x86/ccache/ccache -M 50G
在编译 Ice Cream Sandwich (4.0.x) 或更低版本时,ccache 位于其他位置:
prebuilt/linux-x86/ccache/ccache -M 50G
该设置会存储在 CCACHE_DIR 中,并且为永久设置。
在 Linux 中,您可以运行以下命令来观看使用 ccache 时的情况:
watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
预载包是使用Github下载的完整V1.0版本工程里的.repo文件打包而成,可大大减少直接通过Github下载整套代码时间。预载包内的版本比较老旧,获得预载包后再执行repo sync命令即可升级到最新版本。
下载地址: (TBD)
repo init --repo-url git@github.com:aosp-mirror/tools_repo.git
-u git@github.com:rockchip-toybrick/manifests.git
-b develop-11.0
-m default.xml
--depth=1
# 注意:所有命令在同一行,这里方便网页查看才分了多行
如果您可以访问aosp官网,请使用:
<remote fetch="https://android.googlesource.com" name="aosp"/>
如果您在大陆,可以使用清华大学AOSP镜像地址:
<remote fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP" name="aosp"/>
或者中科大AOSP镜像地址:
<remote fetch="git://mirrors.ustc.edu.cn/aosp/" name="aosp"/>
注意:使用其中一个后请注释掉另外两个。
.repo/repo/repo sync
source build/envsetup.sh
lunch
(例如:TB-RK3568X 请选择 rk3568_r-userdebug)
./build.sh -AUCKu -d rk3568-toybrick-core-android-x0
早期Android8.1版本prod编译请执行: (Android11版本prod还在整理中)
./build.sh -b prod
如果编译Kernel时候遇到问题,请参看wiki-“软件开发-Kernel”章节
其中参数:
概述
Android 上的应用预安装功能,主要是指配置产品时,根据厂商要求,将事先准备好的第三方应用预制进 Android 系统。 预安装分为:
l 安装不可卸载应用;
l 安装可永久卸载应用;
l 安装卸载后恢复出厂设置后自动恢复的应用。
功能启用说明
配置和使用
1、cd device/rockchip/rk3399pro 有三个文件夹,分别为: preinstall preinstall_del_forever preinstall_del 分别对应概述中的几种。请将需要预置的应用放入对应的文件夹,注意 apk 文件名尽量使用英文,避免空格。
2、make 之后会在$OUT/oem 目录, 生成对应的文件夹: bundled_persist-app bundled_uninstall_gone-app bundled_uninstall_back-app 仍旧对应概述中的几种。
编译结果 编译后配置文件将会输出到 oem 分区($OUT/oem/),增加后请确认烧写了 oem.img 及 boot.img 来使其生效、misc.img。
1、将 device/rockchip/common/BoardConfig.mk 文件的 BOOT_SHUTDOWN_ANIMATION_RINGING := false,改为 BOOT_SHUTDOWN_ANIMATION_RINGING := true,来打开编译时将文件打包进固件的功能
2、文件放置路径
自Android 7.0开始,动画与铃音合并。 将开机的动画(及铃声)复制到:device/rockchip/common/bootshutdown/bootanimation.zip (PC 源码路径) 将关机的动画(及铃声)复制到:device/rockchip/common/bootshutdown/shutdownanimation.zip (PC 源码路径)
3、编译android工程
铃音将会输出到 oem 分区($OUT/oem/media/), 增加后请确认烧写了 oem.img 及boot.img 来使其生效。
4、文件说明
开机铃声必须是要 wav 格式的音乐文件。 关机铃声必须是要 wav 或者 ogg 格式的音乐文件。 开机动画(铃音)在设备上的存放的路径为:/oem/media/bootanimation.zip 关机动画(铃音)在设备上的存放的路径为:/oem/media/shutdownanimation.zip 动画制作方法:http://blog.sina.com.cn/s/blog_4960586c0100vu5v.html