Экспериментальный плагин для Android и Android Studio 3

У меня есть проект Android, и мы уже некоторое время используем экспериментальный плагин Gradle. с анонсированной Android Studio 3 и переходом на Gradle 4 у меня есть пара вопросов

  1. Просто за пару месяцев никто не добавил новый экспериментальный релиз Gradle, а последняя версия 11 alpha - 3 месяца назад. Это все еще поддерживается?

  2. Есть ли лучший способ делать сложные сборки 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 ответ

Решение

Поэтому, чтобы ответить на мои собственные вопросы выше.

  1. Было объявлено, что экспериментальный плагин Gradle больше не будет поддерживаться после 0.11.0. Так что нет, это больше не поддерживается.

  2. Мой проект был преобразован для использования CMake. С последней версией Gradle 4.1 и преобразованием всего в CMake и сборку типа CMakeLists.txt мы смогли собрать проект без экспериментальной версии gradle.

Другие вопросы по тегам