Red de conocimiento informático - Material del sitio web - Cómo importar la biblioteca .so generada por JNI en Android Studio

Cómo importar la biblioteca .so generada por JNI en Android Studio

(1) Para versiones anteriores, el método es el siguiente:

task copyNativeLibs(type: Copy) {

from(new File(project(' :MyProject' ).buildDir, 'native-libs')){ include ' **/*.so' }

en un nuevo archivo (buildDir, 'native-libs')

}

tasks.withType(Compile) { compileTask -gt; compileTask. depende de copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com) .android.build.gradle.PackageApplicationTask) { pkgTask -gt;

pkgTask.jniDir nuevo archivo(buildDir, 'native-libs')

}

(2) Tres métodos en la nueva versión:

(2.1) Generar un archivo .Jar antes de empaquetarlo y luego descomprimirlo automáticamente en un archivo apk

(2.2) Empaquetar automáticamente después embalaje

tarea nativoLibsToJar(tipo: Zip, descripción: 'crear un archivo jar de las bibliotecas nativas') {

archivo destinoDir( "$buildDir/native-libs")

baseName 'native-libs'

extensión 'jar'

de fileTree(dir: 'libs', incluye: '**/*.so')

into 'lib/'

}

tasks.withType(Compile) {

compileTask -gt; compileTask.dependsOn(nativeLibsToJar)

}

La siguiente oración significa empaquetar el archivo .jar en el directorio generado en el directorio generado (build/native-libs)

compilar fileTree( dir: "$buildDir/native-libs", incluye: 'native-libs.jar')

(2.2) Genera archivos Jar manualmente y luego los descomprime automáticamente en archivos apk

De esta forma, los archivos .SO deben comprimirse manualmente. Los pasos específicos son: comprimir todos los archivos .so que necesita usar en un archivo .zip (la estructura de directorios del archivo zip es: lib/armeabi/*.so), luego cambiar el archivo zip a un archivo .Jar y ponlo en el archivo apk.

Luego cambie el archivo zip a .Jar y colóquelo en lib para generar apk.

Todos los archivos .Jar se empaquetan automáticamente de forma predeterminada:

dependencias {

compilar fileTree(dir: 'libs', include: '*.jar')

}

(2.3) Este es el método utilizado actualmente (recomendado). En realidad, no es más que empaquetar los archivos .SO en la biblioteca APK. Empaque el archivo .SO en la carpeta APK lib. Si lee atentamente las instrucciones de Gradle, naturalmente sabrá que Gradle empaqueta oficialmente automáticamente los archivos .SO en la nueva versión. Archivos SO. Simplemente agregue el siguiente contenido al nodo de Android en la configuración:

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

El resto del archivo de configuración es el siguiente:

No es necesario cambiar nada más. El archivo de configuración es el siguiente:

Complemento de aplicación: android'

android {

compileSdkVersion 19

buildToolsVersion "19.0. 0"

defaultConfig {

minSdkVersion 16

targetSdkVersion 19

versionCode 1

versionName "1.0"

}

buildTypes {

lanzamiento {

runProguard false

proguardFiles getDefaultProguardFile('proguard -android.txt' ), 'proguard-rules.txt'

}

}

sourceSets {

principal {

jniLibs.srcDirs = ['libs']

}

}

}

}

}

dependencias {

compilar fileTree(dir: 'libs', incluir: ['*.jar'])

}