2017-11-29 13 views
0

私のアプリはいくつかのネイティブの仕事をするためにJNIを使​​用し、すべてのC++ファイルが私のbuild.gradleでgradleでC++ファイルを無視する方法は?

externalNativeBuild { 
    ndkBuild { 
     path 'src/main/jni/Android.mk' 
    } 
} 

とJNI /メイン/ srcに/です。

すべての私の同僚がjniをライブラリにしてndkをダウンロードせずにapkを構築できるようになるまで、すべて正常に動作します。

私はndk-buildを使用し、ライブラリはsrc/main/libsで生成されます。私はAPKを構築する場合でも、Gradleのは言う:

> Error: Your project contains C++ files but it is not using a supported native build system. 
    Consider using CMake or ndk-build integration. For more information, go to: 
    https://d.android.com/r/studio-ui/add-native-code.html 
    Alternatively, you can use the experimental plugin: 
    https://developer.android.com/r/tools/experimental-plugin.html 

は、私が欲しいのは、JNIでソースコードを保つため、手動でライブラリを構築し、Gradleのは、CPPファイルを無視することです。

アイデア?

答えて

0

私はこのようにそれを包む:

if (ndkDirectory) { 
    externalNativeBuild { 
    ndkBuild { 
     path 'src/main/jni/Android.mk' 
    } 
    } 
} 

しかし、ASは、JNI /メイン標準位置のsrc /にCPPファイルを見つけることができれば、それはまだ文句を言うだろう、と私はNDKはビルドにタスクをコンパイルし無効にします。最後にのグラデル、のアンドロイドのブロックが閉じられた後。

tasks.all { 
    task -> 
    if (!android.NdkDirectory) { 
     if (task.name.endsWith('Ndk') || task.name.startsWith('externalNativeBuild')) { 
     task.enabled = false // Android Studio will complain about c++ files when NDK is not installed 
    } 
    } 
} 
+0

私は、アンドロイドブロックだけがndkDirectoryを読めると思っていましたので、タスクのNdkDirectoryがndkDirectoryの値を取得する方法を教えてください。 – reavenisadesk

+0

*アンドロイドブロックのみがndkDirectory変数を読み取ることができます* - 正しい。今修正されました。 –

+1

@アレックスコーンは、あなたのコードに触発された、私はコンパイラの問題を処理するハンドラの方法を思いついた、私は答えとしてそれを投稿、あなたはレビューするwolcomeです。 – reavenisadesk

0

が@Alexコーンに触発ガット、私はアイデアを思い付いた:

sourceSets { 
    main { 
     if (!android.ndkDirectory) { 
      jniLibs.srcDirs = ["src/main/libs"] 
      jni.srcDirs = [] 
     } else { 
      jniLibs.srcDirs = [] 
     } 
    } 
} 

if (ndkDirectory) { 
    externalNativeBuild { 
     ndkBuild { 
      path 'src/main/jni/Android.mk' 
     } 
    } 
} 

jni.srcDirs = []は、コンパイラがJNIファイルを無視するようになります。

+0

私は通常、** sourceSets **を使いこなすことを好まないのです。** ndk-build **を実行したくないとしても、私はまだC++ソースを見たいからです。しかし、これは味の問題です、あなたのアプローチは動作します。 –

関連する問題