Prefacio
Siempre he tenido curiosidad por saber cómo se personaliza el sistema Android, no fue hasta que pasé por el proceso de compilación del sistema Android que me di cuenta de que no es tan complicado como imaginaba.
Esto es como el desarrollo de aplicaciones. Google proporciona oficialmente plataformas, documentos, IDE y algunas herramientas. Sólo debemos seguir las pautas oficiales.
Si Android no proporcionara un sistema abierto y un ecosistema tan completo, no podríamos desarrollar varias aplicaciones y varios sistemas Android personalizados.
El desarrollo de Android generalmente se divide en dos direcciones, una es el desarrollo de aplicaciones y la otra es el desarrollo de marcos. Debido a que Android es diferente de iOS, Android es de código abierto, lo que significa que no sólo puedes desarrollar aplicaciones, sino también modificar su sistema y trasplantarlo a tu propia plataforma de hardware, como teléfonos móviles, tabletas, sistemas de automóviles, etc. Para este último, se trata esencialmente de desarrollar una aplicación, pero a menudo es necesario lidiar con el marco y la capa hal. Como Xiaomi, Huawei y Oppo, etc. Simplemente reemplazan la aplicación ranchera, la aplicación de configuración, la aplicación de cámara, la aplicación de tienda, etc. del sistema Android nativo con sus propias aplicaciones.
Volvamos al asunto, compartamos cómo compilar el código fuente de Android en el entorno de máquina virtual wsl de Windows y luego ejecutarlo en el emulador de Android. Este proceso no es tan sencillo como se esperaba y es necesario superar algunos obstáculos para encontrar el camino.
Requisitos de hardware
Los siguientes son los requisitos mínimos de hardware anunciados oficialmente por Google:
-
Si está compilando Android 2.3.x (Gingerbread) y superior (incluida la rama maestra), se requiere un entorno de 64 bits. Si es una versión anterior, se puede compilar en un sistema de 32 bits.
-
Si desea verificar el código, necesita al menos 250 GB de espacio libre en el disco; si desea compilarlo, necesita 150 GB adicionales. Si está realizando varias compilaciones, necesitará más espacio.
Nota: Si está revisando la imagen, necesitará más espacio porque la imagen completa del Proyecto de código abierto de Android (AOSP) contiene todas las bases de código Git utilizadas. -
Se requieren al menos 16 GB de RAM disponible, pero Google recomienda 64 GB.
A partir de junio de 2021, Google utiliza una máquina de 72 núcleos con 64 GB de RAM incorporada y el proceso de compilación completo demora aproximadamente 40 minutos (las compilaciones incrementales solo demoran unos minutos, según los archivos que se modificaron). En comparación, una máquina de 6 núcleos con una cantidad similar de RAM tardaría 3 horas en realizar el proceso de construcción completo.
Requisitos de Software
Los siguientes son los requisitos de software anunciados oficialmente por Google:
Sistema operativo: Ubuntu 18.04 y superior
A partir del 22 de junio de 2021, Google ya no admitirá la compilación en Windows o MacOS.
La rama maestra de Android en JDK AOSP viene con una versión prediseñadas de OpenJDK; por lo tanto, no se requiere instalación adicional.
Las versiones anteriores de Android requieren una instalación JDK por separado. En Ubuntu, use OpenJDK.
La
rama maestra de AOSP del paquete principal viene con una versión prediseñada de Make, por lo que no es necesario instalarla por separado. De manera similar, Git se instala durante la configuración del entorno de compilación.
Asegúrese de que su sistema tenga Python 3 instalado.
Entorno de compilación del autor.
El siguiente es el entorno de hardware y software utilizado por el autor para compilar Android 13 con éxito:
Sistema de máquina física: Windows 11 Home Edition
CPU: Intel core i7
Memoria: 32 GB
Disco duro: 1 TGB libre.
Máquina virtual: máquina virtual Wsl2
Sistema: Ubuntu 20.04.6 LTS
La descarga del código fuente de AOSP depende de la velocidad de Internet, lo que lleva aproximadamente media hora. Se necesitan aproximadamente 1 hora para compilar Android 13 utilizando el entorno anterior.
Instalar wsl2
Si no tiene una máquina Linux física, necesita usar una máquina virtual. Si su computadora es Windows 10 u 11, se recomienda utilizar el software oficial de máquina virtual de Windows wsl2 (windows sub linux 2). La primera versión de wsl no tenía un kernel de Linux completo hasta que Microsoft lanzó wsl2, que se acerca más al Sistema operativo Linux real. Esto es mucho más simple y conveniente que instalar el software de máquina virtual vmware y se inicia muy rápidamente.
Instalar wsl es relativamente simple, primero ingrese: en la línea de comando de Windows wsl -l -v
para ver si está instalado, si no, vaya a Microsoft Store
la tienda para descargar e instalar Linux:
Si se muestra la siguiente información, se ha instalado wsl2.
Al instalar wsl, tenga cuidado de no instalarlo en la unidad c. Si lo instala en la unidad c, el espacio en disco ocupado por la máquina virtual será el espacio en la unidad c, lo que provocará que no haya suficiente espacio en el disco del sistema. . Se recomienda instalar wsl en una partición de disco independiente y asegurarse de que la partición del disco tenga al menos 300 GB de espacio restante.
Al hacer clic en Microsoft Store
Instalar, se instalará en la unidad c de forma predeterminada, pero no importa, puedes migrarlo a otras unidades más adelante.
Si lo instaló accidentalmente en la unidad c, puede migrarlo a otra unidad. Los pasos son los siguientes:
Cerrar wsl:wsl --shutdown
Ver estado de WSL:wsl -l --all -v
Si el estado es Detenido, exporte la imagen de la máquina virtual a la unidad E:
wsl --export Ubuntu-20.04 E:\wsl-ubuntu20.04.tar
Tardará unos minutos.
Dar de baja la distribución actual
wsl --unregister Ubuntu-20.04
Ver el estado de wsl:
wsl -l -v
(Si dice "El subsistema de Windows para Linux no tiene distribución instalada", continúe con los siguientes pasos)
Vuelva a importar e instalar en E:\wsl-ubuntu20.04
wsl --import Ubuntu-20.04 E:\wsl-ubuntu20.04 E:\wsl-ubuntu20.04.tar --version 2
Establezca el usuario de inicio de sesión predeterminado en el nombre de usuario durante la instalación
ubuntu2004 config --default-user [Username]
Eliminar archivo tar (opcional)
del E:\wsl-ubuntu20.04.tar
iniciar wsl
Hay dos formas de iniciar wsl, una es usar el comando:, wsl
la otra es hacer clic en la ventana cmd:
y luego ingresar al sistema Utbuntu, que es casi el mismo que el sistema Ubuntu: este
es Ubuntu sin interfaz gráfica. , gráfica La interfaz no es necesaria y todas las operaciones para compilar Android se pueden realizar en este entorno de línea de comandos.
Configurar la fuente de actualización del software de Ubuntu
A continuación, debe apt get install
instalar una gran cantidad de software (es decir, algunos comandos) que se descargarán a través del muro. Para evitar eludir el muro, debe configurar la fuente de actualización del software en una fuente doméstica. Se recomienda para utilizar la fuente de Adi Cloud:
Copia de seguridad de la fuente anterior:
sudo cp/etc/apt/sources.list /etc/apt/sources.list.bak
Configurar una nueva fuente:
sudo vim /etc/apt/sources.list
Pega lo siguiente y guarda:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
Configurar el entorno de compilación de Linux
Instale los paquetes necesarios (Ubuntu 18.04 y superior)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
Instalar Git
Ejecute el comando git. Si no está instalado, simplemente siga las instrucciones.
Instalar el iniciador de repositorios
repo es un software de línea de comandos proporcionado por Google para administrar el código fuente de Aosp, simplifica algunas operaciones de git y no se utiliza para reemplazar a git.
Comando de instalación:
sudo apt-get update
sudo apt-get install repo
o:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
Si no se puede instalar ninguno de los métodos anteriores, también puede descargarlo manualmente repo
y luego copiarlo al /bin
directorio.
Verificar el iniciador de repositorio:
Ejecute repo version
el comando para verificar
que si se muestra la información anterior, es normal. Este es solo un lanzador de repositorios, aún no inicializado.
InicializarRepo
Cree un directorio vacío para almacenar el código fuente de Aosp, como Aosp:
mkdir Aosp
cd Aosp
Para todos los comandos posteriores completados en Linux, el directorio de trabajo no cambiará, es decir, en el directorio raíz de Aosp recién creado.
Al utilizar repo init
el almacén de inicialización, debe especificar la dirección de la biblioteca de códigos durante la inicialización, que es la dirección al final del manifiesto. Debido a que esta biblioteca es relativamente grande y está ubicada en el extranjero, se recomienda utilizar la imagen Aosp de la Universidad de Tsinghua. Inicialice el repositorio y configure la rama que se va a verificar en android-13.0.0_r60. También puede usar master u otras ramas en su lugar.
Comando de inicialización:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r60
El parámetro -u especifica la dirección del almacén y -b especifica la sucursal que se va a retirar.
Este paso es solo para inicializar el repositorio. El código fuente de Aosp aún no se ha descargado oficialmente. Descargará algunos archivos relacionados con el comando del repositorio.
Si recibe un error:, /usr/bin/env 'python' no such file or directory”
significa que no se encuentra el comando de Python y necesita establecer un enlace suave a Python3:
sudo ln -s /usr/bin/python3 /usr/bin/python
Luego simplemente ejecute repo init xxx
el comando nuevamente.
La pantalla indica repo has been initialized
que la inicialización se realizó correctamente.
Descargar el código fuente de Android
repo sync
Después de ejecutar el comando anterior, descargue el código fuente de Aosp y el archivo del código fuente se descargará en el directorio de trabajo actual. El código fuente tiene más de cien gigabytes y tarda unos 30 minutos.
Este paso suele ser relativamente sencillo porque la imagen continental utilizada es relativamente rápida.
Una vez completada la descarga, el directorio se ve así:
Entre ellos packeages/apps
se encuentran los códigos fuente de algunas aplicaciones que vienen con el sistema. Por ejemplo, Launcher3
es la aplicación de escritorio predeterminada del sistema.
Construir sistema Android
(1) Inicializar el entorno del script:
source build/envsetup.sh
o
. build/envsetup.sh
(2) Seleccione el objetivo de compilación:
lunch sdk_pc_x86_64-userdebug
Si usa el comando lanch sin parámetros, se le pedirá que seleccione un objetivo:
Todos los objetivos de compilación toman BUILD-BUILDTYPE
la forma , donde BUILD
hay un nombre en clave que representa una combinación específica de características. BUILDTYPE
Es uno de los siguientes tipos:
Tipo de construcción | Uso |
---|---|
usuario | Permisos restringidos; adecuado para entornos de producción. |
depuración de usuario | Similar a "usuario", pero con permisos de root y capacidades de depuración; tipo de compilación preferido para depurar |
eng | Configuración de desarrollo con herramientas de depuración adicionales. |
Debido a que debe compilarse en una imagen de Android ejecutada por el emulador, el entorno del emulador es x86_64. Entonces elija x86_64. El sufijo userdebug indica que es una versión depurable.
En este caso, la selección es sdk_pc_x86_64-userdebug
.
Tenga cuidado de no seleccionarlo aosp_x86_64-eng
. Después de la verificación, se descubrió que no había ningún userdata.img
archivo después de la compilación, no sé por qué.
(3) Comience a construir:
m
Simplemente ingrese el comando m y presione Enter. m es la abreviatura de make, que significa comenzar a ejecutar el script de compilación.
Este paso demora entre 1 y 2 horas, según la configuración de su hardware.
El proceso de compilación mostrará el progreso. Si muestra 100%, significa que la compilación se completó.
Lo anterior es un aviso para una compilación exitosa.
Luego out/target/product
puede ver en el directorio que se genera una carpeta después de la compilación: emulator64_x86_64,
que contiene imágenes del emulador y otros archivos:
puede ver que contiene tres imágenes del sistema Android: system.img
, ramdisk.img
, userdata.img
.
El archivo zip rojo fue empaquetado por el autor mediante el comando de empaquetado de imágenes. No existe cuando se completa la compilación. El comando de empaquetado se presentará más adelante.
(4) Manejo de errores de compilación
Durante el proceso de compilación, si aparece el código de error 137, significa memoria insuficiente:
Solución: puede usar el comando gratuito para verificar la memoria de Ubuntu. Si descubre que no coincide con la memoria de la máquina física, simplemente modifíquelo para que sea consistente con memoria de la máquina física. Si usa wsl, puede crear un archivo .wslconfig en el directorio raíz del usuario de Windows con el siguiente contenido:
[wsl2]
memory=32GB # Limits VM memory in WSL 2
processors=12 # Makes the WSL 2 VM use 12 virtual processors
localhostForwarding=true # Boolean specifying if ports bound to wildcard or localhost in the WSL 2 VM should be connectable from the host via localhost:port.
Una vez que la compilación sea exitosa, ejecute el comando del emulador para iniciar el emulador y ejecutar el sistema compilado:
emulator
Si se informa el error anterior: ProbeKVM: este usuario no tiene permisos para usar KVM (/dev/kvm). Es
necesario agregar permisos:sudo chmod -R 777 /dev/kvm
Ejecutar en Windows
El emulator
comando anterior es para ejecutar el emulador en Ubuntu, lo que provocará un retraso y la pantalla seguirá parpadeando. Se recomienda ejecutarlo en el sistema Windows utilizando el emulador creado por Android Studio.
Primero empaquete la imagen de Android:
Android13 usa los siguientes comandos:
make sdk sdk_repo
Utilice el comando en Android13 y superior:
make emu_img_zip
Una vez completado el empaquetado, se sdk-repo-linux-system-images
generará . Por ejemplo, mi ruta es:
Aosp/out/target/product/emulator64_x86_64/sdk-repo-linux-system-images-eng.devnn.zip
Descomprímalo localmente o cópielo a una carpeta en el sistema Windows y luego descomprímalo.
El autor optó por copiar a la unidad D. La ubicación después de la descompresión es:D:\Downloads\sdk-repo-linux-system-images-eng.devnn
Luego crea un emulador en Android Studio y asígnale un nombre aleatorio Pixel_5_WSL
.
Inicie el emulador en la línea de comando de Windows y cargue el sistema Android recién empaquetado:
emulator -avd Pixel_5_WSL -sysdir D:\Downloads\sdk-repo-linux-system-images-eng.devnn\x86_64 -dns-server 8.8.8.8,114.114.114.114 -verbose
El comando del emulador anterior se encuentra en el directorio de herramientas del SDK de Android. El directorio de herramientas se ha agregado a la ruta de la variable de entorno.
El efecto de ejecución es el siguiente:
Hasta ahora, Android 13 se ha compilado y ejecutado correctamente.
Por supuesto, podemos personalizar nuestro sistema Android, simplemente modificar el código fuente correspondiente y volver a empaquetarlo.
Por ejemplo, lo más habitual es utilizar una propia app como Launcher predeterminado para el inicio del sistema. Una vez completado el desarrollo, modifique el archivo mk correspondiente y vuelva a empaquetarlo.