2017-05-09 5 views
2

私のシナリオはとても簡単です。私はexternalNativeBuildシステムを使ってCMakeでコンパイルしたネイティブライブラリを持っています。これはアプリケーションのビルドにはうまくいきますが、マシンローカル(つまりエミュレータ以外の)ユニットテスト中に同じライブラリをロードしたいと思います。Gradle NDKビルドを使用してホストマシン用にコンパイルするにはどうすればよいですか?

次のものを含む既存のGradle NDKセットアップを使用している場合、これを再利用してホストオペレーティングシステム用のライブラリ(たとえばmacOS)をコンパイルする方法はありますか?

defaultConfig { 
    ndk { 
     abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a' 
    } 

    externalNativeBuild { 
     cmake { 
      arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static' 
     } 
    } 
} 

externalNativeBuild { 
    cmake { 
     path 'CMakeLists.txt' 
    } 
} 

答えて

-1

あなたはしません。 NDKはAndroidのみをターゲットにしています。

+0

Androidを「ターゲット」しているかもしれませんが、私はマシンローカルバイナリを構築するためにバックを使用しています。ここでの質問は、同じことを達成するためにgradleツールチェーンを使う方法です。 – passy

+0

はい、しかし、Androidのgradleサポートは_only_ Android用です(少なくともC++に関しては、Javaについて実際にはわかりません)。あなたがgradleの他のシステム用にC++をビルドしたいのであれば、別のビルドファイルを多かれ少なかれ作成することになるでしょう:https://docs.gradle.org/current/userguide/native_software.html –

1

私はまた、正確にこのトピックに関するいくつかの研究を行いました。手作業のかなりの量がなければそれは不可能です

GradleのAadroidプラグインがCMakeまたはndk-buildを呼び出すことによってAndroidプロジェクト専用に提供しているものを除いて、これはGradleでサポートされていません。

最も簡単な方法は、ホストバイナリをビルドするための別のツールチェーンを使ってCMakeを呼び出すようです。あなたは、ホストツールチェーンを使ってCmakeを直接起動したり、カスタムタスクをGradleに追加したりして、それを実行できます。 C

ユニットテストあなたのCコードだけテストユニットにしたい場合は、cmakeのは、あなたの通常のライブラリとテスト、それを使用して実行可能ファイルをコンパイルすることができます。 Javaの

ユニットテスト

あなたはJNI経由でCコードを呼び出すJavaコードのレベルでテストを行いたい場合は、またのために適切な場所でCMakeの出力ライブラリを移動する必要がありますネイティブライブラリをロードしようとすると、JVMがそれを見つけることができます。

は人類

ために、この問題を解決IMOこのすべてのは、それがあるべきよりもはるかに困難です。それはアンドロイドのバイナリを実行しますJNI経由でCPUエミュレータを起動するJVMまたは

  • 上で動作しますので、それがさらに困難

    1. コンパイルしようとしているになるだろう 他の選択肢は、/あなたのCコードを解釈

    誰かが2番目の提案を実装するのを狙うなら、Androidのエコシステムにとっては本当に面白いでしょう。

  • 関連する問題