Colección de citas famosas - Slogan de motivación - Cómo compilar el archivo so en Android

Cómo compilar el archivo so en Android

Android NDK compila varios archivos so

El archivo makefile Android.mk del sistema de compilación de Android está escrito de la siguiente manera

(1) Primero el archivo Android.mk necesita especificar LOCAL_PATH Variables utilizadas para buscar archivos fuente. Dado que generalmente

Android.mk y los archivos fuente a compilar están en el mismo directorio, se definen de la siguiente forma:

LOCAL_PATH:=$(call my-dir)

p>

La declaración anterior significa definir la variable LOCAL_PATH en la ruta del directorio donde se encuentra el archivo de costos.

(2) Se pueden definir múltiples módulos de compilación en Android.mk, y cada módulo de compilación comienza con include $(CLEAR_VARS)

Termina con include $(BUILD_XXX).

include $(CLEAR_VARS)

CLEAR_VARS es proporcionado por el sistema de compilación, especificando GNU MAKEFILE para borrar todas las variables LOCAL_XXX excepto LOCAL_PATH para usted,

como LOCAL_MODULE , LOCAL_SRC_FILES, LOCAL_SHARED_LIBRARIES, LOCAL_STATIC_LIBRARIES, etc.

incluir $(BUILD_STATIC_LIBRARY) significa compilar en una biblioteca estática

incluir $(BUILD_SHARED_LIBRARY) significa compilar en una biblioteca dinámica.

incluir $(BUILD_EXECUTABLE) significa compilar en un programa ejecutable

(3) Por ejemplo, lo siguiente es (frameworks/base/libs/audioflinger/Android.mk):

LOCAL_PATH:= $(call my-dir)

incluir $(CLEAR_VARS) módulo uno

ifeq ($(AUDIO_POLICY_TEST),true)

ENABLE_AUDIO_DUMP: = verdadero

endif

LOCAL_SRC_FILES:= \

AudioHardwareGeneric.cpp \

AudioHardwareStub.cpp \

AudioHardwareInterface.cpp

ifeq ($(ENABLE_AUDIO_DUMP),true)

LOCAL_SRC_FILES += AudioDumpInterface.cpp

LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP

endif

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_CFLAGS += -DGENERIC_AUDIO

endif

LOCAL_MODULE:= libaudiointerface

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_SRC_FILES += A2dpAudioInterface.cpp

LOCAL_SHARED_LIBRARIES + = liba2dp

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_C_INCLUDES += $(llamar a include-path-for, bluez)

endif

include $ (BUILD_STATIC_LIBRARY) El módulo uno está compilado en una biblioteca estática

include $(CLEAR_VARS) El módulo dos

LOCAL_SRC_FILES:= \

AudioPolicyManagerBase.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libmedia

ifeq ($(TARGET_SIMULATOR) ,verdadero)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE := libau

diopolicybase

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_A2DP

endif

ifeq ($(AUDIO_POLICY_TEST) ,verdadero)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

incluye $(BUILD_STATIC_LIBRARY) El módulo 2 está compilado en una biblioteca estática

incluir $ (CLEAR_VARS) Módulo 3

LOCAL_SRC_FILES:= \

AudioFlinger.cpp \

AudioMixer.cpp.arm \

AudioResampler .cpp .arm \

AudioResamplerSinc.cpp.arm \

AudioResamplerCubic.cpp.arm \

AudioPolicyService.cpp

LOCAL_SHARED_LIBRARIES : = \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase

LOCAL_CFLAGS += -DGENERIC_AUDIO

else

LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy

endif

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudioflinger

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_SHARED_LIBRARIES += liba2dp

endif

ifeq ($(AUDIO_POLICY_TEST),true)< /p >

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

ifeq ($(TARGET_SIMULATOR),true)

ifeq ($(HOST_OS),linux )

LOCAL_LDLIBS += -lrt -lpthread

endif

endi

f

ifeq ($(BOARD_USE_LVMX),true)

LOCAL_CFLAGS += -DLVMX

LOCAL_C_INCLUDES += proveedor/nxp

LOCAL_STATIC_LIBRARIES += liblifevibes

LOCAL_SHARED_LIBRARIES += liblvmxservice

# LOCAL_SHARED_LIBRARIES += liblvmxipc

endif

include $(BUILD_SHARED_LIBRARY) El módulo 3 está compilado en la biblioteca dinámica

(4) Compilar una aplicación (APK)

LOCAL_PATH := $(call my-dir)

incluir $(CLEAR_VARS)

# Construye todos los archivos java en el subdirectorio java-->Traducción literal (construye todos los archivos Java en el subdirectorio java)

LOCAL_SRC_FILES := $(llamar a todos-subdir-java-files )

# Nombre del APK a construir-->Traducción literal (nombre del APK que se crea)

LOCAL_PACKAGE_NAME := LocalPackage

# Dígale que cree un APK -->Traducción literal (dígale que cree un APK)

incluye $(BUILD_PACKAGE)

(5) Compile una aplicación que dependa de una biblioteca Java estática (static.jar)

LOCAL_PATH := $(call my-dir)

incluye $(CLEAR_VARS)

# Lista de bibliotecas estáticas para incluir en el paquete

LOCAL_STATIC_JAVA_LIBRARIES := biblioteca estática

# Crea todos los archivos java en el subdirectorio java

LOCAL_SRC_FILES := $(llamar a todos los subdirectorios-java-files)

# Nombre del APK a construir

LOCAL_PACKAGE_NAME := LocalPackage

# Dígale que cree un APK

incluya $(BUILD_PACKAGE)

(6) Compile una aplicación que deba firmarse con la clave de plataforma

LOCAL_PATH := $(call my-dir)

incluya $(CLEAR_VARS)

# Construye todos los archivos java en el subdirectorio java

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Nombre del APK a construir< /p >

LOCAL_PACKAGE_NAME := LocalPa

ckage

LOCAL_CERTIFICATE := plataforma

# Dígale que cree un APK

incluya $(BUILD_PACKAGE)

(7) Compile uno Necesita usar la aplicación delante de una clave específica

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Construir todo archivos java en el subdirectorio java

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Nombre del APK a construir

LOCAL_PACKAGE_NAME : = LocalPackage

LOCAL_CERTIFICATE := proveedor/ejemplo/certs/app

# Dígale que cree un APK

incluya $(BUILD_PACKAGE)

( 8) Agregar una aplicación precompilada

LOCAL_PATH := $(call my-dir)

incluir $(CLEAR_VARS)

# El nombre del módulo debe coincidir nombre del apk que se instalará.

LOCAL_MODULE := LocalModuleName

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

incluir $(BUILD_PREBUILT)

(9) Agregar una biblioteca JAVA estática

LOCAL_PATH := $(llamar a mi- dir )

include $(CLEAR_VARS)

# Crea todos los archivos java en el subdirectorio java

LOCAL_SRC_FILES := $(call all-subdir-java-files )

# Cualquier biblioteca de la que depende esta biblioteca

LOCAL_JAVA_LIBRARIES := android.test.runner

# El nombre del archivo jar a crear

LOCAL_MODULE := muestra

# Construye un archivo jar estático.

incluye $(BUILD_STATIC_JAVA_LIBRARY)

(10) En medio del compilado módulo de Android.mk Puede definir el contenido de compilación relevante, es decir, especificar las variables relevantes de la siguiente manera:

LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_

AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES Compila la aplicación en el archivo Android.mk (BUILD_PACKAGE), esta variable está configurada para representar archivos de recursos

Por lo general, se define como LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM

<. p> LOCAL_C_INCLUDES Ruta adicional del archivo de encabezado compilado en C/C++, use LOCAL_PATH para indicar el directorio donde se encuentra este archivo

Por ejemplo:

LOCAL_C_INCLUDES += extlibs/zlib-1.2.3

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC especifica el compilador de C

LOCAL_CERTIFICATE autenticación de firma

LOCAL_CFLAGS define C/ adicional Compiladores de C++ Banderas (como definiciones de macros), por ejemplo: LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS Archivos de encabezado que deben copiado al instalar la aplicación LOCAL_COPY_HEADERS_TO debe definirse al mismo tiempo

LOCAL_COPY_HEADERS_TO La ruta de destino para copiar los archivos de encabezado al instalar la aplicación

LOCAL_CPP_EXTENSION Si su archivo C++ no tiene cpp como el sufijo del archivo, puede especificar el sufijo del archivo C++ a través de LOCAL_CPP_EXTENSION Nombre

Por ejemplo: LOCAL_CPP_EXTENSION := .cc

Tenga en cuenta que los sufijos del archivo C++ en el módulo unificado deben ser consistentes.

LOCAL_CPPFLAGS pasa indicadores adicionales al compilador de C++, como: LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX especifica el compilador de C++

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE Si el programa ejecutable compilado va a estar vinculado estáticamente (no depende de ninguna biblioteca dinámica al ejecutarse), establezca LOCAL_FORCE_STATIC_EXECUTABLE:=true

Actualmente solo libc tiene En forma de biblioteca estática, solo la utilizan las aplicaciones en el directorio /sbin del sistema de archivos. Las aplicaciones en este directorio generalmente no se cargan cuando se ejecutan.

Otras partes del sistema de archivos sí. estar cargado estáticamente.

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE p>

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES especifica las bibliotecas de clases java incluidas al compilar aplicaciones y bibliotecas java. Actualmente hay dos tipos: núcleo y marco

.

En la mayoría de los casos, se define como: LOCAL_JAVA_LIBRARIES := marco central

Tenga en cuenta que LOCAL_JAVA_LIBRARIES no es necesario y no se permite definirlo al compilar el APK (el sistema lo agregará automáticamente)

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS pasa parámetros adicionales al conector (asegúrese de prestar atención al orden de los parámetros)

LOCAL_LDLIBS compila programas ejecutables o bibliotecas Especifique bibliotecas adicionales, especifique la biblioteca en formato "-lxxx", por ejemplo:

LOCAL_LDLIBS += -lcurses -lpthread

LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE El nombre del módulo generado (tenga en cuenta que el nombre de la aplicación usa LOCAL_PACKAGE_NAME en lugar de LOCAL_MODULE)

LOCAL_MODULE_PATH La ruta al módulo generado

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS indicadores de módulo generados

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME El nombre de la aplicación APK

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES Se utiliza al precompilar incluyendo $(BUILD_PREBUILT) o $( BUILD_HOST_PREBUILT) para especificar el archivo ejecutable que debe copiarse

LOCAL_PREBUILT_JAVA_Libraries

Precompilación de Local_prebuilt_libs Incluyendo $ (Build_prebuilt) o $ (Build_host_prebuilt).

Ocal_prebuilt_obj_files

LOCAL_PREBUILT_STAN >

LO

CAL_PRELINK_MODULE Si se requiere procesamiento previo a la conexión (requerido por defecto, usado para optimización dinámica de la biblioteca)

LOCAL_REQUIRED_MODULES especifica los módulos de los que depende el módulo (cuando el módulo está instalado, los módulos de los que depende se instalarán simultáneamente )

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES Bibliotecas dinámicas enlazables

LOCAL_SRC_FILES archivos fuente compilados

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES Bibliotecas estáticas enlazables

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES especifica las bibliotecas estáticas completas que el módulo debe cargar (estas bibliotecas competentes no no permitir que se vincule el vinculador) Eliminar el código inútil)

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH