Android实验gradle插件&;安卓工作室3

Android实验gradle插件&;安卓工作室3,android,android-ndk,android-gradle-plugin,gradle-experimental,Android,Android Ndk,Android Gradle Plugin,Gradle Experimental,我有一个Android项目,我们已经使用实验性的Gradle插件一段时间了。随着Android Studio 3的发布和Gradle 4的迁移,我有几个问题要问 在短短的几个月内,还没有人添加新的实验性gradle版本,最后一个版本11 alpha是3个月前发布的。这是否仍在维持 有没有比实验性的Gradle插件更好的方法来完成复杂的NDK构建?我做了一些研究,看起来有一种方法可以创建一个cMake txt文件并调用它,就像他们使用这个Samba客户机那样 当我说复杂的NDK构建时,我有很多C

我有一个Android项目,我们已经使用实验性的Gradle插件一段时间了。随着Android Studio 3的发布和Gradle 4的迁移,我有几个问题要问

  • 在短短的几个月内,还没有人添加新的实验性gradle版本,最后一个版本11 alpha是3个月前发布的。这是否仍在维持

  • 有没有比实验性的Gradle插件更好的方法来完成复杂的NDK构建?我做了一些研究,看起来有一种方法可以创建一个cMake txt文件并调用它,就像他们使用这个Samba客户机那样

  • 当我说复杂的NDK构建时,我有很多C++库在一起。我有一组自定义C++代码,我有一对第三方库,它们拥有自己的代码以及共享库。我有许多jni接口文件来管理这一切

    我缩短了这个示例,但我有12个so文件

    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"
                    }
                }
        }
    }
    

    所以来回答我自己上面的问题

  • 已经宣布,实验性gradle插件在0.11.0之后将不再受支持。所以它不再被维护了

  • 我的项目已转换为使用CMake。使用最新的gradle 4.1,并将所有内容转换为CMake和CMakeLists.txt类型的构建,我们能够在没有gradle实验版本的情况下构建项目