У меня есть несколько проектов на C ++, которые я сейчас создаю, используя файлы Android.mk и ndk-build. Поскольку отладка не так уж и хороша, я хочу включить эти проекты на C ++ в качестве модулей в мой проект android studio. Этот проект студии android в настоящее время является java-библиотекой android, которая использует .so из ndk-build.
Я начал отладку, создав новый модуль библиотеки Android и импортировав код C ++, установив заголовок и пути к библиотекам. Этот модуль выглядит так:
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion = 23
buildToolsVersion = '23.0.2'
defaultConfig {
minSdkVersion.apiLevel = 4
targetSdkVersion.apiLevel = 23
}
}
android.ndk {
moduleName = 'module_name'
toolchain = 'gcc'
stl "gnustl_static"ldFlags.addAll(["-L/LIB_PATH"])
ldLibs.addAll(["android", "log", "whatever_lib"])cppFlags.addAll(['-std=c++11',
"-I" + "/SEARCH_PATHS"])
}
android.productFlavors {
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
}
android.sources {
main {
java.source.srcDirs += []
res.source.srcDirs += []
assets.source.srcDirs += []
jniLibs.source.srcDirs += []
jni.source{
srcDirs += [
NATIVE_PROJECT_PATH + "include/",
NATIVE_PROJECT_PATH + "src/",
]
}
}
}
}
Это работает нормально, но я получаю .so в модуле / build / output / aar / libname_release.aar / lib / abi / lib.so, что не очень хорошее место, так как мне нужно было бы .so напрямую, без разархивирования aar.
Есть ли какой-нибудь возможный способ позволить этому модулю только создавать .so по заданному пути, а другой модуль построить и использовать его?
Конечно, я нахожу способ вскоре после того, как спросил.
http://tools.android.com/tech-docs/new-build-system/gradle-experimental#TOC-NDK-Dependencies
Вместо «apply plugin: ‘com.android.model.library» «вы можете использовать» apply plugin:’ com.android.model.native ‘»и в модуле, имеющем зависимость, вы можете использовать:
sources {
main {
jni {
dependencies {
project ":dependency_module"}
}
}
}
Других решений пока нет …