如何使用Android Studio + Gradle + NDK构建外部C ++库?

时间:2016-04-21 14:43:31

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

我现在正在将C ++库移植到Android。我已经做了初步工作,并以Application.mk/Android.mk的方式构建它。

即将推出的Java库演示应用程序正在Android Studio中开发。我可以将所有内容(演示+库)组合在一起 - 感谢StackOverflow社区。

但是我无法在这些版本中访问本机调试。但调试是必要的 - 库还不够稳定。纯控制台GDB调试现在需要花费太多时间,以后可能会消耗更多时间。

所以我决定使用Android Studio和Gradle进行构建以使用集成调试器。

我有专门的库模块,包含NDK和Java(包装器)部件。 但是,C / C ++源文件不在jni /子目录下。它们位于另一个目录中。

因此,我可以配置Gradle从该目录获取源。 我试过像这样的人:

apply plugin: 'com.android.model.library'

model {
android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        minSdkVersion.apiLevel = 10
        targetSdkVersion.apiLevel = 23
        versionCode = 1
        versionName = "1.0"
    }

    ndk {
        moduleName = "inttalksdk"
        stl "gnustl_shared"
        cppFlags.add("-std=c++11")
        cppFlags.add("-fexceptions")
        ldLibs.addAll(['log'])
    }
}

android.sources {
    main.jni.source {
        srcDirs.add(["src"])
    }
}


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

但AS甚至无法同步项目。 错误信息是:

Gradle 'Android' project refresh failed
Error:Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'android.sources { ... } @ inttalksdk/build.gradle line 24, column 5'

我的真正问题是:如何将这些外部C / C ++文件添加到Gradle构建中?

我使用最新的AS 2.0 + 0.7.0 beta3实验插件。

请帮忙。

1 个答案:

答案 0 :(得分:1)

问题出现在0.7.0-beta3实验插件中。我恢复到0.6.0版本。 这个语法没问题:

    android.sources {
    main {
        jni {
            source {
                srcDir "${project.ext.inttalksdk}/src/Components/Util/"
            }
        }
    }