Как собрать внешнюю библиотеку C ++ с Android Studio + Gradle + NDK?

Я портирую библиотеку C ++ на Android сейчас. Я уже выполнил начальную работу и собрал ее способом Application.mk/Android.mk.

Предстоящее демонстрационное Java-приложение для библиотеки разрабатывается в Android Studio. Я могу собрать все (демо + библиотека) вместе — благодаря сообществу StackOverflow.

Однако у меня нет доступа к собственной отладке в этих сборках. Но необходима отладка — библиотека еще недостаточно стабильна. Отладка GDB на чистой консоли пока занимает слишком много времени и в будущем может занять больше времени.

Поэтому я решил сделать сборку с Android Studio и Gradle, используя встроенный отладчик.

У меня есть специальный библиотечный модуль с частями NDK и Java (оболочки).
Однако исходные файлы C / C ++ не находятся в подкаталоге jni /. Они расположены в другом каталоге.

Поэтому я могу настроить Gradle для получения источников из этого каталога.
Я пытался что-то вроде этого:

apply plugin: 'com.android.model.library'

model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel = 10
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"}

ndk {
moduleName = "inttalksdk"stl "gnustl_shared"cppFlags.add("-std=c++11")
cppFlags.add("-fexceptions")
ldLibs.addAll(['log'])
}
}

android.sources {
main.jni.source {
srcDirs.add(["src"])
}
}android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-android.txt'))
}
}
}

Но AS не может синхронизировать проект даже.
Сообщение об ошибке:

Gradle 'Android' project refresh failed
Error:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'android.sources { ... } @ inttalksdk/build.gradle line 24, column 5'

Мой настоящий вопрос: как добавить эти внешние файлы C / C ++ в сборку Gradle?

Я использую последний экспериментальный плагин AS 2.0 + 0.7.0 beta3.

Пожалуйста помоги.

1

Решение

Проблема была в экспериментальном плагине 0.7.0-бета3. Я вернулся к версии 0.6.0.
Этот синтаксис был в порядке:

    android.sources {
main {
jni {
source {
srcDir "${project.ext.inttalksdk}/src/Components/Util/"}
}
}
1

Другие решения

Других решений пока нет …