Descarga y compilación de AOSP

Decidí compartir mis instrucciones sobre cómo construir AOSP (Proyecto de código abierto de Android). Este manual será útil para aquellos que quieran ver algo dentro de Android y posiblemente desarrollar sistemas. En cualquier caso, este conocimiento es útil para entender el propio Android, solo por esto decidí construir AOSP.



Construí el proyecto en el sistema operativo 5.1 elemental Ubuntu 18.04 LTS (biónico), intenté construirlo en MacOS, pero fallé. Para las fuentes y el ensamblaje, necesita 200 GB de espacio en el disco duro (mejor que SSD, en un rendimiento normal se hunde mucho). También dediqué mucho tiempo a descargar y ensamblar alrededor de 20 horas, en parte debido a la configuración "débil" de mi computadora. Solo tengo 8 GB de RAM instalados, pero aumenté el tamaño del intercambio a 16 GB.



Cargando AOSP



Instale los paquetes necesarios para descargar y compilar:



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


Cree una carpeta y descargue la utilidad de repositorio para descargar el código fuente



mkdir aosp #     
cd aosp

curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo


Las fuentes de AOSP consisten en proyectos separados con sus propios repositorios git, el repositorio le permite simplificar la descarga completa de todos los proyectos y colocarlos en las carpetas necesarias.



Inicializando el repositorio



./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest


Parámetros:



  • -u - URL del repositorio de git con manifiesto
  • -b - rama (más reciente en este 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- .



Configurar Java en un proyecto





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 de Android



En el proyecto, agregue una nueva configuración remota, solo especifique el puerto 8700. Es a este puerto al que nos conectaremos



Agregar configuración remota a IDEA



Ejecutar depuración (Ejecutar → Depurar)



Para asegurarse de que todo esté conectado, coloque un punto de interrupción en el archivo frameworks / base / services / core / java / com / android / server / wm / ActivityTaskManagerService.java al 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) {
//...
}


y ejecute cualquier aplicación en el emulador (por ejemplo, Configuración).



Ahora todo está listo para experimentar.




All Articles