Android Studio, Gradle, OpenCV и NDK

Я пытаюсь проверить OpenCV Android, на Android Studio, я смущен тем, как включить NDK.

Что я хочу сделать, это запустить образцы, которые поставляются с OpenCV. Из 6 предоставленных образцов мне удалось успешно выполнить 4. Исключениями были обнаружение лица и активность натив.

Я подозреваю, что причина в том, что я неправильно настроил свой NDK.

Googling Я нашел кучу дискуссий, но на самом деле их не понимаю. Это мой первый раз, когда я пытаюсь работать как с NDK, так и с OpenCV, и мое понимание Gradle ограничено.

Я установил переменную окружения в свой .bash_profile

export ANDROID_NDK = pathTo/android-ndk-r9

Я не понимаю, как это сделать в студии.

Я вижу ссылку на jniFolder, но не понимаю, что это такое и что мне сейчас нужно. qaru.site/info/353497/...

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = new HashSet<File>()
pkgTask.jniFolders.add(new File(projectDir, 'native-libs'))

}

Что я должен делать с этой пастой в конце моего файла build.gradle?

В суммировании, мои вопросы.

  • Как заставить Android Studio читать переменную NDK?
  • Что такое jniFolders?
  • Достаточно ли просто вставить в конец моего файла build.gradle?

Дискуссии в Google Group по Gradle и NDK


Для всех, кто сталкивается с этим, я решил это отдельно от Xaviers anwser.  Сначала я прочитал OVERVIEW.html, который поставляется с NDK, в каталоге docs. Затем я скомпилировал файлы .mk и .cpp в файл .so. Я сделал это на месте в образце jni-каталога Это создало файл .so в папке libs, который я скопировал в пункт назначения, как указано Xavier.

Ответ 1

Если у вас есть библиотеки, которые вы создаете с помощью ndk, и хотите поместить их в проект андроида gradle с поддержкой версии 0.7 + плагина, вы можете просто поместить их в

src/main/jniLibs/<abi>/libfoo.so

например:

src/main/jniLibs/armeabi-v7a/libfoo.so
src/main/jniLibs/x86/libfoo.so

и они будут автоматически упакованы.

Если вы хотите сохранить их в папке native-libs, вы можете поместить в файл gradle следующее:

android {
    sourceSets.main {
        jniLibs.srcDirs = ['native-libs']
    }
}

Все это действительно говорит gradle, где папка jniLibs для основного исходного набора (относительно корня проекта).

Отсканированный фрагмент делает что-то другое. Он говорит, что задача пакета также включает некоторые собственные библиотеки. Это был взлом, который использовался в предыдущей версии, используя недокументированный API задачи, которые больше не поддерживаются.