укажите armeabi-v7a, но jni продолжит сборку x86_64 - PullRequest
0 голосов
/ 02 июля 2019

Я делаю jni, используя третью библиотеку, где jni lib: libLivenessDetectorJni.so зависит от liblivenessdetector.so (третья библиотека только в armeabi-v7a).

Я указываю сборку abi только под armeabi-v7a в gradle:

externalNativeBuild {
            cmake {
            cppFlags "-std=c++11 -frtti -fexceptions"
            abiFilters "armeabi-v7a"
            }
        }

Но после сборки armeabi-v7a (успех) он продолжает собирать x86_64 (сбой), почему?

> Task :common-silent:externalNativeBuildDebug
Build LivenessDetectorJni armeabi-v7a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/armeabi-v7a/libLivenessDetectorJni.so

> Task :common-silent:mergeDebugJniLibFolders
> Task :common-silent:transformNativeLibsWithMergeJniLibsForDebug
> Task :common-silent:transformNativeLibsWithStripDebugSymbolForDebug
> Task :common-silent:transformNativeLibsWithIntermediateJniLibsForDebug

> Task :app:externalNativeBuildDebug FAILED
Build LivenessDetectorJni x86_64
ninja: error: '/home/jnitest/common-silent/src/main/jniLibs/x86_64/liblivenessdetector.so', needed by '/homejnitest/app/build/intermediates/cmake/debug/obj/x86_64/libLivenessDetectorJni.so', missing and no known rule to make it

FAILURE: сборка не удалась, исключение.

Кто может помочь мне настроить его?Спасибо.

Кстати, после того, как я удалил все abiFilters и сохранил журнал сборки, я обнаружил, что jni компилируется 2 раза.Почему?

cat log | grep LivenessDetectorJni --color
Build LivenessDetectorJni x86_64
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/x86_64/libLivenessDetectorJni.so
Build LivenessDetectorJni x86
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/x86/libLivenessDetectorJni.so
Build LivenessDetectorJni arm64-v8a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/arm64-v8a/libLivenessDetectorJni.so
Build LivenessDetectorJni armeabi-v7a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/armeabi-v7a/libLivenessDetectorJni.so
Build LivenessDetectorJni x86_64
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/x86_64/libLivenessDetectorJni.so
Build LivenessDetectorJni x86
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/x86/libLivenessDetectorJni.so
Build LivenessDetectorJni arm64-v8a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/arm64-v8a/libLivenessDetectorJni.so
Build LivenessDetectorJni armeabi-v7a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libLivenessDetectorJni.so

Если я использую abiFilters, то журнал изменяется следующим образом:

cat log | grep LivenessDetectorJni --color
Build LivenessDetectorJni armeabi-v7a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/common-silent/build/intermediates/cmake/debug/obj/armeabi-v7a/libLivenessDetectorJni.so
Build LivenessDetectorJni x86_64
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/x86_64/libLivenessDetectorJni.so
Build LivenessDetectorJni x86
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/x86/libLivenessDetectorJni.so
Build LivenessDetectorJni arm64-v8a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/arm64-v8a/libLivenessDetectorJni.so
Build LivenessDetectorJni armeabi-v7a
[1/2] Building CXX object CMakeFiles/LivenessDetectorJni.dir/LivenessDetectorJni.cpp.o
[2/2] Linking CXX shared library /home/jnitest/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libLivenessDetectorJni.so

Ответы [ 2 ]

1 голос
/ 02 июля 2019

abiFilter является частью блока ndk.

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      //cmake {...}
      ndkBuild {
         abiFilters 'armeabi-v7a'
      }
    }


  }

Подробнее см. Здесь.https://developer.android.com/studio/projects/gradle-external-native-builds#specify-abi

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

Поскольку я связываю c ++ в проекте android 2 раза, проект собирается 2 раза.

...