Android NDK (What is the NDK?) 和訳 1
仕事中に和訳したものであるので、公開していませんでしたが
半年ほど経ちますし、他の誰かに役立てればいいなと思って少し公開してみます。
私は英語が得意ではないので、意訳などをしている箇所も多いと思いますので原文も参照しながら
確認してくださることをお勧めします。
ちなみに、これはAndroid NDK, Revision 5 (December 2010)時点の文章です。
原文 : http://developer.android.com/intl/ja/sdk/ndk/overview.html
What is the NDK?
- NDKとは
AndroidNDKは、デベロッパーがネイティブコードを利用したくなったときに
Androidアプリケーションへネイティブコードを利用するコンポーネントを組み込むためのtoolsetです。
Androidアプリケーションは、Dalvik仮想マシンで動作しています。
このNDKを使えば、ネイティブコード用の言語(例えばCやC++)を使った処理をあなたの
アプリケーションへ組み込むことが出来ます。
また、既存のコードの再利用や、様々なケースで処理速度向上のために
有益なクラスをアプリケーションへ提供することが出来ます。
NDKは以下の機能を提供します。
・一組のツールとビルドファイルは、CまたはC++のソースを使ってネイティブコードライブラリを生成します。
・Androidデバイスで実行できるアプリケーションパッケージファイル(.apk)に対応するネイティブライブラリを埋め込む方法。
・一組のネイティブシステムヘッダとライブラリはAndroid1.5から始まる全てのバージョンでサポートされます。
Native Activityを使うアプリケーションは、Android2.3以降でのみ実行が可能です。
・ドキュメンテーション、サンプル、チュートリアル。
最新のNDKでサポートするARMの命令セットは以下になります。
・ARMv5TE (including Thumb-1 instructions)
・ARMv7-A (including Thumb-2 and VFPv3-D16 instructions, with optional support for NEON/VFPv3-D32 instructions)
※将来対応予定のもの
・x86 instructions (see CPU-ARCH-ABIS.HTML for more information)
ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and NEON instructions. You can target either or both of the instruction sets ARMv5TE is the default, but switching to ARMv7-A is as easy as adding a single line to the application's Application.mk file, without needing to change anything else in the file. You can also build for both architectures at the same time and have everything stored in the final .apk. Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.
ARMv5TEの機械語は、全てのARMに基づくAndroidデバイスで動作します。
ARMv7-Aは、互換CPUを持っているVerizon DroidまたはGoogle Nexus Oneでのみ動作します。
2つの命令セットの主な違いは、ARMv7-AがサポートするハードウェアFPU、Thumb-2とNEON命令です。
あなたはどちらもターゲットとすることができますが、どちらもARMv5TEがデフォルトになっています。
しかし、ARMv7-Aに変更したい場合は簡単です。 アプリケーションのApplication.mkへ一行追加するだけです。
それ以外に変更が必要なファイルはありません。
あなたは、同時に両方のアーキテクチャのために作ることも可能で、全てを最終的な.apkに保存しておくこともできます。
詳細な情報は、NDKパッケージでCPU-ARCH-ABIS.HTMLで提供されています。
The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES (3D graphics library), the JNI interface, and other libraries, as listed in the Development Tools section.
開発ツールセクションにリストされて、NDKは安定したヘッダをlibc(Cライブラリ)、libm(Mathライブラリ)、
OpenGL ES(3Dグラフィックスライブラリ)、JNIインタフェースとその他のライブラリへ提供します。
When to Develop in Native Code
- どんなときにネイティブコードを用いて開発するべきか
NDKは、大部分のアプリケーションでは必要ありません。
開発者として、あなたはその利点と欠点とのバランスを取る必要があります。
特に、ネイティブコードを使うことは自動的にパフォーマンスを向上させますが、
往々にしてアプリケーションの複雑化を招きます。
一般に、あなたがC/C++でプログラムを行うことを好むからではなく、それがあなたのアプリケーションにとって
必須であるならば、ネイティブコードを使わなければならないだけです。
NDKの良い使い方は、多くのメモリを割り当てない自己完結型のCPUに負担をかける処理に利用することです。
単に通常C言語で動作するメソッドをコーディングし直すだけではパフォーマンスを大きく増加するだけに終わります。
あなたがネイティブコードで開発しないといけないか調査するとき、あなたの要求する用途について考えて
AndroidフレームワークAPIで実現できないか、確認してください。
NDKは、しかし既存のC/C++コードで書かれた大きな言語資料を再利用するには効果的な方法です。
Androidフレームワークは、ネイティブコードを使うために2つの方法を提供します。
・Write your application using the Android framework and use JNI to access the APIs provided by the Android NDK. This technique allows you to take advantage of the convenience of the Android framework, but still allows you to write native code when necessary. You can install applications that use native code through the JNI on devices that run Android 1.5 or later. ・Write a native activity, which allows you to implement the lifecycle callbacks in native code. The Android SDK provides the NativeActivity class, which is a convenience class that notifies your native code of any activity lifecycle callbacks (onCreate(), onPause(), onResume(), etc). You can implement the callbacks in your native code to handle these events when they occur. Applications that use native activities must be run on Android 2.3 (API Level 9) or later. You cannot access features such as Services and Content Providers natively, so if you want to use them or any other framework API, you can still write JNI code to do so.
・Androidフレームワークを利用しているあなたのアプリケーションでAndroidNDKによって
提供されるAPIにアクセスするために、JNIを利用します。
この技術によってAndroidフレームワークを便利に利用することができ、
しかし必要なときにはネイティブコードで記述することが出来ます。
あなたは、Android1.5以降のデバイスでJNIを通してネイティブコードを走らせる
アプリケーションをインストールすることが出来ます。
・Native Activityで記述することで、あなたはライフサイクルのコールバックを
ネイティブコード内に組み込むことが出来ます。
Android SDKはNativeActivityクラスを提供します。これはあなたのネイティブコードにあらゆる
Activityのライフサイクルコールバック(onCreate()、onPause()、onResume()など)を通知する便利なクラスです。
各イベントが発生するとき、あなたはこれらのイベントを取り扱うために
ネイティブコードでコールバックを実行することが出来ます。
Native Activityを使うアプリケーションは、Andorid2.3(API Level9)以降で実行する必要があります。
ネイティブではServicesとContent Providersのような仕組みにアクセスすることが出来ないので、
あなたがこの仕組み、または他のフレームワークAPIを使用したいならば、
そうするためにJNIコードを書くことも出来ます。
Contents of the NDK
- NDKの内容
NDKはAPI、ドキュメンテーションとあなたがネイティブコードを記述するのを助けるサンプルアプリケーションを含みます。
Development tools
NDKはLinux、OS XとWindows(+Cygwin)プラットフォームでネイティブARMバイナリを生成することが
出来るcross-toolchains (コンパイラ、リンカ、その他)を含みます。
それはプラットフォームの後々のリリースにおいてサポートされると保証される安定した
システムヘッダセットをネイティブAPIに提供します
・libc (C library) headers ・libm (math library) headers ・JNI interface headers ・libz (Zlib compression) headers ・liblog (Android logging) header ・OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers ・libjnigraphics (Pixel buffer access) header (for Android 2.2 and above). ・A Minimal set of headers for C++ support ・OpenSL ES native audio libraries ・Android native application APIS
toolchain/pratform/CPU/Application Binary Interfaceの詳細を取り扱う必要も無く、
NDKはあなたのソースを能率的に動作させるビルドシステムを提供します。
あなたは、どのソースを編集するべきか、そして、どのAndroidアプリケーションで
NDKを利用するか述べるために、非常に短いビルドファイルを作成します
ビルドシステムはソースを編集して、あなたのアプリケーションプロジェクトに直接共有ライブラリを置きます。
重要 :
上記のライブラリを除いては、Androidプラットフォームのネイティブシステムライブラリは、
stableされておらず、将来のプラットフォームによっては変わるかもしれません。
あなたのアプリケーションは、このNDKで提供される安定したネイティブシステムライブラリを利用しなければなりません。
Android NDK (What is the NDK?) 和訳 2
前回の続き。
例によって私の和訳なので、原文も参照してくださると助かります。
不安なところとかは、引用してますが。
これはAndroid NDK, Revision 5 (December 2010)時点の文章に対する翻訳です。
原文 : http://developer.android.com/intl/ja/sdk/ndk/overview.html
Documentation
NDKパッケージには、あなたのAndroidアプリケーション用の共有ライブラリを作る方法と、
利用されるNDKの機能を記載するドキュメンテーションセットを含みます。
このリリースにおいて、ドキュメンテーションはダウンロード可能なNDKパッケージだけで提供されます。
あなたはドキュメンテーションを
ドキュメントにはこれらのファイルが含まれます :
・INSTALL.HTML
NDKのインストール方法及び、あなたのホストシステム用に設定する方法を記述します。
・OVERVIEW.HTML
NDKの持つ機能と、使用方法の概要を提供します。
・ANDROID-MK.HTML
あなたが編集したいネイティブソースを定義する「Android.mk」ファイルの使用方法を記述します。
・APPLICATION-MK.HTML
あなたのAndroidアプリケーションで必要なネイティブソースを記述する
「Application.mk」ファイルの使用方法を記述します。
・CPLUSPLUS-SUPPORT.HTML
AndroidNDKで提供されるC++サポートについて記述します。
・CPU-ARCH-ABIS.HTML
サポートされたCPUアーキテクチャの説明と、これらをターゲットとする方法について。
・CPU-FEATURES.HTML
あなたのアプリケーションコードを実行する際にターゲットデバイスの
CPU familyとオプションの特徴を判別するcpufeatures共有ライブラリの説明。
・CPU-ARM-NEON.HTML
ARM NEON/VFPv3-D32命令セットでビルドする方法の説明
・CHANGES.HTML
これまで全てのリリースで行われたNDKの変更点を全てリスト化したもの。
・DEVELOPMENT.HTML
NDKを修正した場合に、リリースパッケージを生成する方法を記述します。
・HOWTO.HTML
NDK開発と関連したcommon tasks(共通関数?) に関する情報。
・IMPORT-MODULE.HTML
モジュールを共有して、再利用する方法を記述します。
・LICENSES.HTML
Android NDKで使用している色々なオープンソースのライセンスに関する情報。
・NATIVE-ACTIVITY.HTML
Native Activityの使い方を記述します。
・NDK-BUILD.HTML
「ndk-build」スクリプトの使用方法を記述します。
・NDK-GDB.HTML
ネイティブコードでデバッガーを使用する方法を記述します。
・PREBUILTS.HTML
共有で静的な前もって作成されたライブラリが機能する方法に関する情報。
・STANDALONE-TOOLCHAIN.HTML
独立型コンパイラ(still in beta)としてAndroid NDK toolchainを使う方法を記述します。
・SYSTEM-ISSUES.HTML
あなたがNDKを使って開発しているならば、気付いているはずである
Androidシステムイメージの既知の問題。
・STABLE-APIS.HTML
NDKでヘッダによって提供される安定したAPIのリスト。
その上、あなたがNDKを使って開発しているならば、パッケージはあなたが気付いている
はずであるAndroidプラットフォームを備えているbionic C ライブラリに関する詳細な情報を含みます。
このドキュメンテーションは、
OVERVIEW.HTML
bionic Cライブラリの概要と、それが提供する機能について解説します。
Sample applications
NDKには、あなたのAndroidアプリケーションでネイティブコードを
使う方法を例示するサンプルアプリケーションを含みます :
hello-jni
共有ライブラリと、そのときに実装されるネイティブメソッドから文字列を読み込む
簡単なアプリケーションを、アプリケーションUIで表示します。
two-libs
動的に共有ライブラリを呼び出し、ライブラリから提供される
ネイティブメソッドを呼ぶ簡単なアプリケーション。
この場合、メソッドは共有ライブラリのそばでインポートされる静的ライブラリで実装されます。
san-angeles
ネイティブOpenGL ES APIによって3Dグラフィックスをレンダリングする簡単なアプリケーション。
その一方で、GLSurfaceViewオブジェクトでActivityのライフサイクルを管理します。
hello-gl2
OpenGL ES 2.0のvertexとfargment shadersを使って三角形をレンダリングする簡単なアプリケーション。
hello-neon
CPUでサポートされていれば、実行時にNEON intrinsicsを使ってCPUの性能を
チェックするためにcpufeaturesライブラリを使う方法を示す簡単なアプリケーション。
具体的には、アプリケーションはそれをサポートするデバイスのために
FIRフィルタループを使った2つの小さなベンチマーク、C言語バージョンとNEONに
最適化されたバージョンをインプリメントします。
bitmap-plasma
この簡単なアプリケーションでは、ネイティブコードで
Android Bitmap オブジェクトのピクセルバッファにアクセスし、
昔ながらの"plasma"効果を生成して使う方法を示します。
native-activity
Native Activityを作るためにネイティブアプリケーションと
結びついた静的ライブラリを使う方法を示す簡単なアプリケーション。
native-plasma
Native Activityにプラズマのbitmapを組み込んだバージョン。
それぞれのサンプルのために、NDKでは対応するCソースコードと
必要なAndroid.mk、Application.mkファイルを読み込みます。
これらはそれぞれ
また、対応するソースコードは
サンプルアプリ用の共有ライブラリを作成することが出来ます。
共有ライブラリは、「ARMv5TE機械語」の場合
「ARMv7機械語」の場合
次に、共有ライブラリを使うサンプルAndroidアプリケーションをビルドします :
・あなたがADTとElicpseを連携させた環境で開発しているならば、 「New Project」ウィザードから
「new Android project」を選択し、"Import from Existing Source" オプションから利用したいサンプルソースを
その後、AVDを設定して必要に応じてアプリケーションをエミュレーターで build/run してください。
Elicpseで新しいAndroidプロジェクトを作成する方法の詳細は、Elicpseの「Developing」を見てください。
・あなたがAntを使って開発しているならば、
サンプルプロジェクトからビルドファイルを作るために android tool を使ってください。
その後、AVDを設定して必要に応じてアプリケーションをエミュレーターで実行してください。
詳細は、開発に利用するIDEの「Developing」を見てください。