Как использовать .so файлы в AAR для проекта JNI andriod? - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над созданием AAR, который загружается сервером сборки во время компиляции, он будет содержать предварительно скомпилированную библиотеку C ++, в которой будут находиться файлы .so. Я уже получил c ++ и AAR с соответствующими файлами. Однако я не могу использовать его своим простым тестовым приложением, созданным для тестирования библиотеки.

Очевидно, проблема в том, что я не сказал проекту, как связать содержимое AAR таким образом, чтобы JNI мог загрузить Это. Я просто не могу понять, как использовать эти файлы AAR для ресурсов .so, что является жестким требованием. Как будто после компиляции с implementation project отсутствует папка / jni (которая явно находится в сжатом содержимом)

Я подтвердил, что у меня есть файлы .so в AAR с плагином. Он показывает

-jni
   -x86
      libmyproject.so
   -armeabi-v7a
      libmyproject.so

, а также другие библиотеки lib / res / assets и c, которые меня не волнуют.

При запуске проекта я вижу ожидаемые файлы в build / aar с myproject- Android -релиз и сборка / aar-debug с myproject- Android -debug.aar. Вот где я хочу их.

В моем файле settings.gradle у меня есть

include ':myproject-Android-debug',':myproject-Android-release'

В моем билде build.gradle у меня есть

import xxx

buildscript {
    apply plugin: 'xxxx'
    dependencies {
        classpath brazil.tool('AndroidGradle', 'AndroidSDK', 'KotlinGradlePlugin', 'xxxx')
    }
}

apply plugin: 'xxx'
apply plugin: 'xxx-android-sdk'
apply plugin: 'com.android.application'
apply plugin: 'xxx-android'


configurations {
    ktlint
}

dependencies {
    implementation brazil.build()
    testImplementation xxx.testbuild()
    ktlint brazil.tool('Ktlint')
    implementation project(":myproject-Android-debug")
}

android {
    compileSdkVersion SDK.platformVersion.toInteger()
    buildToolsVersion SDK.buildToolsVersion

    defaultConfig {
        applicationId "com.company.testapp"
        minSdkVersion 23
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            // let gradle pack the shared library into apk
            //possibly here?
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        abortOnError false
    }

    packagingOptions {
        exclude "/META-INF/proguard/**"
    }
}

task ktlint(type: JavaExec) {
    inputs.files(project.fileTree(dir: "src", include: "**/*.kt"))
    outputs.dir("${buildDir}/reports/ktlint/")
    group = 'verification'
    main = "com.github.xxxx"
    classpath = configurations.ktlint
    args = [
            "--reporter=plain",
            "--reporter=checkstyle,output=${buildDir}/reports/ktlint/ktlint-report.xml",
            "src/**/*.kt"
    ]
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec) {
    group = 'verification'
    main = "xxx"
    classpath = xxx
}

Cra sh выход

2020-04-24 01:20:57.150 10387-10387/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.testapp, PID: 10387
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/base.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.company.testapp-4-XMV-9aZlJXyboIRl92bA==/lib/x86, /system/lib]]] couldn't find "libmyproject.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:1012)
at java.lang.System.loadLibrary(System.java:1669)
at com.company.project.MainActivity.<clinit>(MainActivity.kt:33)
...