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

概 要

Androidアプリ開発環境Android SDKのサブセット、Android NDKの開設方法からハードウェアまであますところなく解説したガイドブックです。AndroidアプリケーションはJavaで開発するのが一般的ですが、ゲーム開発などハードウェアの性能を最大限に引き出したいときには、Android NDKを使ってアプリの一部もしくは全てをC/C++言語で作成します。本書は、Android NDKのメリット/デメリット、Android NDKのセットアップ、JavaとC/C++のコードを相互に呼び出すためのフレームワークJNIの使い方、グラフィックやサウンドなどの各種ライブラリの使い方、CPUアーキテクチャなどのハードウェア寄りの知識まで解説します。最新のNDKr8対応。

著者 出村成和
価格 本体2600円(税別)
ISBN 978-4-7980-3630-4
発売日 2012/12/20
判型 B5変
色数 1色
ページ数 392
CD/DVD
対象読者 中級
シリーズ
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter 1 Android NDKとは

01.01 本書について

01.02 開発ライブラリについて

01.02.01 Android SDKとは

01.02.02 Android NDKとは

01.03 実行ファイルが生成されるまで

01.04 Android NDK付属のライブラリ

01.04.01 JNI

01.04.02 Linuxシステムコール

01.04.03 OpenGL|ES

01.04.04 AndroidBitmap

01.04.05 NativeActivity

01.04.06 OpenSL|ES

01.04.07 デバイス入力

01.04.08 ファイル読み込み

01.04.09 マルチメディア

01.05 Androidの内部構造(レイヤー)

01.05.01 Linuxカーネル

01.05.02 HAL

01.05.03 LibrariesとAndroid Runtime

01.05.04 Application Framework

01.05.05 アプリケーション

01.06 アプリケーション実行環境について

01.07 Android NDKのメリット/デメリット

01.07.01 メリット

01.07.02 デメリット

01.07.03 NDKのファイル構成

01.08 セットアップ

01.08.01 ファイルのダウンロード

01.08.02 Mac OS X、Linuxの場合

01.08.03 Windowsの場合

01.09 プロジェクトを作成する

01.09.01 Androidアプリのプロジェクトを作成

01.09.02 C/C++で置き換える

01.09.03 アプリケーションをビルド、実行する

01.10 まとめ

Chapter 2 JNI(Java Native Interface)

02.01 JNIとは

02.01.01 JNIの特徴

02.02 メモリ管理

02.03 JNIの規約

02.03.01 型名

02.03.02 メソッド定義

02.03.03 配列

02.03.04 シグネチャ

02.03.05 フィールド変数

02.03.06 文字列

02.03.07 Javaのクラス、メソッド

02.03.08 例外

02.03.09 リトルエンディアンとビッグエンディアン

02.04 JNIオブジェクト参照

02.04.01 ローカル参照

02.04.02 グローバル参照

02.04.03 ローカル参照フレーム

02.05 まとまったデータを扱う

02.06 CheckJNI

02.06.01 有効化する

02.06.02 サンプルコード

02.07 ログ出力

02.08 ネイティブメソッドからJavaのコードを呼ぶ

02.09 JNIHelpを利用する

02.10 まとめ

Chapter 3 NativeActivity

03.01 NativeActivityとは

03.02 NativeActivityとゲーム

03.02.01 GCの依存度が減らせる

03.02.02 Javaで書くコードが減る

03.03 イベント

03.04 NativeActivityの制約

03.05 ノンブロック処理

03.05.01 データ受信完了をチェックし続ける(ブロック処理)

03.05.02 コールバック関数を利用する(ノンブロック処理)

03.05.03 ANR(Android Not Responding)

03.06 NativeActivityGlue

03.06.01 android_main関数について

03.06.02 初期化処理

03.06.03 ループ処理

03.06.04 AndroidManifest.xmlの定義

03.06.05 Android.mkファイル

03.06.06 サンプルコード

03.07 まとめ

Chapter 4 OpenGL|ES

04.01 OpenGLとOpenGL|ES

04.01.01 OpenGL|ES 1.1と2.0

04.02 描画対象

04.02.01 Viewクラス

04.02.02 SurfaceViewクラス

04.02.03 NativeWindow

04.03 AndroidにおけるOpenGL|ES

04.03.01 EGL

04.03.02 注意点

04.04 サンプルコード(OpenGL|ES 1.1)

04.04.01 処理の流れ

04.04.02 EGLを利用した描画領域の初期化

04.04.03 立方体の描画

04.04.04 終了処理

04.04.05 Android.mkファイル

04.04.06 サンプル全文

04.05 サンプルコード(OpenGL|ES 2.0)

04.05.01 Vector, Matrixクラスの導入

04.05.02 EGLによる初期化

04.05.03 シェーディング言語

04.05.04 シェーディング言語の初期化

04.05.05 シェーディング言語による演算

04.05.06 立方体の描画

04.05.07 AndroidManifest.xml

04.05.08 Android.mkファイル

04.05.09 プログラム全文

04.06 AndroidBitmap

04.06.01 処理の流れ

04.06.02 画像フォーマット

04.06.03 Android.mkファイル

04.06.04 サンプルコード

04.07 まとめ

Chapter 5 サウンド

05.01 OpenSL|ESについて

05.01.01 OpenSL|ES for Android

05.01.02 処理の流れ

05.01.03 制御できる音の種類

05.02 サウンドフォーマット

05.03 再生と録音

05.03.01 再生

05.03.02 録音

05.04 データソース

05.04.01 データソースとデータ形式

05.05 Android extensions

05.05.01 Android Configuration

05.05.02 Androidシンプルバッファキューとインターフェイス

05.05.03 Androidファイルディスクリプタデータロケータ

05.06 エフェクト

05.06.01 制約

05.06.02 シーンごとのリバーブ

05.07 サンプルコード

05.07.01 オブジェクトとインターフェイス

05.07.02 初期化

05.07.03 バッファキューの設定

05.07.04 サウンドの再生

05.07.05 MP3データの再生準備①(Assetsフォルダ内のファイル)

05.07.06 MP3データの再生

05.07.07 MP3データの再生準備②(URIで指定したファイル)

05.07.08 録音の準備

05.07.09 録音

05.07.10 エフェクト(環境リバーブ)の初期化

05.07.11 エフェクト(環境リバーブ)をかける

05.07.12 終了処理

05.08 設定

05.08.01 AndroidManifest.xml

05.08.02 Android.mk

05.09 制約について

05.09.01 Objectの制約

05.09.02 録音の制約

05.09.03 シーク(再生位置の移動)についての制約

05.09.04 データ構造についての制約

05.09.05 プラットフォームによる設定

05.10 まとめ

Chapter 6 マルチメディア

06.01 OpenMAX AL

06.02 OpenMAX AL for Android

06.02.01 特徴

06.02.02 再生可能なデータ

06.02.03 描画先

06.03 サンプルコード

06.03.01 Javaでの処理

06.03.02 Cでの処理

06.04 Android.mkファイル

06.05 まとめ

Chapter 7 入出力(センサー、キーボード、ファイル)

07.01 センサーライブラリ

07.02 タッチイベント

07.02.01 座標系

07.02.02 サンプルコード

07.03 キー入力

07.03.01 キーボードとキーコード

07.03.02 サンプルコード

07.04 センサー

07.04.01 加速度センサー

07.04.02 磁気センサー

07.04.03 ジャイロスコープ

07.04.04 光センサー

07.04.05 近接センサー

07.04.06 ASensorEvent構造体

07.04.07 サンプルコード

07.05 Configuration

07.05.01 サンプルコード

07.06 Assets

07.06.01 Assetsとリソース

07.06.02 サンプルコード

Chapter 8 ツール(コンパイラ、デバッガ)

08.01 toolchain

08.01.01 利用するtoolchainを指定する

08.02 C++の機能

08.02.01 例外機構

08.02.02 RTTI(実行時型情報)

08.03 C++ランタイムライブラリ

08.03.01 ライブラリの指定

08.03.02 ライブラリのビルド

08.03.03 ランタイムライブラリのリンク

08.04 gccの拡張機能

08.04.01 範囲設定

08.04.02 長さゼロの配列

08.04.03 インライン関数

08.04.04 構造体

08.05 外部モジュールの参照

08.05.01 外部モジュールの作成方法

08.05.02 サンプル

08.05.03 外部モジュールの参照設定

08.05.04 NDK_MODULE_PATHの設定

08.05.05 モジュールがあるフォルダを指定する

08.05.06 モジュールを指定する

08.05.07 サンプル

08.06 定数

08.07 ndk-build

08.08 ndk-stack

08.08.01 使い方

08.09 CCache

08.09.01 設定方法

08.10 独立したtoolchain

08.10.01 toolchainの構成を決める

08.10.02 toolchainの作成方法

08.10.03 推奨される設定

08.11 ndk-gdb

08.11.01 デバッグ用ビルド

08.11.02 デバッグ手順

08.11.03 gdbの使い方

08.12 Eclipseからデバッグする

08.12.01 ビルド方法

08.12.02 デバッグ方法

08.13 まとめ

Chapter 9 アーキテクチャ

09.01 サポートしているアーキテクチャ

09.02 ARMプロセッサ

09.03 Cortex-Aシリーズ

09.03.01 特徴

09.03.02 ARMv5TE

09.03.03 ARMv7-a

09.04 アーキテクチャの構成

09.04.01 命令について

09.04.02 パイプライン

09.04.03 動的分岐予測

09.04.04 実行タイミング

09.05 メモリ

09.06 L1キャッシュとL2キャッシュ

09.06.01 キャッシュのしくみ

09.07 ABI

09.07.01 関数の引数

09.07.02 armeabi

09.07.03 armeabi-v7a

09.07.04 出力する命令セットを指定する

09.07.05 CPUアーキテクチャと共有モジュールの関係

09.08 CPUアーキテクチャ、機能を判別する

09.08.01 CPUアーキテクチャを判別する

09.08.02 利用できる命令を判別する

09.08.03 Android.mkファイル

09.09 まとめ

Chapter 10 最適化

10.01 最適化の手順

10.01.01 デバッグを完了させる

10.01.02 問題箇所を特定する

10.01.03 アルゴリズムの再検討

10.01.04 最適化を行う

10.02 問題箇所の特定

10.02.01 実行時間の計測

10.02.02 Linuxのシステム関数を利用

10.02.03 TraceViewを利用

10.02.04 TraceViewで計測する

10.03 最適化の手法

10.03.01 実行バイナリの実行効率向上

10.03.02 無駄なメモリアクセスの排除

10.03.03 キャッシュヒット率の向上

10.04 実行バイナリの実行効率の向上

10.04.01 CPUの命令をフル活用する

10.04.02 パイプラインを命令で埋める

10.04.03 分岐予測をコードに含める

10.05 キャッシュヒット率の向上

10.05.01 インストラクションキャッシュを有効活用する

10.05.02 データキャッシュを有効活用する

10.06 gccによる最適化

10.06.01 restrictとは

10.06.02 サンプルコード

10.07 グラフィックスの最適化

10.07.01 グラフィックスの最適化

10.08 小数演算

10.08.01 浮動小数点演算

10.08.02 固定小数点演算

10.08.03 サンプルコード

10.09 まとめ

Chapter 11 NEON

11.01 ARM命令とNEON命令

11.01.01 ARM命令による演算

11.01.02 NEON命令による演算

11.02 NEON命令の詳細

11.02.01 レジスタについて

11.02.02 NEON命令の内訳

11.02.03 サチュレート

11.02.04 NEON命令が利用可能かチェック

11.02.05 ARM命令、NEON命令の有効化

11.03 NEON命令を利用する

11.03.01 インラインアセンブラを利用する

11.03.02 NEON命令を使った行列演算

11.04 ベクトル化

11.04.01 ベクトル化されやすいコード

11.04.02 コンパイラオプション

11.04.03 サンプルコード

11.05 まとめ

Chapter 12 OSSライブラリを利用する

12.01 開発環境設定

12.02 libpng

12.02.01 libpngをビルド

12.02.02 Androidアプリに組み込む

12.02.03 PNG画像をテクスチャに変換

12.02.04 立方体の表示

12.02.05 ビルド、実行

12.03 Lua

12.03.01 Luaのダウンロード

12.03.02 toolchainでビルド準備

12.03.03 ビルド

12.03.04 Androidアプリのプロジェクトを作成する

12.03.05 Javaでの処理

12.03.06 Cでの処理

12.04 まとめ

Chapter 13 リファレンス

13.01 ndk-buildコマンド

13.01.01 オプション

13.01.02 要求する環境

13.02 Android.mkファイル

13.02.01 予約語

13.02.02 機能

13.02.03 関数マクロ

13.02.04 モジュールに関する記述

13.03 Application.mkファイル

PR

秀和システム