がぶちゃんの日記

札幌からフルリモートCTO

初のAndroid NDK専用本「Android NDK ネイティブプログラミング」が出ますよ!

レビューに参加したので著者の出村さん @さんから献本頂きました。ありがとうございます。
表紙が超かっこいい!

内容がNDKなだけにある程度の知識がある前提で書きます。

Android NDKって?

AndroidアプリはJavaで開発することをご存じの方は多いと思いますが、Android NDKを使うとAndroidアプリの一部もしくは全てをC/C++で開発することができます。
一部の場合は、JNIを利用してJavaC/C++の両方で開発します。
そして、Android 2.3からは、Androidアプリの全てをC/C++で開発できるNativeActivityがサポートされました。
このNativeActivityについても1章まるごと解説されています。すごい。

Android NDKのメリット

  • パフォーマンス向上(高速な処理が必要になる場合など)
  • C/C++で開発された過去の資産の再利用

2つ目のメリットは、過去だけではなくiOSアプリからの移植や並行開発時にも大きなメリットになります。

実例

某社の某iOS向けゲームも処理のほとんど(iOSに依存するObj-Cが必要になるギリギリまでの部分を)をC/C++で開発し、その後、AndroidにNDKを使って移植されたそうです。(勉強会で公表してるから大丈夫だよね!)
この時、工数削減はもちろんですが、一番のメリットはiOSでかなりのバグを叩いて品質が高くなったライブラリをAndroidに移植したことで、Androidアプリ開発時にライブラリ側のバグがほとんどなかった点です。

また、もともとC/C++プログラマであれば、このようにほとんどをC/C++ライブラリで開発するという作戦にすることで、JavaAndroidの学習コストを最小限にしてAndroidアプリが開発できますね。

さらに、Android 2.3以降を対象とできるプロジェクトであれば、繰り返しになりますが、はじめに挙げたNativeActivityを使ってC/C++のみでAndroidアプリが開発できます。

Android NDKのデメリット

  • ネイティブコードがCPUに依存する
    • Androidは、ARM, x86(Intel), MIPS, SHなど様々なアーキテクチャのCPUで動作する
    • ネイティブコードなので、それぞれの実行ファイルを用意する必要がある
    • 現状の主流はARMなのでしばらくは問題になりませんが、念のため。
  • デバッグが難しい

良い点があれば悪い点もあるということで。。。しかし、このあたりも本書でより詳しく解説されています。

NDKの説明が終わったところで本書の内容へ

目次

■Chapter 01 Android NDKとは
■Chapter 02 JavaAndroid NDK
■Chapter 03 NativeActivity
■Chapter 04 OpenGL|ES
■Chapter 05 サウンド
■Chapter 06 入出力(センサー、キーボード、ファイル)
■Chapter 07 ツールコンパイラ、デバッガ)
■Chapter 08 アーキテクチャ
■Chapter 09 最適化
■Chapter 10 NEON
Chapter 11 リファレンス

ゲーム開発に最適

本書の「はじめに」でも触れられていますが、NDKは現状、ゲーム開発に最も適しています。グラフィックとしてOpenGL ES、サウンドとしてOpenSL ESが非常に丁寧に解説されています。

さらに、「Chapter 08 アーキテクチャ」では、

  • ARMプロセッサ
  • Cortex-A8
  • アーキテクチャの構成(CPUの命令はどのように実行されているか)
  • メモリ
  • L1キャッシュとL2キャッシュ
  • ABI
  • cpu-features

などが、非常に詳しく解説されています。これはなぜかというと...次の章「Chapter 09 最適化」で、8章の知識をベースに、企業が本格的に実務で行うような最適化手法を非常に詳しく解説するためとのこと。

「Chapter 10 NEON」にいたってはもう...

全体的な感想

  • 詳しい
  • 丁寧
  • 深い
  • 濃い

これにつきると思います。Android NDKをがっつり勉強したい方にはもってこいです。

Titanium, CoronaなどiOS/Androidクロスプラットフォームな開発ツールが登場している昨今ですが、これらは商用にはまだまだといった感じで、個人デベロッパーやピンポイントで効果を発揮するものだと捉えています。クロスプラットフォームで楽な分、パフォーマンスはそれぞれObj-C/Javaよりは劣ります。

じゃあ、Obj-C/Javaで開発するか、ということになるのですが、さらにパフォーマンスが求められたら?ハイスペック/ハイクオリティなゲームを開発するには?

ということで、

http://twitter.com/#!/checkela/status/94227351268888577

アンドロイドの「真の力」を解き放て!

Amazonでは予約できるようです。発刊されました。

Android NDKネイティブプログラミング

Android NDKネイティブプログラミング

秀和システムさんのサイトによると2011/7/27が発売日になっています。
Android NDK ネイティブプログラミング|書籍情報|秀和システム

補足:NDKのバージョンについて

本書はNDKバージョン r5c を対象に書かれたものですが、発刊の直前にNDK r6 がリリースされました。
しかし、r6 の変更点をざっくり書くと大きく以下の3点なので、特に問題ありません。

  • x86のサポート
  • logcatでnative codeのstack traceが見られるようになった
  • 4.4.0がなくなったから4.4.3使う

詳しくはこちら:Android NDK | Android Developers

追記

著者の出村さんのブログ:http://blog.cnu.jp/2011/07/26/android-ndk-book/