Android Studio, Gradle, OpenCV и NDK

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

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

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

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

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

Экспорт ANDROID_NDK = pathTo / android-ndk-r9

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

Я вижу ссылку на jniFolder, но не понимаю, что это такое и что мне сейчас нужно. Stackoverflow.com/questions/17767557

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

}

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

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

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

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


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

Если у вас есть библиотеки, которые вы создаете с помощью ndk и хотите поместить их в проект Android с поддержкой 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'] } } 

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

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