相关文章推荐
玩篮球的茴香  ·  [CMake教程] ...·  1 月前    · 
怕老婆的大熊猫  ·  vcpkg_cmake_configure ...·  3 周前    · 
善良的煎饼果子  ·  Host and deploy ...·  1 年前    · 
逆袭的移动电源  ·  【jupyter ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am trying to implement Alexa Voice Service SDK in Android. I have pre-build libraries, which i am using in my Android Project. I have .so files under src/main/jniLibs/armeabi-v7a/*.so I can successfully compile and build apk for x86 platform , but my target is run it on armeabi-v7a device.

but while generating apk i am facing the incompatible target error.

the full error is shown below ,

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.

My build.gradle like,

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'

ALso the 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
 find_library(ANDROID_LOG_LIB log)
 target_link_libraries( 
    native-lib
    SampleApp
    ${ANDROID_LOG_LIB}
    ${log-lib} )

Please guide me resolving this issue.

That library isn't actually built for armeabi-v7a. The following should tell you what it is:

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

Here's example output from libc++_shared.so in the 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

The interesting part is:

ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV)

That library isn't actually built for armeabi-v7a. The following should tell you what it is: <-- it aint possible , because we have tested the sample app before on armeabi-v7a. – KarmaCoding Jul 11, 2019 at 9:50 Did you check with the command I gave? The result is interesting even if I'm wrong about the cause. – Dan Albert Jul 11, 2019 at 20:26 What does it say, exactly? Something here is clearly wrong, but without a repro case I can't guess, I need to know what you ran and what the result is. Don't leave out information. – Dan Albert Jul 12, 2019 at 19:03 I got the solution, it is very unusual for me , the .so files which were generating while compiling, were not getting replaced. the old version of the files were not getting updated by the new ones. I deleted the folder and then compiled and the new files generated were the proper ones. – KarmaCoding Jul 12, 2019 at 19:40 Should leave that as an answer (yes, even to your own question) and mark it as correct so anyone else landing here can find the solution. – Dan Albert Jul 15, 2019 at 21:09

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.