NDK模块不包含在最终APK中

时间:2016-04-08 12:44:22

标签: android gradle android-ndk gradle-experimental

我继承了一个非常混乱的Android项目,其中包含大量的NDK依赖项,并且在使用gradle正确链接并将所有.so和.a文件包含到生成的apk中时遇到了很多问题。

该项目由一些java代码组成,这些代码设置了一些活动并调用了一个大的NDK库,它是用C ++构建的,后者又与第三方库(预构建或从源代码构建)连接。

我已经设法使用最新的gradle实验插件进行构建,但由于某种原因,我的模块不包含在apk中而我的第三方.so文件即使我可以看到gradle已经构建我的模块放在一个.so文件中,它放在了构建目录中。

我的build.gradle看起来像这样:

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "22.0.1"
        defaultConfig.with {
            applicationId = "<removed>"
            minSdkVersion.apiLevel = 7
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }
        ndk {
            moduleName = "XM"
            CFlags.add("-I${file("src/main/jni")}".toString())
            cppFlags.addAll(["-I${file("../../3rd_part/android/osg")}".toString()])
            cppFlags.addAll(["-I${file("../../3rd_part/android/opus")}".toString()])
            ldFlags.add("-L${file("src/main/jniLibs/armeabi-v7a")}".toString())
            ldLibs.addAll(["osgdb_jpeg", "osgdb_freetype", "jpeg","argsub_es", "jnigraphics", "android", "log"])
            stl = "gnustl_shared"
            abiFilters.add("armeabi-v7a")
        }

        sources {
            main {
                jni {
                    source {
                        srcDir "../../core"
                        srcDir "src/main/jni"
                    }
                }

            }
        }
        lintOptions.abortOnError = false
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles.add(file('proguard-rules.txt'))
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:23.0.0'
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.android.support:design:23.0.0'
    compile 'com.wunderlist:sliding-layer:1.1.1'

}

总结我的问题:为什么gradle构建我的模块(libXM.so),将它放入build / libs / xM / shared / armeabi-v7a / debug,但不包含在我的最终apk文件中? / p>

1 个答案:

答案 0 :(得分:1)

我没有得到好几件事:如果你想用gradle建立一个共享库,那么你必须使用apply plugin: 'com.android.model.library'而不是应用程序

如果你想构建一个应用程序并使用预构建的库,那么你必须写这样的东西:

    sources {
        main {
            jni {
                source {
                    srcDir "../../core"
                    srcDir "src/main/jni"
                }
                dependencies{
                    library "XM" linkage "shared"
                }

当然,先前设置 ldFlags