Archive

Archive for 7月, 2010

Android NDKって?

7月 22nd, 2010

Androidアプリでネイティブコードを利用する際に使用するAndroid NDKについて、

http://developer.android.com/sdk/ndk/index.html

の内容を意訳してみました↓

Android NDKはAndroid アプリでネイティブコードで作られたコンポーネントを組み込むためのツールセットです。AndroidはDalvikVM上で動作します。NDKは、アプリをCやC++で記載されたネイティブコードで実装することができます。このため、既存のライブラリを再利用することができ、開発効率の向上にも貢献します。

NDKが提供するものは

  • CやC++で記述されたソースコードから、ネイティブコードライブラリを生成するためのビルドファイルとツールセット。
  • Androidデバイスにデプロイ可能なAPKファイルに固有のライブラリを埋め込む方法。
  • Android1.5以降の全てのプラットフォームでサポートされるネイティブのシステムヘッダとライブラリセット。
  • ドキュメント、サンプル、チュートリアル。

現状バージョンの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.TXT for more information)

がサポートされます。

ARMv5TEのマシンコードであれば、ARMベースのAndroidデバイス全般で動作するでしょう。ARMv7-Aの場合は、Verizon DroidやGoogle Nexus Oneなどの互換CPUをもつデバイスで動作するでしょう。
ARMv5TEと ARMv7-Aの大きな違いは、ARMv7-AがハードウェアFPU(浮動小数点処理装置)、Thumb-2(ARMの拡張命令セット)、およびNEON(メディアおよびデジタル信号の処理に向いた64ビットと128ビットの命令セット)をサポートします。
ARMv5TEと ARMv7-Aの両方でもどちらかでも利用することができ、ARMv5TEをデフォルトとして、ARMv7-Aに切り替えるのは簡単で、Application.mkファイルに1行追加するだけです。
また、ARMv5TEと ARMv7-Aの両方のアーキテクチャ用にビルドすることができ、apkファイルに全て格納できます。詳細については、NDKパッケージのドキュメントに含まれるCPU-ARCH-ABIS.TXTを参照。

NDKは、libc(Cライブラリ)、libm(Mathライブラリ)、OpenGL ES(3Dグラフィックスライブラリ)、JNIインタフェース、および他のライブラリ用に安定したヘッダを提供します。

NDKはほとんどのアプリケーションには効果が無いでしょう。開発者としては、利益と欠点のバランスを取る必要があるでしょう。ネイティブコードを使用することは、著しい自動的なパフォーマンス向上がもたらされることは無く、アプリケーションは複雑化します。
NDKの効果的な使用例としては、多くのメモリを割り当てずにCPU負荷の高い操作 する場合や信号処理、物理学のシミュレーションなどです。単純に既存のメソッドをCで最コーディングしただけでは、大きなパフォーマンス改善には至りません。しかし、既存のC/C++コードを再利用する分には、効果的な方法と言えます。

NDKはネイティブコードだけのアプリケーションを開発するためのものではありません。AndroidのプライマリランタイムはDalvikVMのままです。

azuchi Android

RestletのEdition for Androidを使ってみた

7月 2nd, 2010

AndroidでRESTで通信するモジュールがあったので、試してみました。Jsonのパーサもあるみたいです。

・Restlet Edition for Androidをダウンロード
 Restletのダウンロードページから、2.0の「Available editions」→「Edition for Android」の「Zip archive」からダウンロードします。

・使用するjarを取り込む
 ダウンロードしたzipを解凍し、「/lib/」ディレクトリ内にある、「org.restlet.jar」と「org.restlet.ext.json.jar」をAndroidプロジェクトのassets内に入れ、プロジェクトを右クリック→プロパティ→ビルドパス→ライブラリ→jarの追加から、上記の2つのjarを取り込む。

・GET通信

import org.restlet.Client;
import org.restlet.Request;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;

(中略)

Client client = new Client(Protocol.HTTP);
String url = "http://www.example.com/";
Request request = new Request(Method.GET, url);
try {
	String jsonStr = client.handle(request).getEntity().getText();
	JsonRepresentation json = new JsonRepresentation(jsonStr);

} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

・POST通信

import org.restlet.Client;
import org.restlet.Request;
import org.restlet.data.Form;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;

(中略)

Client client = new Client(Protocol.HTTP);
String url = "http://www.example.com/";
Form form = new Form();
form.add("name", "value");
Representation rep = form.getWebRepresentation();
Request request = new Request(Method.POST, url, rep);
try {
	String jsonStr = client.handle(request).getEntity().getText();
	JsonRepresentation json = new JsonRepresentation(jsonStr);

} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

・参考
Restlet edition for Android
Restlet edition for Android – Sample application

taga Android ,