2016-06-21 14 views
1

現在、アンドロイドのnbkプロジェクトに取り組んでいます。実行中./gradlew buildNativeは成功しますが、グラデルビルドは行われません

compiling TextRenderer.cpp failed. 
/Users/user/android-ndk/san-angeles/app/src/main/jni/src/Renderers/TextRenderer.cpp:5:10: fatal error: 'ft2build.h' file not found 
#include <ft2build.h> 
     ^
1 error generated. 

compiling BoxRenderer.cpp successful. 

compiling triangle.cpp successful. 

Finished compileSanangelesArmeabi-v7aDebugSharedLibrarySanangelesMainCpp, see full log file:///Users/user/android-ndk/san-angeles/app/build/tmp/compileSanangelesArmeabi-v7aDebugSharedLibrarySanangelesMainCpp/output.txt. 
:私は ./gradlew buildNativeを使用して構築することができていますが、私は gradle assembleDebugをしようとすると、私はエラーが出

def ndkDir = "/Development/android-sdk-macosx/ndk-bundle" 
task buildNative(type: Exec, description: 'Compile JNI source via NDK') { 
    commandLine "$ndkDir/ndk-build", 
      '-C', file('src/main/jni').absolutePath, 
      '-j', Runtime.runtime.availableProcessors(), 
      'all', 
      'NDK_DEBUG=1' 
} 

task cleanNative(type: Exec, description: 'Clean JNI object files') { 
    commandLine "$ndkDir/ndk-build", 
      '-C', file('src/main/jni').absolutePath, 
      'clean' 
} 

:私は私のGradleラッパーから構築することができるように私は、私のbuild.gradleに現在のコマンドを持っています Was able to cross compile Freetype2, now what?

編集:

012それはその時点(と思う)を通過した

は、私が問題にクロスコンパイルFreeTypeライブラリを使用していますが、私は得ました

私は私のGradleはこれに建てる変更されました:

apply plugin: 'com.android.model.application' 
model { 
    android { 
     ... 
     sourceSets.main { 
      jniLibs.srcDir 'src/main/jni/freetype/lib' 
      jni.srcDirs = [] 
     } 
     ... 
    } 
} 
task buildNative (...){ 
    ... 
} 
task cleanNative (...){ 
    ... 
} 

をしかし、今、私はこのエラーを取得する:

Gradle sync failed: Cause: com.android.build.gradle.managed.AndroidConfig$Impl 
+1

** jni **ディレクトリにCPPファイルがある場合、Android Studio gradle pluginによって自動的に起動されるC++ビルドを無効にする必要があります。通常、このタスクを無効にするには、人々は** jni.srcDirs = [] **を設定しますが、C++コンパイルタスクを名前で無効にすることをお勧めします: 'if(task.name.contains( 'compileDebugNdk')|| task.name。 contains( 'compileReleaseNdk'))task.enabled = false'です。 –

+0

これはライブラリをjniにリンクするのを妨げますか? – iHowell

+0

そして、これをあなたのコードに正確にどこに入れましたか? – iHowell

答えて

1

あなたがexperimentalの刻々と変化するC++のサポートで苦労したくない場合あなたは単にAndroid Studioによって生成されたbuild.gradleを使用することができます。 JNIフォルダ内のC++ファイルの自動コンパイルを無効にするには、jni.srcDirs上書きすることができます:

jni.srcDirs = [] 
jniLibs.srcDir 'src/main/jni/freetype/lib' 

をライブラリには、NDK-構築意志でコンパイルされたように、ここで私は、にjniLibs.srcDirを上書きAPKファイルに含めることができます。

は実は、私は(私は彼らと一緒に動作するように実行している別のIDEを必要としない、このように)私のC++ファイルでjni.srcDirsポインティングを維持することを好む、と私はどこかビルドに(Gradleのタスクを無効にします。 Gradleのファイル):

tasks.all { 
    task -> if (task.name.contains('compileDebugNdk') || 
       task.name.contains('compileReleaseNdk')) 
        task.enabled = false 
} 

私もbuildNativeとcleanNativeを実行するためのシステムを教えることができ、必要なとき:

tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn buildNative 
} 

clean.dependsOn cleanNative 

注Androidのメーカー、2次のバージョンのこと。 2(現在パブリックベータ版)、makes ndk-build a first class citizen

+0

これを読んでいる人には、実験的なプラグインは使用しませんでした。ちょうど普通の 'com.android.applcation'プラットフォームです。また、 'jni.srcDirs = ...'は階層に従います: 'android.sourceSets.main.jni.srcDirs'。 – iHowell

関連する問題