2016-09-20 68 views
30

アンドロイドスタジオプロジェクトのCMakeNDKの実際の違いは何ですか?私は既にGoogleのドキュメントを見に行きましたが、そのコンセプトはまだ明確ではありません。アンドロイドスタジオプロジェクトのCMakeとNDKビルドの違い

Androidのネイティブ開発キット(NDK):あなた は、AndroidとCおよびC++コードを使用することができます、あなたはネイティブの活動を管理し、アクセスすることを可能にするプラットフォームライブラリ を提供ツールセットのGoogleドキュメントあたりとして物理デバイス センサーやタッチ入力などのコンポーネント。

CMake:あなたのネイティブライブラリ をビルドするためにGradleと連携する外部ビルドツール。 のみを計画してndk-buildを使用する場合、このコンポーネントは必要ありません。

私たちが何を使用する必要がある場合、誰かが例を使ってより良い説明をすることができますか?

+0

CMake _togetherをNDKと併用することはできますが、NDKの代わりに使用することはできません。 – Michael

+4

CMakeはNDKを使ってネイティブコードを共有ライブラリに作り、アプリケーションのJavaコード(または純粋なアンドロイドのネイティブコードプロジェクト)で使用する新しい方法です。 NDKパッケージにバンドルされている他のツールを使用するビルドツールです。 NDKとCMakeは別のドメインにありますが、それを比較するのは公正ではありません。ダウンロードしたNDKパッケージの中にNDKを使用してネイティブソースコードを作成する別のツールがあります.ndk-build:ndk-buildツールとcmakeは同等です:彼らは同じ問題を解決します。 – Gerry

+0

私は未来を見ることができます:ndk-buildは廃止され、CMakeはルールを適用します。 :-) –

答えて

28

ndk-buildは、NDKに組み込まれているビルドシステムです。それはAndroid.mkファイルを使用します。 NDK自体は、Android用のC/C++コードを構築するために必要なコンパイラとライブラリのコレクションです。 ndk-buildとcmakeはどちらもNDKを使用します。

android studioプロジェクトのCMakeとNDKビルドの実際の違いは何ですか?

ビルドについては、異なる言語(カスタムmakefileとcmake)を使用します。理想的には、同じように記述されたビルドの出力に違いはありませんが、バグはありません。

私たちが何を使用する必要がある場合、誰かが例を挙げて説明していただけますか?

一般に、どちらのシステムを使用するかは自由です。

CMakeの主な利点は、すべてのターゲット(Android、Linux、Windows、iOSなど)に1組のビルドファイルを使用できることです。あなたのプロジェクトがクロスプラットフォームの場合、CMakeはそれをあなたにとって最も簡単にするはずです。これはAndroid開発者の外でも広く知られているため、Androidを初めて使う人には理解を深める機会が増えます。

ビルドシステム(レガシープロジェクト)用にすでにAndroid.mkファイルを使用しているプロジェクトをビルドする場合は、ndk-buildを優先する必要があります。

新しいコードを書く場合は、快適なものを使用してください。もしあなたがどちらかに慣れていないのであれば、将来的にクロスプラットフォームの作業を容易にするので、おそらくcmakeが良い選択でしょう。

+0

NDKとcmakeの両方のツールチェーンを初めて使用した場合、プロジェクトが複雑な場合はNDKが良い選択になると思います。私は、ドキュメント、ガイド、およびcmake toolchainに関する全般的な知識がAndroidで使用されている場合はほとんどないことを発見しました。 Crashlyticsなどのようなものは、古いNDKツールなどのガイドしか持っていません。 私は複雑な製品のためにcmakeのツールチェーンに行って、Gradleでうまく構築するのは面倒です。 –

+1

それは良い点です。対照的に、私たちが作成する新しいサンプルのほとんどはCMakeのみにあります。 –

+0

私は新しいAS 2.3.3を使用していますが、CMAKEでネイティブライブラリが正しくビルドされていないことがわかりました。NDKビルドシステムを使用し、cmakeを使用しないようにASを強制できますか? 2.3.3 AS – Raulp

0

明確な回答はこちらhttps://android-developers.blogspot.ru/2016/11/make-and-ndk-build-support-in-android.htmlです。総括 - 順に選択します。より安定性のために制限されたC++

  • cmakeのは、NDKビルド新しいプロジェクト

  • であるとのプロジェクトのための

    • 使用Gradleの実験的なプラグインは、従来のプロジェクトのためである、にしてみてください私は別のBを識別するためのいくつかの説明を与えることを試みた

  • +0

    「ndk-buildは従来のプロジェクト用です。cmakeまたは新しいプラグインに移行してください」 。それはそのブログ記事のどこにも述べられていません。 ndk-buildをうまく使用しているなら、切り替える理由はありません。 –

    +1

    また、それらのオプションを指定した順序は、私がそれをどのように読むかではありません。私がそれを読んでいるところでは、グラケル実験に比べてcmakeが好ましい選択肢です。 –

    5

    cmakeのか、新しいプラグインに移行etween CMakeのとNDK-ビルドおよびセットアップ:

    いくつかの初期の注意事項:

    • ネイティブライブラリのためのAndroid Studioのデフォルトのビルドツールはcmakeのです。
    • Android Studioは、ネイティブコードをコンパイルするためにビルドツールキットを使用する多数の既存プロジェクトがあるため、ndk-buildもサポートしています。
    • 新しいネイティブライブラリを作成する場合は、CMakeを使用する必要があります。
    • 多数のレガシープロジェクトがあるため、ndk-buildのサポートが含まれています。

    CMakeの:あなたのネイティブライブラリを構築するためのGradleと一緒に働く

    外部ビルド・ツール。 ndk-buildだけを使用する予定がある場合は、このコンポーネントは必要ありません。 CMakeはあなたのネイティブライブラリを構築する方法を知るためにビルドスクリプトを必要とします。新しいプロジェクトの場合、Android StudioはCMakeビルドスクリプトCMakeLists.txtを作成し、モジュールのルートディレクトリに配置します。

    ネイティブソースにまだCMakeビルドスクリプトがない場合は、自分で作成し、適切なCMakeコマンドを組み込む必要があります。 CMakeビルドスクリプトは、CMakeLists.txtの名前を付けるプレーンテキストファイルです。

    # Sets the minimum version of CMake required to build your native library. 
    # This ensures that a certain set of CMake features is available to 
    # your build. 
    
    cmake_minimum_required(VERSION 3.4.1) 
    
    # Specifies a library name, specifies whether the library is STATIC or 
    # SHARED, and provides relative paths to the source code. You can 
    # define multiple libraries by adding multiple add.library() commands, 
    # and CMake builds them for you. When you build your app, Gradle 
    # automatically packages shared libraries with your APK. 
    
    add_library(# Specifies the name of the library. 
          native-lib 
    
          # Sets the library as a shared library. 
          SHARED 
    
          # Provides a relative path to your source file(s). 
          src/main/cpp/file_name.cpp) 
    

    NDK-ビルド:

    Androidのメーカーはまた、彼らのネイティブコードをコンパイルするビルドツールキットを使用している既存/レガシー多数のプロジェクトのためにNDKビルドをサポートしています。自分で作成し、ndk-build用の適切なAndroid.mkファイルを組み込み、次にCMakeと同じndk-build用のgradleファイルを設定する必要があります。両方CMakeのとNDKビルド用

    設定のGradle:

    手動でネイティブライブラリにリンクするのGradleを設定するには、あなたはモジュールレベルbuild.gradleファイルにexternalNativeBuildブロックを追加し、いずれかでそれを設定する必要がありますcmakeのかndkBuildブロック:

    android { 
         ... 
         defaultConfig { 
        ... 
        // This block is different from the one you use to link Gradle 
        // to your CMake or ndk-build script. 
        externalNativeBuild { 
    
         // For ndk-build, instead use the ndkBuild block. 
         cmake/ndkBuild { 
    
         // Passes optional arguments to CMake. 
         arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang" 
    
         // Sets optional flags for the C compiler. 
         cFlags "-fexceptions", "-frtti" 
    
         // Sets a flag to enable format macro constants for the C++ compiler. 
         cppFlags "-D__STDC_FORMAT_MACROS" 
         } 
        } 
        ndk { 
         // Specifies the ABI configurations of your native 
         // libraries Gradle should build and package with your APK. 
         abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 
            'arm64-v8a' 
         } 
    
        } 
    
         buildTypes {...} 
    
         // Encapsulates your external native build configurations. 
         externalNativeBuild { 
    
         // Encapsulates your CMake build configurations. 
         cmake { 
    
          // Provides a relative path to your CMake build script. 
          path "src/main/cpp/CMakeLists.txt" 
         } 
    
         // Encapsulates your ndkBuild build configurations. 
         ndkBuild { 
    
          // Provides a relative path to your ndkBuild Android.mk file. 
          path "src/main/cpp/Android.mk" 
         } 
         } 
        } 
    

    あなたは、既存のNDKビルドプロジェクトへのGradleをリンクする代わりに、cmakeのブロックのndkBuildブロックを使用して、あなたのAndroid.mk Fへの相対パスを提供する場合ile。

    +0

    これはかなり公式の文書逐語です。余分な情報は提供されず、OPの質問には答えられませんでした。 – Vaiden

    2

    Android。mkはNDKビルドを含むファイルです。Cmakeビルドアプリケーションを使用する場合、CmakeList.txtの代わりにAndroid.mkは不要です。

    関連する問題