Decidi compartilhar minhas instruções sobre como construir AOSP (Android Open Source Project). Este manual será útil para quem deseja ver algo dentro do Android e possivelmente fazer desenvolvimento de sistemas. De qualquer forma, esse conhecimento é útil para entender o próprio Android, só para isso decidi construir o AOSP.
Eu construí o projeto no elementary 5.1 OS Ubuntu 18.04 LTS (biônico), tentei construí-lo no MacOS, mas falhou. Para origens e montagem, você precisa de 200 GB de espaço no disco rígido (melhor que SSD, no desempenho normal ele diminui muito). Também gastei muito tempo para baixar e montar cerca de 20 horas, em parte culpado pela configuração "fraca" do meu computador. Tenho apenas 8 GB de RAM instalado, mas aumentei o tamanho do swap para 16 GB.
Carregando AOSP
Instale os pacotes necessários para download e compilação:
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
Crie uma pasta e baixe o utilitário repo para baixar o código-fonte
mkdir aosp #
cd aosp
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
Os fontes AOSP consistem em projetos separados com seus próprios repositórios git, o repo permite que você simplifique todo o download de todos os projetos e os coloque nas pastas necessárias.
Inicializando o repo
./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest
Parâmetros:
- -u - url do repositório git com manifesto
- -b - branch (mais recente no momento)
- —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
No projeto, adicione uma nova configuração remota, especifique apenas a porta 8700. É a esta porta que iremos conectar
Execute a depuração (Executar → Depurar)
Para se certificar de que tudo está conectado, coloque um ponto de interrupção no arquivo frameworks / base / services / core / java / com / android / server / wm / ActivityTaskManagerService.java para o método:
// 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) {
//...
}
e execute qualquer aplicativo no emulador (por exemplo, Configurações).
Agora tudo está pronto para experimentar.