Cómo empaquetar varios aars y jars en un solo aar (incluidos los registros escalonados)

En los últimos días de trabajo, necesito empaquetar el aar y el tarro de nuestra empresa nuevamente para generar un aar para que lo usen los clientes. Entonces se creó un nuevo módulo, que colocó aar y jar, y algo de encapsulación de la interfaz de llamada.

(Hay muchos aars y jars en el proyecto, así que no los proyecté, así que simplemente los metí ==)

Luego al construir. Encontrará el problema de que las dependencias de archivos .aar locales directos no son compatibles al crear un AAR....

¿Cómo resolverlo?

En este momento, debe colocar el build.gradle del módulo

implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

cambiado a

compileOnly fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

Entonces puedes generar aar de esta manera.

Pero cuando este aar se coloca en la demostración escrita para ejecutar y llamar, informará el error java.lang.NoClassDefFoundError

Esto se debe a que jar y aar debajo de libs no se ingresan al escribir aar.

En este momento podemos usar fat-aar-android

Para un uso específico, también puede consultar el documento oficial fat-aar-android

1. Agregue la raíz del proyecto build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.8'
    }
}

2. Agregue build.gradle en el módulo

apply plugin: 'com.kezong.fat-aar'

3. Agregue lib y aar que deben integrarse en aar en las dependencias

dependencies {
    compileOnly fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

    embed(name: 'sdd-1.0.0', ext: 'jar')
    embed(name: '111-1.60', ext: 'jar')
    embed(name: 'vaar..dd', ext: 'aar')
    embed(name: 'vaar..dd', ext: 'aar')
    ...
}

Pero en este momento, al empacar, informará

Ocurrió un problema al configurar el proyecto ':androidVFServiceLib'.

> No se pudieron resolver todas las dependencias para la configuración ':androidVFServiceLib:embed'.

> No se pudo encontrar :atoolsjar-1.0.0:.

Requerido por:

proyecto: androidVFServiceLib

> Could not find :bcprov-jdk15on-1.60:.

Required by:

project :androidVFServiceLib

> Could not find :clssKernel:.

此时还需要在mudule中的build.gradle 中添加

    repositories {
        flatDir {
            dirs 'libs'
        }
    }

然后就能正常生成aar了。

但是假如libs中的aar或者jar 需要.so 文件,在生成aar时,记得也要把so 文件拷贝到存放aar和jar的module 中,

并且需要配置

        ndk {
            // Specifies the ABI configurations of your native
            // libraries Gradle should build and package with your APK.
            abiFilters 'armeabi-v7a'
        }

不然,在别处调用时,会报so 库的问题。

这样的话,生成的aar 就能在其它项目进行正常使用了。

Supongo que te gusta

Origin blog.csdn.net/qq_36162336/article/details/129378768
Recomendado
Clasificación