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 задачи, которые больше не поддерживаются.