#第一行肯定要是文件注释了。This file is to build Settings.apk.
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Settings
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
La ruta del archivo es Android.mk paquete / app / Configuración / Android.mk, para analizar el archivo
GNU make 'función' macro debe ser invocado usando '$ (llamada)', van a devolver la llamada al texto del mensaje.
-------------------------------------------------- -------------------------------------------------- --------------------------
(1) LOCAL_PATH: = $ (llamar a mi-dir)
Android.mk archivo debe definir primero una buena variables de LOCAL_PATH. Se utiliza para encontrar los archivos de origen en el árbol de desarrollo.
Función macro 'mi-dir', proporcionado por el sistema compilador, un trayecto de corriente de retorno (es decir, directorio de archivos Android.mk que contiene el archivo).
-------------------------------------------------- -------------------------------------------------- --------------------------
(2) Android.mk compilador puede definir una pluralidad de módulos, cada módulo se compila para incluir $ (CLEAR_VARS) empieza a incluir extremos $ (BUILD_XXX).
(2.1) incluyen $ (CLEAR_VARS)
CLEAR_VARS refiere clear_vars.mk, proporcionada por el sistema compilador, que hará que GNU MAKE que borrar todas las variables distintas de LOCAL_PATH LOCAL_XXX, como LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_SHARED_LIBRARIES, LOCAL_STATIC_LIBRARIES y así sucesivamente.
Esto es necesario, ya que todos los archivos de control se compilan en el mismo entorno de ejecución MAKE GNU, todas las variables son globales.
(2.2) incluyen $ (BUILD_PACKAGE) # Envía a construir un APK
$ (BUILD_PACKAGE) se compila para generar apk paquete / app / pulg.
Hay varios otros casos compilados:
incluir $ (BUILD_STATIC_LIBRARY) expresó compilados en una biblioteca estática
incluir $ (BUILD_SHARED_LIBRARY) representa una DLL compilada
incluir $ (BUILD_EXECUTABLE) representa el ejecutable compilado
Por ejemplo, salta a la siguiente "extendida"
-------------------------------------------------- -------------------------------------------------- --------------------------
(3) LOCAL_MODULE_TAGS: = opcional
resolución:
LOCAL_MODULE_TAGS: = pruebas eng de usuario opcional
usuario: único medio de que el módulo se compila en una versión de usuario
ESP: significa que el módulo se compila en una única versión esp
pruebas: único medio de que el módulo se compiló la versión en pruebas
opcionales: significa que el módulo en todas las versiones se compilan
La gama de eng depuración pone a prueba muestras opcionales shell_ash shell_mksh. Tenga cuidado de que el usuario de valor, si desea pre-instalado, usted debe definir core.mk.
-------------------------------------------------- -------------------------------------------------- --------------------------
(4) LOCAL_SRC_FILES: = $ (llamar a todos los archivos java-bajo par, src)
(4.1) si desea incluir el código fuente de Java, puede llamar a los all-java-files-get bajo. (Este formulario contiene todos los archivos de Java en el directorio local_path)
(4.2) Cuando se trata de C / C ++, LOCAL_SRC_FILES comprende variable debe ser empaquetado en C compilado o C ++ módulo de archivo de origen. Tenga en cuenta aquí que no puede enumerar los archivos de cabecera e incluir archivos, ya que el compilador identificará automáticamente los archivos dependientes para usted; sólo una lista de archivos de código fuente pasa directamente al compilador muy bien.
Define todos los archivos en Java-bajo macro es la acumulación / core / definitions.mk en.
-------------------------------------------------- -------------------------------------------------- --------------------------
(5) LOCAL_PACKAGE_NAME: = Configuración
nombre del paquete, el nombre identifica la aplicación o paquete en el guión.
LOCAL_PACKAGE_NAME designado nombre de la aplicación APP. Se compiló con el nombre de apk, ejemplo:
LOCAL_PACKAGE_NAME := TestApplicaiton
La traducción del nombre del apk es TestApplicaiton.apk
-------------------------------------------------- -------------------------------------------------- --------------------------
(6) LOCAL_CERTIFICATE: = plataforma
Detrás de archivo de la firma LOCAL_CERTIFICATE es el nombre del archivo, lo que indica Settings.apk un APK requiere la firma clave plataforma
-------------------------------------------------- -------------------------------------------------- --------------------------
(7) incluyen $ (BUILD_PACKAGE)
En (2.2) ha sido interpretado como
-------------------------------------------------- -------------------------------------------------- --------------------------
(8) incluyen $ (llamar a todos los archivos make-bajo par, $ (LOCAL_PATH))
Cargar todos los archivos Makefile en el directorio actual, todos los archivos make-bajo-devolverá una lista de todos Android.mk situado en un subdirectorio del 'mi-dir' ruta actual en.
Todos los archivos make-bajo-definiciones de macros en la acumulación / core / definitions.mk en.
-------------------------------------------------- -------------------------------------------------- --------------------------
El documento final se genera Android.mk la Settings.apk. Después del análisis de archivos Android.mk anterior para resumir varios LOCAL_XXX.
Tres casos Descripción:
Debe definirse, el valor que se da en el paquete o Android.mk aplicación.
Alternativamente definido, puede o puede no ser un valor dado o paquete de Android.mk aplicación.
Sin definir, no un valor dado en Android.mk aplicación o paquete, la secuencia de comandos especifica el valor automáticamente.
LOCAL_PATH, 当前路径,必须定义。
LOCAL_PACKAGE_NAME, 必须定义,package的名字,这个名字在脚本中将标识app或package。
LOCAL_MODULE_SUFFIX, 不用定义,module的后缀,=.apk。
LOCAL_MODULE, 不用定义,=$(LOCAL_PACKAGE_NAME)。
LOCAL_JAVA_RESOURCE_DIRS, 不用定义。
LOCAL_JAVA_RESOURCE_FILES, 不用定义。
LOCAL_MODULE_CLASS, 不用定义。
LOCAL_MODULE_TAGS, 可选定义。默认optional。取值范围user debug eng tests optional samples shell_ash shell_mksh。
LOCAL_ASSET_DIR, 可选定义,推荐不定义。默认$(LOCAL_PATH)/assets
LOCAL_RESOURCE_DIR, 可选定义,推荐不定义。默认product package和device package相应的res路径和$(LOCAL_PATH)/res。
LOCAL_PROGUARD_ENABLED, 可选定义,默认为full,如果是user或userdebug。取值full, disabled, custom。
full_android_manifest, 不用定义,=$(LOCAL_PATH)/AndroidManifest.xml。
LOCAL_EXPORT_PACKAGE_RESOURCES, 可选定义,默认null。如果允许app的资源被其它模块使用,则设置true。
LOCAL_CERTIFICATE, 可选定义,默认为testkey。最终
private_key := $(LOCAL_CERTIFICATE).pk8
certificate := $(LOCAL_CERTIFICATE).x509.pem
Extensiones: pueden generar una pluralidad de programa ejecutable Android.mk, las bibliotecas dinámicas y estáticas.
(1) compilado plantilla de aplicación APK.
Acerca de las plantillas compiladas Aplicaciones APK, consulte " Android.mk paradigma APK compilado "
(2) de compilación JAVA plantilla de biblioteca
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
Nota : LOCAL_JAVA_LIBRARIES: = android.test.runner representar biblioteca de Java generación de nombres de archivo jar
(3) de compilación C / ++ plantilla C aplicación como sigue :
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES := main.c
LOCAL_MODULE := test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
NOTA : ': =' se le asigna un significado, '= +' se añade significado, '$' representa un valor de referencia de una variable
LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES中加入需要的头文件搜索路径
LOCAL_STATIC_LIBRARIES 加入所需要链接的静态库(*.a)的名称,
LOCAL_SHARED_LIBRARIES 中加入所需要链接的动态库(*.so)的名称,
LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE 表示以一个可执行程序的方式进行编译。
(4) Para compilar C \ C ++ estática biblioteca
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
Y similar a la anterior, BUILD_STATIC_LIBRARY representan compilar una biblioteca estática.
Plantillas (5) para compilar C / C ++ biblioteca dinámica
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := helloworld.c
LOCAL_MODULE := libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
Y similar a la anterior, BUILD_SHARED_LIBRARY representan compilar una biblioteca compartida.
Generación de un resultado de lo anterior tres, respectivamente, uno de los directorios, se convierte en genérico en función del objetivo específico (posiblemente dkb ~~):
out/target/product/generic/obj/APPS
out/target/product/generic/obj/JAVA_LIBRARIES
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
carpeta de archivo de destino para cada módulo son los siguientes:
1)APK程序:XXX_intermediates
2)JAVA库程序:XXX_intermediates
3)C\C++可执行程序:XXX_intermediates
4)C\C++静态库: XXX_static_intermediates
5)C\C++动态库: XXX_shared_intermediates