在Android Studio中是否可以使用.so作为输出构建本机模块

时间:2016-07-22 08:37:37

标签: android c++ android-studio android-ndk android-gradle

我有几个c ++项目,我目前使用Android.mk文件和ndk-build构建。由于这不是很好调试我想在我的android studio项目中包含这个c ++项目作为模块。这个android工作室项目目前是一个使用来自ndk-build的.so的android java库。

我通过创建一个新的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/",

                ]
            }
        }
    }
}

这个工作正常,但是我在模块/ build / output / aar / libname_release.aar / lib / abi / lib.so中得到.so这不是一个好地方,因为我需要.so直接而不解压缩aar 。

有没有办法让这个模块只在给定的路径上创建.so并建立另一个模块并使用它?

1 个答案:

答案 0 :(得分:1)

当然,我在询问后不久找到了一条路。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental#TOC-NDK-Dependencies

而不是"应用插件:' com.android.model.library'"你可以使用" apply plugin:' com.android.model.native'"在具有依赖关系的模块中,您可以使用:

sources {
    main {
        jni {
            dependencies {
                project ":dependency_module"
            }
        }
    }
}