2016-05-22 70 views
14

Android Studio 2.2預覽版1具有新的外部ndk構建功能,但app/build.gradle官方博客文章中顯示的代碼段中並不清楚如何設置其他ndk建立參數,Application.mk文件通常包含enter image description here如何在Android Studio 2.2中正確使用NDK-Build預覽版1

我能夠通過externalNativeBuild設置Android.mk NDK編譯文件,但我怎麼能設置所需的Application.mk變量?

Application.mk包含:

NDK_TOOLCHAIN_VERSION := clang 
APP_PLATFORM := android-16 
APP_ABI := armeabi 
APP_STL := c++_static 
APP_CPPFLAGS += -std=c++11 
+3

顯然[這是不可能](https://code.google.com/p/android/issues/detail?id=210537)現在。 – Michael

+0

作爲臨時的妥協,您可以修改您的$(NDK_ROOT)/ ndk-build以將路徑傳遞到您的Application.mk –

回答

7

的Android Studio 2.2中的第三個預覽與更新插件的gradle增加了額外的參數支持。您可以設置Application.mk和額外的配置是這樣的:

defaultConfig { 
    ndkBuild { 
    arguments "NDK_APPLICATION_MK:=Application.mk" 
    cFlags "-DTEST_C_FLAG1" "-DTEST_C_FLAG2" 
    cppFlags "-DTEST_CPP_FLAG2" "-DTEST_CPP_FLAG2" 
    abiFilters "armeabi-v7a", "armeabi" 
    } 
} 

如果可能的話,我會建議遷移到CMake的構建系統,因爲Android Studio中更好的C++代碼編輯器和調試集成。你可以在這裏找到關於gradle插件配置的更多信息: https://sites.google.com/a/android.com/tools/tech-docs/external-c-builds

編輯: 在Android Studio 2.2中第五個預覽版中,必須用cmakendkBuild組下externalNativeBuild組:

defaultConfig { 
    externalNativeBuild { 
    ndkBuild { 
     targets "target1", "target2" 
     arguments "NDK_APPLICATION_MK:=Application.mk" 
     cFlags "-DTEST_C_FLAG1", "-DTEST_C_FLAG2" 
     cppFlags "-DTEST_CPP_FLAG2", "-DTEST_CPP_FLAG2" 
     abiFilters "armeabi-v7a", "armeabi" 
    } 
    } 
} 

編輯2:看來,下externalNativeBuild組包裝ndkBuild不起作用,因爲在構建工具中的錯誤。

+2

雖然這可能存在於預覽中,但它不存在於2.2.0或2.2.1該插件。 –

+0

@Cameron Lowell Palmer它存在,你只需要在externalNativeBuild組中包裝ndkbuild組。看到我的答案編輯。 – Tadas

+0

@Tadas是否真的使用2.2.0或2.2.1版本進行測試? –

0

add-native-code

android { 
    ... 
    defaultConfig {...} 
    buildTypes {...} 

    // Encapsulates your external native build configurations. 
    externalNativeBuild { 

    // Encapsulates your CMake build configurations. 
    cmake { 

     // Provides a relative path to your CMake build script. 
     path "CMakeLists.txt" 
    } 
    } 
} 

注意:如果你想搖籃鏈接到現有NDK建新項目,使用ndkBuild {}塊,而不是cmake的{},並提供一個相對路徑你的Android.mk文件。 如果Gradle與Android.mk文件位於同一目錄中,它還包含Application.mk文件。

相關問題