web-dev-qa-db-ja.com

Android StudioでNDKプロジェクトのビルドがゼロ以外の終了値で失敗しました

作業中のプロジェクトをEclipseからインポートしましたAndroid SDK環境に新しいAndroid Studio。プロジェクトを実行しようとすると、

Error:Execution failed for task ':app:compileDebugNdk'.
> com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'ndk/ndk-build'' finished with non-zero exit value 2

まず、私にとって最初にこのエラーが表示されるのは奇妙です。EclipseAndroid SDKを以前に使用していたので、私は自分でndk-buildを実行しましたが、それでもまだです。Android Studioでndk-buildを実行していますか?ターミナルで実行しても問題はなく、exit値が間違っていることがわかります。

その後、インターネットで検索したところ、「クイックフィックス」が見つかりました。これは、空の.cファイルを作成することです。これは、.cファイルがないとndkプロジェクトをビルド/実行できないためです。当然のことですが、.jniフォルダーには多くの.cファイルがあるため、私にとってはうまくいきません。

私がヨセミテのMacbook Proを使用していることをお伝えしておきますが、プロジェクト自体には問題はありません。

助けてくれてありがとう。

10
Denis Davydov

これは、Android Studioの既知の問題です。NDK対応プロジェクトのサポートが非常に制限されているために発生します。質問への回答:はい、Android Studioがndk-を実行するようになりました独自にビルドしますが、既存のAndroid.mkを無視して、オンザフライで生成します(そして、重要なNDK対応プロジェクトでは間違って実行します)実際には、これを修正する最善の方法は、Android Studioの限定的なNDKサポートと、gradleスクリプトからのndk-buildの呼び出し ここ 詳細と修正方法を説明しました。

5

正確な問題を確認するには、次の操作を行います。
1-​​= ndkパスが正しく設定されていることを確認してください。たとえば、私のプロジェクトではndk.dir=/usr/local/opt/Android-ndk-r13b in local.propertiesファイル
2- Androidアプリのアプリディレクトリに移動します
-次のコマンドを実行します:<ndk_build_path> -C <jni_path> NDK_OUT=<jniLibDir> all NDK_DEBUG=1の例:

/usr/local/opt/Android-ndk-r13b/ndk-build -C /MYAPP/app/src/main/jni -j 4 NDK_OUT=../jniLibs all NDK_DEBUG=1

次に、何が問題なのかを確認できます。

2
Iman Mirzadeh

簡単に言えば、sourceSets.main.jni.srcDirs = []からbuild.gradleファイルのAndroidブロック。これにより、gradleは別のパスでC++ファイルを探すようになります。

2
Hien Nguyen

compileDebugNdkを無効にすることができますが、jniフォルダーは= Android Studio。build.gradleで、次の句を追加します:

tasks.all { task ->
    if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
        task.enabled = false
    }
}
1
Alex Cohn

WindowsからMacにプロジェクトをインポートしているときに同じエラーが発生したため、上記のすべての解決策を試しましたが、機能しませんでした。最後に、このエラーの原因となっている「複数のターゲットパターン」があることに気づきました。

ソリューション:NDK内の「obj」フォルダーを削除して再構築します。

できました!

1
Bhanz

私は同じ問題に遭遇し、多くのことを試みましたが、うまくいきませんでした:

commandLine ndkBuildPath、 '-j8'、 '-C'、file( 'src/main')。absolutePath

これを試してください:

Src/main/jniに移動し、ターミナルを開いてコマンドを実行します:/home/.../Android/Sdk/ndk-bundle/ndk-build

より多くのログを作成して表示します。あなたはあなたのコードで何が間違っているのでしょう。

0
Thinh Dinh