несовместимая цель при создании apk для Native Android Project - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь внедрить Alexa Voice Service SDK в Android. У меня есть библиотеки для предварительной сборки, которые я использую в своем проекте Android. У меня есть .so файлы под src/main/jniLibs/armeabi-v7a/*.so Я могу успешно скомпилировать и собрать apk для платформы x86, но моя цель - запустить его на устройстве armeabi-v7a.

но при создании apk я сталкиваюсь с несовместимой целевой ошибкой.

полная ошибка показана ниже,

FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing process /home/ajinkya/Androidsdk/cmake/3.10.2.4988404/bin/cmake with arguments {--build /root/AndroidStudioProjects/alexaProtoApp/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target native-lib}
[1/2] Building CXX object CMakeFiles/native-lib.dir/native-lib.cpp.o
[2/2] Linking CXX shared library /root/AndroidStudioProjects/alexaProtoApp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
 FAILED: /root/AndroidStudioProjects/alexaProtoApp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so 
 : && /home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi24 --gcc-toolchain=/home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libnative-lib.so -o /root/AndroidStudioProjects/alexaProtoApp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o  /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/../../main/jniLibs/armeabi-v7a/libSampleApp.so /home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/24/liblog.so /home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/24/liblog.so -latomic -lm && :
 /home/ajinkya/Androidsdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/../../main/jniLibs/armeabi-v7a/libSampleApp.so: incompatible target
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:25: error: undefined reference to 'my_initialize(_JavaVM*, _jobject*)'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:31: error: undefined reference to 'jni_wakeAlexa()'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:37: error: undefined reference to 'jni_wakeWithHoldAlexa()'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:43: error: undefined reference to 'jni_resetAlexa()'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:49: error: undefined reference to 'jni_reauthorizeAlexa()'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:55: error: undefined reference to 'jni_quitAlexa()'
 /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/native-lib.cpp:61: error: undefined reference to 'jni_infoAlexa()'
 clang++: error: linker command failed with exit code 1 (use -v to see invocation)
 ninja: build stopped: subcommand failed.

Мой build.gradle как,

apply plugin: 'com.android.application'

android {

compileSdkVersion 29
defaultConfig {

    applicationId "my.project.vdi"
    minSdkVersion 24
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true

    externalNativeBuild {
        cmake {

            cppFlags ""
           // abiFilters "armeabi-v7a"
           //     arguments "-DANDROID_ARM_MODE=arm" , "-DANDROID_TOOLCHAIN=clang"

        }
    }

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

 }

  buildTypes {

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

  externalNativeBuild {
     cmake {
        path "src/main/cpp/CMakeLists.txt"
        version "3.10.2"
     }
  }

  sourceSets {
     main {
        jni.srcDirs = []
        // let gradle pack the shared library into apk
        jniLibs.srcDirs = ['src/main/jniLibs/']
    }
  }

 //    packagingOptions {
 //        exclude 'lib/arm64-v8a/libnative-lib.so'
 //        exclude 'lib/x86_64/libnative-lib.so'
 //        exclude 'lib/x86/libnative-lib.so'
 //    }

 }

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.squareup.picasso:picasso:2.5.2'

}

ТАКЖЕ CMakeLists.txt

 cmake_minimum_required(VERSION 3.4.1)

 add_library( # Sets the name of the library.
    native-lib

    SHARED

    native-lib.cpp)

 add_library(SampleApp SHARED IMPORTED)

 set_target_properties(SampleApp PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libSampleApp.so)

 find_library(
    log-lib
    log)

 find_library(ANDROID_LOG_LIB log)

 target_link_libraries( 
    native-lib
    SampleApp
    ${ANDROID_LOG_LIB}
    ${log-lib} )

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

1 голос
/ 09 июля 2019
.../armeabi-v7a/libSampleApp.so: incompatible target

Эта библиотека на самом деле не создана для armeabi-v7a. Следующее должно сказать вам, что это такое:

$ file /root/AndroidStudioProjects/alexaProtoApp/app/src/main/cpp/../../main/jniLibs/armeabi-v7a/libSampleApp.so

Вот пример выходных данных из libc ++ _ shared.so в NDK:

$ file android-ndk-r21-canary/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so
android-ndk-r21-canary/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=4dc00a833014c1ddd2e1ec64c5dd72237c4179ee, with debug_info, not stripped

Интересная часть:

ELF 32-битный общий объект LSB, ARM, EABI5 версия 1 (SYSV)

0 голосов
/ 17 июля 2019

Я получил решение, это очень необычно для меня: файлы .so, которые генерировались во время компиляции, не заменялись.старая версия файлов не обновлялась новыми.Я удалил папку и затем скомпилировал, и новые сгенерированные файлы были правильными.

...