LoginSignup
8
8

More than 5 years have passed since last update.

Android Studio の NDK 対応を追っかける

Posted at

概要

Android Studio の NDK 対応が、従来の Android.mk によるものを十分に置き換えることができるようになるまでの過程を追っかけます。

今後の対応の予想

2015/12/18 時点では、まだ正式な NDK 対応ではなく、理想的な NDK 開発はできません。そもそも Gradle が C/C++ をサポートしたのが最近のことですし、従来の Android.mk スタイルの開発の方が無難と言えそうです。

しかし、以下を見る限り Gradle は Android NDK だけではなく Clang、GCC、Xcode、Visual Studio のツールチェインにも対応し、C/C++ だけでなくアセンブリ、Objective-C にも対応していくように思えます(もしくは Gradle 2.9 で既に対応している?)。

プラットフォームも Android だけでなく Linux、OS X、iOS、Windows にも対応していくように思えます。Eclipse や他の IDE から移行さえちゃえという本気度が伺えますね。

マルチプラットフォーム、マルチツールチェインに対応したネイティブのビルドツールといえば、最近だと Swift のビルドを支えている CMake、Google 製プロダクトのビルドを支えている GYP、GN と Ninja の組み合わせがありましたが、Gradle がそこまでやってくれるのであれば徐々に移行を考えていきたいところですね。

時間はかかりそうですが、非常に楽しみです!

更新履歴

Pluging 0.4.0

複数の NDK プロジェクトの対応と、ただのネイティブライブラリを作れるようになっています。まだ完全ではありません。Gradle でコンパイルすることはできますが、編集はデバッグにはまだサポートされていません。

ただのネイティブライブラリ

gradle-experimental:0.4.0 では、Android アプリケーション・ライブラリなしのただのネイティブライブラリを作れるようになっています。DSL は Android アプリケーション・ライブラリに似ています。以下のサンプルは src/main/jni のソースをビルドして libhello.so を作ります。

build.gradle
apply plugin: "com.android.model.native"

model {
    android {
        compileSdkVersion = 21
    }
    android.ndk {
        moduleName = "hello"
    }
}

ただし、ソースを編集したら手動でビルドしないとアプリケーションに再リンクされません。

NDK の依存関係

以下のようなネイティブライブラリプロジェクトがあったとすると・・・

lib/build.gradle
apply plugin: "com.android.model.native"

model {
    android {
        compileSdkVersion = 21
    }
    android.ndk {
        moduleName = "hello"
    }
}

アプリケーションでは以下のようにして参照することができます。

app/build.gradle
apply plugin: "com.android.model.application"

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.0"
    }
    android.sources {
        main {
            jni {
                dependencies {
                    project ":lib1"
                }
            }
        }
    }
}

詳細は省きますが、Gradle の旨味のひとつである flavor にも対応しているようです。

Pluging 0.6.0

ものはあるようですがドキュメントがまだありません。

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8