Escriba Android.mk/Android.bp para hacer referencia al paquete jar de terceros, al paquete aar y a la biblioteca

I. Introducción

        Después de Android10, en todos los proyectos, se recomienda oficialmente usar Android.bp para compilar y construir. Los proyectos creados previamente con Android.mk deberán cambiarse gradualmente a Android.bp a medida que las versiones se actualicen de forma iterativa. Ambas sintaxis deben cambiarse gradualmente. ser entendido y usarlo hábilmente. El autor escribió previamente una introducción a las declaraciones de Android.mk, que presenta el significado de cada código, escriba Android.mk y compile el proyecto de estudio de Android en el código fuente de AOSP.

Más adelante, también resumí el uso básico de Android.bp:  la sintaxis y el uso de Android.bp    son relativamente básicos y se registran después de su uso en el proyecto.

Este artículo trata sobre la escritura de archivos Android.mk y Android.bp en el proyecto del proyecto, la introducción de paquetes jar de terceros, paquetes aar, bibliotecas so y la introducción de archivos xml de permisos de lista blanca privilegiada.

2. Preparación de Android.mk

1. Introducir el paquete del frasco

Por ejemplo, las bibliotecas en nuestro directorio actual tienen el paquete okhttp-3.4.11.jar y quiero hacer referencia a él.

Requiere dos pasos

El primer paso es declarar el directorio donde se encuentra nuestro paquete jar, el mío es el directorio del proyecto AndroidStudio, por lo que la ruta del paquete jar es app/libs/okhttp-3.4.11.jar

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:= okhttp3:app/libs/okhttp-3.4.11.jar

El significado de esta línea de código se puede entender aproximadamente de la siguiente manera: declare una variable okhttp3 y su valor es app/libs/okhttp-3.4.11.jar

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := okhttp3:app/libs/okhttp-3.4.11.jar \
                                        okio:app/libs/okio-1.9.0.jar
include $(BUILD_MULTI_PREBUILT)  #这里是多个jar包预编译

Paso 2. Haga referencia a las variables en el paquete jar que declaramos y haga referencia al okhttp3 que declaramos anteriormente.

LOCAL_STATIC_JAVA_LIBRARIES := okhttp3

LOCAL_STATIC_JAVA_LIBRARIES := okhttp3 \
                               okio

2. Introducir el paquete aar

Paso 1: declarar primero la ubicación del paquete aar

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
   lottie-2.8.0:app/libs/lottie-2.8.0.aar
include $(BUILD_MULTI_PREBUILT)

Paso 2: hacer referencia a la variable aar declarada lottie-2.8.0

LOCAL_STATIC_JAVA_AAR_LIBRARIES := lottie-2.8.0

Paso 3: Agregar recursos del paquete aar referenciados

LOCAL_AAPT_FLAGS := \
  --auto-add-overlay \
  --extra-packages com.airbnb.lottie

3. Importe la biblioteca so.

Supongamos que hay directorios armeabi-v7a y arm64-v8a en el directorio lib de nuestro directorio actual, que contienen libaes-jni.so respectivamente. Si queremos empaquetar estas bibliotecas al compilar apk, ¿qué debemos hacer en el archivo mk? ¿Qué pasa con la configuración?

El primer paso es configurar el siguiente contenido directamente en el archivo mk y precompilarlo

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
#后缀
LOCAL_MODULE_SUFFIX := .so
#模块名
LOCAL_MODULE := libaes-jni
#编译到system/libs/目录下
LOCAL_MODULE_CLASS := SHARED_LIBRARIES

#另外一种写法,根据平台arm  arm64 去选择编译对应的so文件
#ifeq ($(strip $(TARGET_ARCH)),arm64)
#LOCAL_SRC_FILES :=app/libs/arm64-v8a/libaes-jni.so
#else ifeq ($(strip $(TARGET_ARCH)),arm)
#LOCAL_SRC_FILES :=app/libs/armeabi-v7a/libaes-jni.so
#endif

#arm arm64都编译
LOCAL_SRC_FILES_arm :=app/libs/armeabi-v7a/libaes-jni.so
LOCAL_SRC_FILES_arm64 :=app/libs/arm64-v8a/libaes-jni.so
LOCAL_MODULE_TARGET_ARCHS:= arm arm64
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)

Paso 2: hacer referencia a la biblioteca de destino

Agregue lo siguiente entre incluir $(CLEAR_VARS) e incluir $(BUILD_PACKAGE)

LOCAL_REQUIRED_MODULES := libaes-jni


#如果你写这句话 把这个libaes-jni.so 同时也打包 放在out/target/产品名路径/你的apk具体路径下/lib/#目录中
#LOCAL_JNI_SHARED_LIBRARIES := libaes-jni

Observación:

LOCAL_MODULE_CLASS: (precompilado) identifica la última ubicación donde se coloca el módulo compilado. Si no se especifica, no se colocará en el sistema.
LOCAL_MODULE_CLASS := ETC se coloca en el directorio system/etc
LOCAL_MODULE_CLASS := EXECUTABLES se coloca en el directorio /system/bin
LOCAL_MODULE_CLASS := SHARED_LIBRARIES se coloca en el directorio /system/lib LOCAL_MODULE_CLASS :
= JAVA_LIBRARIES
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_CLASS : = APPS colocado en /system/app Tabla de contenidos
 

La variable LOCAL_JNI_SHARED_LIBRARIES se utiliza principalmente en la compilación JNI. Si desea hacer referencia a la biblioteca compartida *.so en JNI en su código Java, esta variable es el nombre de la biblioteca compartida.
Entonces, una cosa a la que debes prestar atención es: define esta variable en Android.mk en el directorio raíz de tu proyecto para hacer referencia a la biblioteca compartida *.so en JNI que deseas usar. Define el nombre del archivo de biblioteca so a incluirse. Si el programa no utiliza jni, no es necesario


LOCAL_JNI_SHARED_LIBRARIES := libxxx De esta manera, al compilar, NDK empaquetará automáticamente este libxxx en apk; colóquelo en la ruta de salida/destino/nombre del producto/la ruta específica de su apk/directorio lib/

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)

4. Introduzca xml de permiso de lista blanca privilegiada

Contenido de com.test.mtk.xml:

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.test.mtk">
        <permission name="android.permission.MASTER_CLEAR" />
    </privapp-permissions>
</permissions>

El primer paso: procesamiento previo a la compilación


######预编译priv-app 权限,输出路径为system/etc/permissions###########
# Permissions pre-grant
include $(CLEAR_VARS)
LOCAL_MODULE := com.test.mtk.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

Paso 2: Especifique los módulos de los que depende la aplicación para ejecutarse


######编译priv-app 权限到apk中###########
LOCAL_REQUIRED_MODULES := com.test.mtk.xml

Supongo que te gusta

Origin blog.csdn.net/u012514113/article/details/133362683
Recomendado
Clasificación