Análisis del uso del archivo Android.mk

b8d1b652e26a73b04611727d5c977785.gif

Aprende contigo de por vidaXi, este es el programador de Android.

Artículos clásicos recomendados. Al leer este artículo, obtendrá los siguientes puntos de conocimiento:

1. Introducción a Android.mk
2. Formato básico de Android.mk 3.
Estudio en profundidad de Android.mk 14.
Estudio en profundidad de Android.mk
25. Estudio en profundidad de Android.mk
36. Android.mk declaraciones de juicio
7. Referencias

1. Introducción a Android.mk

Android.mk es un archivo MAKE proporcionado por Android. Tenga en cuenta que se utiliza para compilar y generar archivos como (exe, so, a, jar, apk).

50306d0d1180f94a697446beb27371b1.jpeg

Archivo generado Android.mk

2. Formato básico de Android.mk

El formato básico de Android.mk es el siguiente

# 定义模块当前路径
LOCAL_PATH := $(call my-dir)  
#清空当前环境变量
include $(CLEAR_VARS)  
................  
# 引入头文件等
LOCAL_xxx       := xxx
#编译生成的文件名  
LOCAL_MODULE    := hello  
#编译该模块所需的源码
LOCAL_SRC_FILES := hello.c  
#引入jar包等
LOCAL_xxx       := xxx  
................  
#编译生成文件的类型 
#LOCAL_MODULE_CLASS  、JAVA_LIBRARIES
#APPS 、 SHARED_LIBRARIES
#EXECUTABLES 、 ETC
include $(BUILD_EXECUTABLE)

3. Estudio en profundidad 1 de Android.mk

Se pueden compilar varios archivos de destino utilizando Android.mk:

f07b6158cad1b741c112aeedb453a0d5.jpeg

Android.mk compila múltiples archivos de destino

Compilar biblioteca dinámica

Los archivos C/C++ se compilan para generar archivos .so de biblioteca estática como referencia de la siguiente manera

LOCAL_PATH := $(call my-dir)    
include $(CLEAR_VARS)    
# 生成libhell.so
LOCAL_MODULE = libhello    

LOCAL_CFLAGS = $(L_CFLAGS)    
LOCAL_SRC_FILES = hello.c  
LOCAL_C_INCLUDES = $(INCLUDES) 
LOCAL_SHARED_LIBRARIES := libcutils    
LOCAL_COPY_HEADERS_TO := libhello   
LOCAL_COPY_HEADERS := hello.h   

#编译动态库 BUILD_SHARED_LIBRARY

include $(BUILD_SHARED_LIBRARY)

Compilar biblioteca estática

Los archivos C/C++ se compilan para generar bibliotecas estáticas. Una referencia de archivo es la siguiente

#编译静态库    
LOCAL_PATH := $(call my-dir)    
include $(CLEAR_VARS)    
# 生成libhell.a
LOCAL_MODULE = libhello

LOCAL_CFLAGS = $(L_CFLAGS)    
LOCAL_SRC_FILES = hello.c    
LOCAL_C_INCLUDES = $(INCLUDES)    
LOCAL_SHARED_LIBRARIES := libcutils    
LOCAL_COPY_HEADERS_TO := libhello   
LOCAL_COPY_HEADERS := hellos.h   

 # 编译 静态库    BUILD_STATIC_LIBRARY
include $(BUILD_STATIC_LIBRARY)

4. Estudio en profundidad 2 de Android.mk

85fbd0935444b4440eb555bf953a8ba4.jpeg

Recursos de referencia de Android.mk

Biblioteca estática de referencia
LOCAL_STATIC_LIBRARIES += libxxxxx

LOCAL_STATIC_LIBRARIES := \
    ...
    libxxx2 \
    libxxx \

Biblioteca dinámica de referencia
LOCAL_SHARED_LIBRARIES += libxxxxx

LOCAL_SHARED_LIBRARIES := liblog libnativehelper libGLESv2

Hacer referencia a archivos de biblioteca de terceros
LOCAL_LDFLAGS:=-L/PATH -Lxxx

LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest.a

Hacer referencia a archivos de encabezado de terceros
LOCAL_C_INCLUDES :=path

p.ej:

LOCAL_C_INCLUDES = $(INCLUDES)

5. Estudio en profundidad 3 de Android.mk

6caac2bad2bda368d3bb8b9ca360a3fa.jpeg

Android.mk estudio en profundidad tres

compilar apk

LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_SRC_FILES := $(call all-subdir-java-files)
  # 生成hello apk
  LOCAL_PACKAGE_NAME := hello
  include $(BUILD_PACKAGE)

compilar paquete jar

LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_SRC_FILES := $(call all-subdir-java-files)
  # 生成 hello
  LOCAL_MODULE := hello
  # 编译生成静态jar包
  include $(BUILD_STATIC_JAVA_LIBRARY)
  #编译生成共享jar
  include $(BUILD_JAVA_LIBRARY)
  • Paquete de tarro estático:

include $(BUILD_STATIC_JAVA_LIBRARY)
Los archivos JAR empaquetados con archivos .class se pueden ejecutar en cualquier máquina virtual Java

  • Paquete de tarro dinámico:

include $(BUILD_JAVA_LIBRARY)
Los archivos jar se empaquetan usando .dex basado en paquetes jar estáticos. .dex es el formato de archivo utilizado por el sistema Android.

Tarro de dependencia de APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 静态jar包
LOCAL_STATIC_JAVA_LIBRARIES := static-library
#动态jar包
LOCAL_JAVA_LIBRARIES := share-library

LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := hello
include $(BUILD_PACKAGE)

Paquete jar precompilado

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#指定编译生成的文件类型
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := hello
LOCAL_SRC_FILES :=  $(call all-subdir-java-files)
# 预编译
include $(BUILD_PREBUILT)

Los tipos de archivos precompilados son los siguientes:

  • 1.LOCAL_MODULE_CLASS:
    tipo de archivo de compilación

  • 2.JAVA_LIBRARIES:
    archivo de almacenamiento dex

  • 3.APLICACIONES:
    archivo APK

  • 4.SHARED_LIBRARIES:
    archivos de biblioteca dinámica

  • 5.EJECUTABLES:
    Archivos binarios

  • 6.ETC:
    Otros formatos de archivo

6. Declaración de juicio de Android.mk

Declaraciones de decisión en Android.mk

ifeq($(VALUE), x)   #ifneq
  do_yes
else
  do_no
endif

ifeq/ifneq: realiza una compilación relacionada según las condiciones de juicio

referencias:

[Documentación de Tencent] Base de conocimientos del marco de Android
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

Recomendación amistosa:

Colección de información útil sobre el desarrollo de Android.

En este punto, este artículo ha terminado. El editor cree que el artículo es una reimpresión de Internet y es excelente. Puede hacer clic para leer el artículo original y apoyar al autor original. Si hay alguna infracción, comuníquese con el editor para eliminarlo. Sus sugerencias y correcciones son bienvenidas. . Esperamos su atención y gracias por leer, ¡gracias!

5befe055ae421216736e8c7f9e838f6e.jpeg

¡Haz clic para leer el artículo original y darle me gusta al jefe!

Supongo que te gusta

Origin blog.csdn.net/wjky2014/article/details/131693042
Recomendado
Clasificación