Baixando e criando AOSP

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,



,

Emulador



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- .



Configurando Java em um projeto





monitor



 ~/Android/Sdk/tools/lib/monitor-x86_64/monitor


jre

sudo apt install openjdk-8-jre-headless

, . monitor- /8700, , IDEA.

system_process. .



monitor AOSP

monitor do Android



No projeto, adicione uma nova configuração remota, especifique apenas a porta 8700. É a esta porta que iremos conectar



Adicionar configuração remota ao IDEA



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.




All Articles