2016-12-22 53 views
2

我正在使用Android Studio 2.2並設置Gradle通過CMake使用NDK構建c/C++源。如何禁用某些構建變體的Android NDK構建

現在我想爲buildType「debug」禁用NDK構建。對於buildType「發佈」,我想保留它。

目標是在構建服務器上編譯NDK源代碼(使用「release」),但爲開發人員禁用它(使用「debug」)。

這是的build.gradle文件目前正在使用:

android { 
    externalNativeBuild { 
     cmake { 
      path "CMakeLists.txt" 
     } 
    } 

    defaultConfig { 
     externalNativeBuild {     
      cmake { 
       arguments "-DANDROID_TOOLCHAIN=clang" 
       cppFlags "-std=c++14" 
      } 
     } 

     ndk { 
      abiFilters 'armeabi-v7a', 'x86' 
     } 
    } 

    buildTypes {   
     release {    
      externalNativeBuild {     
       cmake { 
        arguments "-DANDROID_TOOLCHAIN=clang" 
        cppFlags "-std=c++14" 
       } 
      } 

      ndk { 
       abiFilters 'armeabi-v7a' 
      } 
     } 
    } 
} 
  1. 如何我可以禁用NDK編譯(externalNativeBuild)爲defaultConfig或buildType 「調試」?

  2. 其他開發者將不會安裝NDK(local.properties 沒有 ndk.dir = PATH_TO_NDK)。這可能配置嗎?

預先感謝


編輯:

這externalNativeBuild必須與被配置 'com.android.library'模塊,而不是一個' com.android.application'-模塊。

回答

2

這是我如何解決它。

這種方式Gradle構建適用於開發者安裝(並在構建服務器上),NDK,這是目標。

/* 
* As soon as Gradle is linked to the externalNativeBuild (cmake/ndkBuild) with a path to 
* CMakeLists.txt/Android.mk, the ndk.dir from local.properties file or the ANDROID_NDK_HOME 
* environment variable needs to be set, otherwise gradle fails. 
* E.g.: 
externalNativeBuild { 
    cmake { 
     path "CMakeLists.txt" 
    } 
} 
*/ 

// Only enable externalNativeBuild on machines with NDK installed -> valid ndkDir 
def ndkDir = project.android.ndkDirectory; 
if (ndkDir != null && !ndkDir.toString().isEmpty()) { 

    externalNativeBuild.cmake.path = "CMakeLists.txt" 
} 
0

關於#1,如果我理解正確,您希望根據buildType執行(或跳過)某些事情。如果是這樣,您可以查看關於此主題的許多討論之一,例如:get current buildType

關於#2,它不是很清楚你想要什麼。如果您正在尋找在local.properties中設置NDK路徑的替代方法,則可以通過ANDROID_NDK_HOME環境變量對其進行設置。如果要防止gradle失敗,請檢查ndk.dir是否存在於build.gradle腳本的相關位置(使用properties.getProperty('ndk.dir'))。

+0

謝謝@yakobom! 我發現了一個解決方案,其靈感來自你對#2的回答。我已將它作爲單獨的答案發布。 #1不再需要了。我忘了提到一個重要的細節 - 「外部生成構造」配置應該爲圖書館而不是應用程序。我並不知道以下限制:「默認情況下,庫僅發佈其版本變體」(http://tools.android.com/tech-docs/new-build-system/user-guide) – andrfog