2016-12-22 10 views
2

私はAndroidスタジオ2.2を使用しており、CMake経由でNDKでc/C++ソースをビルドするためにGradleをセットアップしています。一部のビルドバリアントのためにAndroid NDKビルドを無効にする方法

ここで、buildType "debug"のNDKビルドを無効にしたいと思います。 buildType "release"については、私はそれを保持したいと思います。

NDKソースをビルドサーバー上でコンパイルする(「リリース」を使用)が、開発者は「デバッグ」を使用して無効にすることを目標としています。

これは、現在使用中のbuild.gradleファイルです:どのように私はdefaultConfigまたはbuildType "デバッグ" のためにNDKビルド(externalNativeBuild)を無効にすることができ

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がインストールされていない他の開発者(local.properties ndk.dir = PATH_TO_NDKなし)。これは設定が可能ですか?事前に

おかげ


編集:

これexternalNativeBuildは 'com.android.library'モジュールではなく、' com.android.application'-で設定する必要がありますモジュール。

答えて

2

ここで私はそれをどのように解決したのですか。

この方法では、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に従って特定のことをやりたい(スキップする)ことができます。もしそうなら、あなたはこの件に関する多くの議論の1つ、例えばget current buildTypeを見ることができます。

#2については、あなたが望むものはあまり明確ではありません。 local.propertiesでNDKパスを設定する代わりに、ANDROID_NDK_HOME環境変数を使用してNDKパスを設定できます。 gradleが失敗するのを防ぐには、build.gradleスクリプトの関連する場所にndk.dirが存在するかどうかを確認します(properties.getProperty( 'ndk.dir')を使用)。

+0

ありがとうございました@yakobom! 私は#2のあなたの答えに触発された解決策を見つけました。別の答えとして投稿しました。 #1はもう必要ありませんでした。そして、私は重要な詳細について言及することを忘れていました - "externalNativeBuild"設定は、アプリケーションではなくライブラリに対して行われます。そして、私は次の制限を認識していませんでした: "デフォルトでは、ライブラリはそのリリース版のみを公開しています"(http://tools.android.com/tech-docs/new-build-system/user-guide) – andrfog

関連する問題