簡體   English   中英

如何使用 Android Studio + Gradle + NDK 構建外部 C++ 庫?

[英]How to build external C++ library with Android Studio + Gradle + NDK?

我現在正在將 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 實驗插件。

請幫忙。

問題出在 0.7.0-beta3 實驗插件中。 我恢復到 0.6.0 版本。 這個語法沒問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM