我决定分享有关如何构建AOSP(Android开放源代码项目)的说明。对于那些希望在Android内部查看内容并可能进行系统开发的人员来说,此说明将非常有用。无论如何,这些知识对于理解Android本身都是有用的,为此我决定构建AOSP。
我在基本5.1操作系统Ubuntu 18.04 LTS(仿生)上构建项目,我试图在MacOS上构建它,但失败了。对于源代码和程序集,您需要200 GB的硬盘空间(比SSD更好,因为在正常性能下它会大量下垂)。我还花了很多时间来下载和组装大约20个小时,部分原因是计算机的“弱”配置。我只安装了8 GB的RAM,但是将交换的大小增加到16 GB。
加载AOSP
安装所需的软件包以进行下载和构建:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
创建一个文件夹并下载repo实用程序以下载源代码
mkdir aosp #
cd aosp
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
AOSP源代码由具有各自git存储库的单独项目组成,repo允许您简化所有项目的整个下载并将它们放在必要的文件夹中。
初始化仓库
./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest
参数:
- -u-带有清单的git存储库的url
- -b-分支(当前最新)
- —depth — ( , , )
Android 10. develop master, .
AOSP
./repo sync -c -j $(nproc) --no-tags --no-clone-bundle
:
- -c — ( — android-10.0.0_r45)
- -j — ,
- —no-tags —
- —no-clone-bundle — clone.bundle ( , , bundle),
—no-clone-bundle , , 404
, repo , : https://source.android.com/setup/develop/repo
:
source build/envsetup.sh
lunch aosp_x86_64-eng
x86_64 — , Generic x86_64 , Nexus , https://source.android.com/setup/build/building#choose-a-target
eng — ( engineering), .
java Heap size, , StackOverflow :
export _JAVA_OPTIONS="-Xmx4g"
.bashrc
, :
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(nproc)
CCACHE, , . "" - 16 .
, :
emulator -show-kernel
-show-kernel —
Enter,
,
IDE
IDE, IDEA. :
mmm development/tools/idegen
AOSP ,
development/tools/idegen/idegen.sh
IDEA "". . IDEA , Android
development/tools/idegen/intellij-gen.sh frameworks/base
cat .repo/project.list
base.iml ( frameworks/base) IDEA. Java, java , AOSP- .
monitor
~/Android/Sdk/tools/lib/monitor-x86_64/monitor
jre
sudo apt install openjdk-8-jre-headless
, . monitor- /8700, , IDEA.
system_process. .
monitor AOSP
在项目中,添加新的远程配置,仅指定端口8700。我们将连接到此端口
运行调试(运行→调试)
为了确保一切都已连接,请在frameworks / base / services / core / java / com / android / server / wm / ActivityTaskManagerService.java文件中添加一个断点到该方法:
// line 1040
int startActivityAsUser(IApplicationThread caller, String callingPackage,
Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,
boolean validateIncomingUser) {
//...
}
并在模拟器上运行任何应用程序(例如“设置”)。
现在一切准备就绪,可以进行实验。