Colección de citas famosas - Slogan de motivación - Introducción al entorno de construcción de aprendizaje de Android

Introducción al entorno de construcción de aprendizaje de Android

Aquí, me saltaré la explicación del marco del sistema de archivos de Android en teléfonos móviles (Google o Baidu pueden ayudarlo a encontrar la información correspondiente), principalmente para ver cómo Google integra el trabajo de generar rootfs adecuados en su sistema de compilación. Al mismo tiempo, echaré un vistazo al mecanismo de construcción correspondiente a varios modelos en CyanogenMod.

Primero, echemos un vistazo a las opciones de compilación y las herramientas relacionadas que utiliza el sistema de compilación de Android.

El directorio específico se encuentra en: mydroid/build/tools/

| - ACP Group

Este es un comando cp ligeramente mejorado, utilizado para procesar Windows. / Defectos del comando cp en MAC/Linux, ¡vale la pena leer el archivo Léame!

| -Banco Asiático de Desarrollo

Esta es una herramienta para ver problemas de fallas. Para obtener más información, consulte adbs de la herramienta de depuración de Android.

| - Android.mk

| - apicheck

Se utiliza para comprobar la API antes del lanzamiento (consulte mi droid/build/core/tasks/API check. MK) para ver si hay violaciones de compatibilidad de API o API ilegales en el sistema recién compilado.

El código aquí es un archivo xml escrito en Java (en mydroid/framework/base/api/) para verificar la información de la API generada durante la compilación. Puede consultar el código para analizar archivos xml.

| - A priori

Una herramienta para implementar la vinculación previa. Consulte (my droid/bionic/linker/readme. txt) para obtener una breve introducción.

| -Atree

Una herramienta del servicio SDK de Android, utilizada para realizar algunas operaciones de archivos en función del contenido del archivo xxx.atree especificado.

| - bin2asm

No entiendo muy bien el uso específico. Debería usarse para solucionar algunos problemas relacionados con la compilación de gcc de Android en Mac.

| - buildinfo.sh

Genera varios archivos xxx.prop en el destino, como system.prop, build.prop, etc.

| - check_builds.sh

Diff se ajusta para ver los cambios entre dos versiones.

| - Verificar requisitos previos

Una de las herramientas para la actualización ota en el dispositivo.

| - compare_fileslist.py

Utilice check_builds.sh para completar el script de comparación de versiones

| droiddoc

Android tiene algún trasplante de javadoc .

| -Dump-Package-Statistics

Simplemente verifique la información de tamaño de dex y otros archivos en el archivo jar/apk.

| - etiqueta de registro de eventos.py

Maneja el contenido de la etiqueta de registro de eventos. Con respecto al significado de los archivos de etiquetas de registro de eventos, consulte ¿Qué son las etiquetas de registro de eventos para el aprendizaje de Android?

| - fileslist.py

Script simplificado que enumera todos los archivos y tamaños en un directorio específico; puede colocarlo en su propia biblioteca de herramientas :)

| - findleaves.py

Scripts (múltiples) que encuentran el archivo especificado en el directorio especificado; puede colocarlo en su propia biblioteca de herramientas para usarlo :)

| sh

Cambie los saltos de línea en Windows a Linux; puede usarlos en su propia biblioteca de herramientas :)

| -Configuración del sistema de archivos

Listar permisos para carpetas y archivos especificados.

| -El sistema de archivos obtiene el estado

Obtiene estadísticas simples de los archivos en la carpeta especificada.

| -Myself

Determina si el archivo está en formato ELF.

| - isprelinked

Determina si el archivo está previnculado.

| - java-event-log-tags.py

Maneja el contenido de las etiquetas del registro de eventos. Con respecto al significado de los archivos de etiquetas de registro de eventos, consulte ¿Qué son las etiquetas de registro de eventos para el aprendizaje de Android?

| - kcm

Herramientas para mapear caracteres clave, consulte:

| - LSD

! ! ! ! ! !

| -merge-event-log-tag.py

Procesa el contenido de las etiquetas del registro de eventos. Con respecto al significado de los archivos de etiquetas de registro de eventos, consulte ¿Qué son las etiquetas de registro de eventos para el aprendizaje de Android?

| - mktarball.sh

Herramienta de empaquetado ejecutada con fs_get_stats.

|-print_module_license.sh

Muestra toda la información del módulo en el directorio actual.

| -Herramienta de publicación

-Verificar firma del archivo de destino

| - common.py

| >

| -img de target_file

| -OTA_from_target_file

` -signed_target_file_apks

| - rgb2565

Herramienta de conversión RGB

| - signapk

herramienta de firma de paquetes jar bajo la línea de comando

| - Soslin

Una de las herramientas de compilación personalizadas de Android. Consulte (my droid/bionic/linker/readme. txt) para obtener una breve introducción.

| - warn.py

Una herramienta para analizar los registros de compilación del sistema Android

`- zipalign

Herramienta de alineación de archivos zip, consulte LÉAME. TXT se coloca en esta carpeta.

#p#subtitle#e#

Echemos un vistazo a algunos archivos XXX.mk comunes definidos en el sistema compilador de Android.

mydroid/build/core/

| - armelflib.x

| - armelf.x

| /p>

| - base_rules.mk

| - binario.mk

| - build_id.mk

|-build-system.html

| - comprobar árbol

| - cleanbuild.mk

| - cleanspec.mk

|

| - combinaciones

| - config.mk

| - copy_headers.mk

| - dispositivo.mk

| - dex_preopt.mk

| - distdir.mk

| - droiddoc.mk

| .mk

| -dynamic_binary.mk

| - envsetup.mk

| - ejecutable.mk

| sh

| - buscar-jdk-tools-jar.sh

| - ayuda.mk

| | - host_java_library.mk

| - host_native_test.mk

| - host_pre build

| >| - biblioteca estática del host.mk

| - java_library.mk

| - java.mk

| >

| - main.mk

| - Makefile

| - multi_precompilación

|

| - node_fns.mk

| - aviso_files.mk

| - paquete.mk

| /p>

| - precompilación . MK

| - contenedor de proceso gdb.cmds

| - Process_wrapper_gdb.sh

| sh

| - configuración del producto.

| - producto.mk

| - proguard.flags

|

| - raw_executable.mk

| - raw_static_library.mk

| - root.mk

| p>

| - static_java_library.mk

| - static_library.mk

| -Tarea

| >`- version_defaults.mk

#p#subtitle#e#

Aquí, el directorio está en mydroid/build/co

Hay algunas tareas especiales en re/tasks/

| - apicheck.mk, que determinan si la API cumple con las especificaciones AOSP.

| - cts.mk prueba cts, puede ejecutar el comando cts en el directorio raíz del código para habilitar cts. Después de la compilación, ingrese /host/linux-x86/bin/.

|-ide.mkide entorno de desarrollo

| -product map.mk

`- sdk-addon.mk

NDK El El entorno de compilación no está contenido en el directorio /build/ etiquetado como AOSP raro.

Pero bajo mydroid/ndk/build.

$ cd ndk/build/tools

$ export ANDROID _ NDK _ ROOT = aosp-ROOT/ndk

$ ./make-release -help

Algunos consejos

¿Cómo mostrar todos los archivos xxx.mk incluidos en cada compilación?

Busca build/core/main.mk.

Reemplazar include $(subdir_makefiles) con

[plain] Ver copia simple $(foreach subdir _ makefile, $(subdir_makefiles),

$(include $ (subdir_makefile) información)

$(eval include $(subdir_makefile)))

subdir_makefile :=

Si encuentra API de empaquetado/comprobación relacionada con API- marca de tiempo actual] Error 38.

Necesita ejecutar: actualizar API

Cómo compilar fuera del directorio de códigos AOSP

[plain]Ver la #ruta y la configuración de copia simple

Producto de destino=genérico

ANDROID_ROOT =/home/Karim/ANDROID/aosp-2.3.x

BIONIC_LIBC = $(ANDROID_ROOT)/BIONIC/libc

product_output=$(ANDROID_ROOT)/output/target/product/$(target_product)

cross-compile=

$(ANDROID_ROOT) /prebuild/Linux-x86/cadena de herramientas /arm-eabi-4 4 . 3/bin/arm-eabi-

#Nombre de herramienta

AS = $(CROSS_COMPILE) como

AR = $(CROSS_COMPILE)ar

CC = $(compilación cruzada)gcc

CPP = $(CC) -E

LD = $(compilación cruzada )LD

NM = $(compilación cruzada)NM

OBJCOPY = $(CROSS _ COMPILE)OBJCOPY

OBJDUMP = $(CROSS _ COMPILE)OBJDUMP

RANLIB = $(CROSS_COMPILE)ranlib

READELF = $(CROSS _ COMPILE)READELF

SIZE = $(CROSS_COMPILE) Tamaño

STRINGS = $(CROSS_COMPILE) cadena

STRIP = $(CROSS_COMPILE)strip

Exportar como AR CC CPP LD NM copia obj volcado de obj RANLIB READELF

Tamaño tiras de cuerda

#Configuración de construcción

CFLAGS =-O2-Wall-fno-short-enum

HEADER_OPS = - I$(Bionic_ LIBC)/brazo de arco /contiene

-I$(Bionic_ LIBC)/core/general

-I$(Bionic_ LIBC)/core/arch ARM

LDFLAGS = -nostdlib -Wl, -dynamic-linker, /system/bin/linker

$(PRODUCT_OUT)/obj/lib/CRT start_dynamic .o

$(PRODUCT_OUT)/obj/ lib/Cr tend_Android .o

-L $(PRODUCT_OUT)/obj/lib-LC-LDL

#Variables de instalación

EXEC_NAME =. Aplicación de ejemplo

INSTALL=INSTALL

INSTALL _ DIR = $(PRODUCT _ OUT)/system/ bin

Número de archivos necesarios para compilar

OBJS =example-app.o

#Crear reglas

Todos:ejemplo-app.o

c.o:

$(CC)$(CFLAGS)$(HEADER _ OPS)-c { 1 } lt

Ejemplo-Aplicación: ${OBJS}

$(CC)-o; $(EXEC _ NAME)$ { OBJS } $(LD flags)

Instalación: Ejemplo-Aplicación

test -d

$(directorio de instalación)|| $(instalación)-d -m 755 $(directorio de instalación)

$(instalación)-m 755 $(nombre de ejecución)$(directorio de instalación)

Limpiar:

rm -f *. o $(nombre de ejecución)core

distclean:

rm -f *~

rm -f *. o $(nombre de ejecución) core

Cómo agregar un nuevo dispositivo

[plain]Ver copia simple $ CD ~/Android/aosp-2.3 .x

$ .build/envsetup.sh

$ mkdir -p devices/acme/coyotepad

$ cd devices/acme/coyotepad

Ir a AndroidProducts.mk

PRODUCT_MAKEFILES :=

$(LOCAL_DIR)/full_coyotepad.mk

Para full_coyotepad.mk

$(llame a heredar-producto, $( SRC _ TARGET _ DIR)/producto/idiomas _ full MK)

$(llamar a heredar-producto, $(SRC _ TARGET _ DIR)/product/full . MK)

DEVICE_PACKAGE_OVERLAYS :=

Paquete de producto+=

Archivo de copia de producto+=

NOMBRE_PRODUCTO := full_coyotepad

Dispositivo_producto:= coyotepad

PRODUCT_MODEL:= Android completo en coyote pad, meep-meep

En BoardConfig.mk

target_none_kernel:=true

TARGET_NO_BOOTLOADER := verdadero

Target_CPU_ABI := armeabi

BOARD_USES_GENERIC_AUDIO := verdadero

USE_CAMERA_Stub:= verdadero

Abrir proveedorsetup.sh

add _ lunch _ combo full _ coyote pad-eng

#p#subtitle#e#