【Android】Ubuntu20.04 compila Android 13 y lo ejecuta con el emulador

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 -vpara ver si está instalado, si no, vaya a Microsoft Storela tienda para descargar e instalar Linux:

Insertar descripción de la imagen aquí
Si se muestra la siguiente información, se ha instalado wsl2.
Insertar descripción de la imagen aquí

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 StoreInstalar, 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
Insertar descripción de la imagen aquí

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:, wslla otra es hacer clic en la ventana cmd:
Insertar descripción de la imagen aquí
y luego ingresar al sistema Utbuntu, que es casi el mismo que el sistema Ubuntu: este
Insertar descripción de la imagen aquí
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 installinstalar 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 repoy luego copiarlo al /bindirectorio.

Verificar el iniciador de repositorio:

Ejecute repo versionel comando para verificar
Insertar descripción de la imagen aquí
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 initel 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 xxxel comando nuevamente.

Insertar descripción de la imagen aquí

La pantalla indica repo has been initializedque 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í:
Insertar descripción de la imagen aquí
Entre ellos packeages/appsse encuentran los códigos fuente de algunas aplicaciones que vienen con el sistema. Por ejemplo, Launcher3es la aplicación de escritorio predeterminada del sistema.
Insertar descripción de la imagen aquí

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:

Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí

Todos los objetivos de compilación toman BUILD-BUILDTYPEla forma , donde BUILDhay un nombre en clave que representa una combinación específica de características. BUILDTYPEEs 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.imgarchivo 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ó.
Insertar descripción de la imagen aquí
Lo anterior es un aviso para una compilación exitosa.

Luego out/target/productpuede 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:
Insertar descripción de la imagen aquí
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:
Insertar descripción de la imagen aquí
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

Insertar descripción de la imagen aquí
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 emulatorcomando 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-imagesgenerará . 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:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/devnn/article/details/131868022
Recomendado
Clasificación