Экспериментальный плагин для Android и Android Studio 3
У меня есть проект Android, и мы уже некоторое время используем экспериментальный плагин Gradle. с анонсированной Android Studio 3 и переходом на Gradle 4 у меня есть пара вопросов
Просто за пару месяцев никто не добавил новый экспериментальный релиз Gradle, а последняя версия 11 alpha - 3 месяца назад. Это все еще поддерживается?
Есть ли лучший способ делать сложные сборки NDK, чем экспериментальный плагин Gradle? Я провел небольшое исследование, и похоже, что есть способ получить текстовый файл cMake и вызвать его, как они делали с этим клиентом Samba, https://github.com/google/samba-documents-provider/tree/master/app
Когда я говорю о сложной сборке NDK, у меня есть несколько библиотек C++, которые я собираю вместе. У меня есть куча нестандартного кода на C++, у меня есть пара сторонних библиотек, которые имеют собственный код, а также разделяемые библиотеки. И у меня есть несколько файлов интерфейса jni, чтобы управлять всем этим.
Я сократил этот пример, но у меня есть 12 файлов.
model {
// this repositories section defines our list of external shared libraries
// included here are all nuance libs and python 3.5
repositories {
libs(PrebuiltLibraries) {
lib1 {
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("src/main/jniLibs/${targetPlatform.getName()}/lib1.so")
}
}
lib2{
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("src/main/jniLibs/${targetPlatform.getName()}/lib2.so")
}
}
}
}
Затем у меня есть следующее для раздела NDK
// defines the NDK build
ndk {
moduleName "myApp"
toolchain = "clang"
// We set the platform for the NDK. with the a certain device we were getting missing libraries without it
// https://github.com/android-ndk/ndk/issues/126
platformVersion="23"
// If switching to GNU, here are the values to replace with
stl "gnustl_shared"
CFlags.addAll(["-DNDEBUG"])
cppFlags.addAll(["-fexceptions", "-std=gnu++11"])
// when adding system library dependencies, they are added here
ldLibs.addAll(["log","atomic"])
// C include directories
CFlags.addAll(["-I${file("src/main/jni/lib1/inc")}".toString(),
"-I${file("src/main/jni/lib2")}".toString()
])
// C++ include directories
cppFlags.addAll(["-I${file("src/main/jni/lib1/inc")}".toString(),
"-I${file("src/main/jni/lib1")}".toString(),
"-I${file("src/main/jni/lib2")}".toString(),
"-I${file("src/main/jni/lib2/os")}".toString(),
"-I${file("src/main/jni")}".toString()
])
}
`
Затем также в Gradle я перечисляю все мои источники JNI
// this section is to list the NDK static/shared library dependencies
// these dependencies are defined in detail above in the repositories section
sources {
main {
jni {
dependencies {
library "lib1"
library "lib2"
library "lib3"
library "lib4"
library "lib5"
library "lib6"
library "lib7"
library "lib8"
library "lib9"
library "lib10"
library "lib11"
library "lib12"
}
}
}
}
1 ответ
Поэтому, чтобы ответить на мои собственные вопросы выше.
Было объявлено, что экспериментальный плагин Gradle больше не будет поддерживаться после 0.11.0. Так что нет, это больше не поддерживается.
Мой проект был преобразован для использования CMake. С последней версией Gradle 4.1 и преобразованием всего в CMake и сборку типа CMakeLists.txt мы смогли собрать проект без экспериментальной версии gradle.