Análise de uso do arquivo Android.mk

b8d1b652e26a73b04611727d5c977785.gif

Aprenda com você para a vidaXi, este é o programador Android

Artigos clássicos recomendados. Ao ler este artigo, você obterá os seguintes pontos de conhecimento:

1. Introdução ao Android.mk
2. Formato básico do Android.mk 3.
Estudo aprofundado do Android.mk 14.
Estudo aprofundado do Android.mk
25. Estudo aprofundado do Android.mk
36. Android.mk declarações de julgamento
7. Referências

1. Introdução ao Android.mk

Android.mk é um makefile fornecido pelo Android. Observe que ele é usado para compilar e gerar arquivos como (exe, so, a, jar, apk).

50306d0d1180f94a697446beb27371b1.jpeg

Arquivo gerado Android.mk

2. Formato básico do Android.mk

O formato básico do Android.mk é o seguinte

# 定义模块当前路径
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. Estudo aprofundado do Android.mk 1

Vários arquivos de destino podem ser compilados usando Android.mk:

f07b6158cad1b741c112aeedb453a0d5.jpeg

Android.mk compila vários arquivos de destino

Compilar biblioteca dinâmica

Arquivos C/C++ são compilados para gerar arquivos .so de biblioteca estática para referência como segue

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

Arquivos C/C++ são compilados para gerar bibliotecas estáticas. Uma referência de arquivo é a seguinte

#编译静态库    
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. Estudo aprofundado do Android.mk 2

85fbd0935444b4440eb555bf953a8ba4.jpeg

Recursos de referência do Android.mk

Biblioteca estática de referência
LOCAL_STATIC_LIBRARIES += libxxxxx

LOCAL_STATIC_LIBRARIES := \
    ...
    libxxx2 \
    libxxx \

Biblioteca dinâmica de referência
LOCAL_SHARED_LIBRARIES += libxxxxx

LOCAL_SHARED_LIBRARIES := liblog libnativehelper libGLESv2

Faça referência a arquivos de biblioteca de terceiros
LOCAL_LDFLAGS:=-L/PATH -Lxxx

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

Faça referência a arquivos de cabeçalho de terceiros
LOCAL_C_INCLUDES :=path

por exemplo:

LOCAL_C_INCLUDES = $(INCLUDES)

5. Estudo aprofundado do Android.mk 3

6caac2bad2bda368d3bb8b9ca360a3fa.jpeg

Estudo aprofundado três do Android.mk

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 pacote 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)
  • Pacote jar estático:

include $(BUILD_STATIC_JAVA_LIBRARY)
Arquivos JAR empacotados usando arquivos .class podem ser executados em qualquer máquina virtual Java

  • Pacote jar dinâmico:

include $(BUILD_JAVA_LIBRARY)
Os arquivos jar são empacotados usando .dex com base em pacotes jar estáticos. .dex é o formato de arquivo usado pelo sistema Android.

Jar de dependência do 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)

Pacote jar pré-compilado

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)

Os tipos de arquivo pré-compilados são os seguintes:

  • 1.LOCAL_MODULE_CLASS:
    tipo de arquivo de compilação

  • 2.JAVA_LIBRARIES:
    arquivo dex

  • 3.APPS:
    arquivo APK

  • 4.SHARED_LIBRARIES:
    arquivos de biblioteca dinâmica

  • 5.EXECUTABLES:
    Arquivos binários

  • 6.ETC:
    Outros formatos de arquivo

6. Declarações de julgamento do Android.mk

Declarações de decisão em Android.mk

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

ifeq/ifneq: realiza compilação relacionada com base em condições de julgamento

referências:

[Documentação Tencent] Base de conhecimento do Android Framework
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

Recomendação amigável:

Coleção de informações úteis sobre desenvolvimento Android

Neste ponto, este artigo terminou. O editor acha que o artigo foi reimpresso da Internet e é excelente. Você pode clicar para ler o artigo original e apoiar o autor original. Se houver alguma violação, entre em contato com o editor para excluí-lo. Suas sugestões e correções são bem-vindas . Aguardamos sua atenção e obrigado pela leitura, obrigado!

5befe055ae421216736e8c7f9e838f6e.jpeg

Clique para ler o artigo original e curtir o chefe!

Acho que você gosta

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