android - 是否有可能在 Android Studio 中构建一个带有 .so 作为输出的 native 模块

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

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

我通过创建一个新的 android 库模块并导入 c++ 代码、设置 header 和库路径来进行调试。这个模块看起来像这样:

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/",

                ]
            }
        }
    }
}

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

是否有任何可能的方法让这个模块只在给定路径创建 .so 并让另一个模块构建和使用它?

最佳答案

当然问了没多久就找到了办法。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental#TOC-NDK-Dependencies

您可以使用“应用插件:'com.android.model.native'”代替“应用插件:'com.android.model.library'”,并且在具有依赖项的模块中,您可以使用:

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

关于android - 是否有可能在 Android Studio 中构建一个带有 .so 作为输出的 native 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521846/

相关文章:

java - 错误 - 未注册仪器!必须在注册仪器下运行

android - 从 SQLite 获取所有行

c++ - 使用三元运算符初始化引用变量?

android - 如何加快 android studio 中的 Espresso 运行过程?

android - Gradle + AndroidAnnotations 生成重复的类错误 - 需要在每次构建之前清理项目

android - 共享 TTS 在 Activity 死了然后又活了之后没有工作

android - 如何用测试数据测试一个ListActivity?

C++ 字符串/字符* 连接

c++ - "Expected class-name"...析构函数实现中的问题

Android Studio 上的 Android Tesseract OCR