ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

ET2009自分メモ:Android NDK/SDK解説(瀬戸 直喜 氏)

Embedded Technology 2009のスペシャルセッション
Android特別セミナー PartII:Android開発環境の解説及び開発事例紹介
の自分メモです。

Android NDK/SDK解説(瀬戸 直喜 氏)
日本Androidの会 四国支部 幹事・四国支部長/(株)ジャストシステムサービス 技術 受託開発グループ

NDK/SDKの概要や導入でした。初心者向けの内容となっています。
わかりやすかったです。ネイティブコードの利用はJNIのオーバーヘッドを考慮すべきとのこと。
ケースごとにオーバーヘッドを測定した具体的な事例があれば開発者大喜び。

NDK概要

  • Android Native Development Kit
  • ネイティブコードを作成する
  • ARMv5TEの命令セットをサポート

NDKの内容

 各種NativeAPIのヘッダ(libc, libm, etc)
/docs/ にドキュメントあり
 意外にドキュメントは充実している。
 HOWTO.TXT, SYSTEM-ISSUES.TXT, STABLE-APIS.TXT

libcドキュメント

 /docs/system/libc/ bionic Cに関する資料

注意事項

 NDKのみでネイティブアプリ作成できるわけではない。
 ネイティブコードを利用することで、必ずしもパフォーマンスアップするとは限らない
 JNIでオーバーヘッドが発生する

良い利用例

  • 信号処理
  • 画像処理、物理シミュレーション
  • 既存コードの再利用が要求されるもの
  • NDKではガベージコレクションが走らないので。

NDKの応用例

 OpenCV for Android NDK
コンピュータビジョンライブラリのアンドロイド向け移植

NDKの使い方

を用意

配置、ルートパス設定、host-setup.shの実行

Androidアプリケーションとネイティブコード

 アプリケーション
 ↓よびだし(部品として使う)=JNIを使う
 ネイティブコード

 アプリからは普通のメソッドのように見える

ネイティブコードのビルド

 /sources/任意のフォルダ
 ソースコード、ヘッダ、makeファイルを設置

ダイナミックリンクの作成 Android.mk

 スタティックライブラリとしてビルド
 作成したコードに依存する共有ライブラリのビルド

  • モジュール名
  • スタテリックライブラリ名
  • アプリから利用する共有ライブラリですよ、と記述する

Application.mkの記述

 アプリケーションが必要とするネイティブモジュール(ライブラリ)を定義する

最後にビルド

 make APP = (たとえばtwo-libs)

 System.loadLibrary("twolib-second");
 int z = add(x,y); //add関数はネイティブコードで記述されている

SDK概要(最近の動向)

 ユーザーインターフェイスフレームワークを開発
 SDKリリースは1〜5ヶ月、間隔が短くなる

SDK1.6とSDK2.0の新機能

  • 1.6: バッテリの消費量表示、音声読み上げ等
  • 2.0: HTML5、BT2.1、カレンダー、マルチタッチ入力等

SDKの開発環境について

 エクリプスかApache Ant

資料公開先

 http://www.android-group.jp