playbook用のアプリをBlackBerry App Worldにリリースしました。

初めて使うFlashBuilder4.5でplaybook用のお絵かきアプリを作ってみました。

 

sketchPAD

主な機能は

  • undo/redo 10回
  • 書き味がなめらか
  • カスタムカラーパレット

playbookのアプリ市場がどんなものか定点観測するためにリリースしてみました。

 

FlashBuilder4.5でのPlaybookアプリケーションにおける注意点について

この記事はFlashBuilder 4.5.1のリリースによって必要なくなりました!!!

 

まだ発売もされていない端末のアプリをつくろうなんて奇特な方はいらっしゃらないかもしれませんがとりあえずplaybookをゲットしたのでこちらもちょっとづつ更新していこうと思います。

まず既にFlashBuilder4.5ではAIR2.6での開発になっているため、ベースがAIR2.5のplaybookの開発はデフォルトの設定だとできません。準備作業としてplaybookが2.6対応になるまで強引に開発ができるようにパッチを用意してくれているのでこれ(playbook_override.zip)を用意します。いまのところ、こんなややこしいことになってますが、いずれかのタイミングでアップデートされることと思います。

開発における注意点

新しくプロジェクトを作成したら以下の作業を行います。メニューの「プロジェクト→プロパティ」を開きます。

1,ActionScriptコンパイラーの設定

プロジェクトのプロパティパネルから[ActionScriptコンパイラーの項目を選択します。]

追加コンパイラー引数のテキストフィールドに「-swf-version=10」を追記します。

 

2,ActionScriptビルドパッケージの設定

同じプロパティ画面で左側のメニューから[ActionScript ビルドのパッケージ]から[BlackBerry Tablet OS]を選択します。

チェックボックス[プラットフォーム固有ライブラリをライブラリパスに追加]にチェックが入った状態にします。

下の詳細タブをクリックして[その他のパッケージ作成オプション]を[-forceAirVersion 2.5]と入力します。

 

3,ActionScriptビルドパスの設定

次に下の段の[ActionScriptビルドパス]を選択し、[SWCの追加]ボタンをクリックして最初にダウンロードしておいたplaybook_override.swcを追加します。

以上が現状のFlashBuilder4.5でplaybookアプリ作るときの注意点になります。

元記事はこちら

AIR for AndroidのSharedObjectについて

AIR for Androidで利用できるSharedObjectはブラウザのものと少し異なります。

ブラウザではsharedObjectで保存できる容量がユーザーの定めたある一定量の容量で制限されていました。AIR for Androidではここらへんの記述については特にコメントされていませんが、AIR for AndroidのSharedObjectはブラウザのように決められたディレクトリにドメインごとに保存されるのではなく、アプリ固有のストレージの中に実体ファイルが生成されるような形になっています。このアプリ固有のストレージはの容量については特に制限はなく(でも少なければ少ないほうが望ましい)いままでの数キロバイトといった使い方からもう少し拡張できると思います。

以下のようなテストを行いました。

1920 x 1200pxのjpegデータ(ファイルサイズは1Mb)をBitmapDataとしてリンケージさせておき、このBitmapData.getVector()をそのままSharedObject.dataにどこまで入るかを試しました。

var bmpd:BitmapData = new MyBitmap();//リンケージしたビットマップ
var so:SharedObject = SharedObject.getLocal("sharedtest");

so.data.vec1 = bmpd.getVector(new Rectangle(0,0,1920,1200));
so.data.vec2 = bmpd.getVector(new Rectangle(0,0,1920,1200));
so.data.vec3 = bmpd.getVector(new Rectangle(0,0,1920,1200));

1920*1200の画像をgetVectorにすると約7.8MbのSharedObjectファイルが生成されます。
これを繰り返してどれくらいまで保存できるかを確認してみました。

結果は3回目の保存で約26.37Mbまでは保存することができました。

ただメモリの問題さえ解決出来れば無制限に保存できるような気がしました。3回目のビットマップデータをflush()した際にアプリの使用しているメモリが80Mbyteを超え、アプリが強制終了してしまいました。SharedObjectにデータをつっこんだタイミングでメモリの使用量が大きく増えていたのでここらへんが解決出来れば大きなデータも行けるんじゃないかと思います。ただ自分のテスト方法が適切かどうかもわからないので不適切な部分があれば指摘いただけると幸いです。

メモリを消費しない程度にある程度の大きさのSharedObjectは利用できそうな感じです。※一般的なアプリのメモリの使用量は約10~20Mb以内なので今回のテストはとても特殊なケースです。ここらへんは実際に作ってみてテストするしかなさそうです。。

ちなみに豆知識ですが以下の場合にSharedObjectは消去されます。

  • FlashやFlashBuilderでのPublishした場合
  • アプリケーションの管理から「データの消去」ボタンを押したとき。

AIR for Androidでパッケージしたapkファイルの構造について

AIR for AndroidではAIR Runtimeで動作するように一般的なjavaとは異なる形でパッケージングされています。ここではAIR for Androidで実際にパッケージされたapkの構造と、デバイスにインストールされた時の構造に分けて説明したいと思います。

AIR for Androidでパッケージされたapkファイルの構造

AIR for Androidではパブリッシュボタンを押すとandroidデバイスへのインストールファイル(apkファイル)を自動的に作成してくれます。

この処理はADTと呼ばれるコマンドがandroidへインストール可能なファイルへmy-app.xmlと署名ファイルと書き出されたswfファイルを使って自動的にパッケージングをおこなっています。パッケージングされたapkファイルの中身は↓のような構造になっています。

大切そうなところだけピックアップすると、

/AndroidManifest.xml

これはAIRforAndroidで自動生成されるアプリケーション定義ファイル(application.xml)を元にADTコマンドが一般的なandroidアプリで使用されるマニフェストファイルに作り直したものです。

このxmlはandroidmarketでのフィルタリングやデバイスのインストール時の機能制限などを行う際に利用されます。AIR for Androidではあらかじめandroid2.2以上のデバイスへインストールが可能なように設定されています。

また、ファイル形式がxmlとなっていますがapkにパッケージングされた時点でデバイスのパフォーマンスを節約するためにあらかじめパースされたバイナリになっています。なのでテキストエディタでみても読むことはできません。すでにapk化されたマニフェストを見たいなという場合はapktoolというツールでもとのxmlファイルにデコードが可能です。このファイルはapkにビルドされる際に圧縮の先頭に配置されています。

/assets/app.swf

これはAIR2.6SDKでパブリッシュされたswfファイルです。AIRとなっていますが実際パッケージングされるのはswfファイルです。ただ普通のWEB上で使われているswfでも動きますが、AIR2.6でビルドされていないので専用APIへのアクセスはできません。このswfを差し替えさえすればWEB上のゲームコンテンツなどをアプリとしてパッケージすることなども可能です(お勧めできませんが可能という意味です。モバイル用のチューニングは必須)

コマンドラインからビルドする場合はこちらを参照。

/assets

このディレクトリには上記のswf以外にもパブリッシュ設定上で追加したswf内で使用する画像、サウンド、バイナリなどが格納されています。このディレクトリに含めたファイルは直接ファイル名を入れることで参照できます。このディレクトリに保存されたものはデバイスの/data/appから参照するのであまりにもここに含めるファイルサイズが大きくなるときはアプリをSDカードへ保存できるようにアプリケーション定義ファイルを変更してあげたほうがいいかもしれません。

(例) var loader:Loader = new Loader(new URLRequest(“hello.png”));

(例) sound.load(“test.mp3”)

※ここで含めるファイルの中にアプリケーション定義ファイルが含まれていますが、定義ファイルは/assets/META-INF/AIR/に移動されています。

 

 

デバイス上に展開されたapkファイルの構造

apkファイルはデバイスにインストールされるとそのままapkが指定ディレクトリにコピーされるだけでなく、展開されてキャッシュディレクトリや様々な作業用ファイルが作成されます。実際に作成されたファイルやディレクトリの仕組みについて説明します。

 

デバイスにapkがインストールされるとapk本体が/data/app/applicationID.apkに配置されます。

さらに作業領域として/data/data/applicationIDが確保されます。この領域には他のアプリからアクセスができないのでセキュアなディレクトリになっています。

この作業領域は[lib][cache][files][appid]のディレクトリが作成され、このディレクトリのうちAIR for Androidでアクセス可能なディレクトリは[appid]になります。このディレクトリへはFileクラスやSharedObjectクラスから行えるようになっています。

File.applicationStorageDirectory

/data/data/air.appid/appid/LocalStore/

SharedObject

/data/data/air.appid/appid/LocaStore/#SharedObjects/appname.swf/appname.sol

 

アプリケーションの設定

デバイスに展開されたアプリケーションはデバイスの設定から移動や削除することが可能になっています。

デバイスの「設定」→「アプリケーション」→「アプリケーションの管理」→「myapp(アプリの名前)」

主に影響を及ぼすコマンドは「データを消去」「SDカードに移動」「キャッシュを消去」の3つです。AIR for Androidで作成したアプリはこのボタンを押したときどうなるの?と疑問になると思うので実際にボタンを押したときに消去される領域を確認してみました。

「データを消去」

/data/data/air.appid/cache

/data/data/air.appid/files

/data/data/air.appid/appid

の3つが消去されます。つまりインストール後に生成されたFile.applicationStorageDirectoryやSharedObjectもすべて消えてしまいます。

「キャッシュを消去」

/data/data/air.appid/cache/

以下のファイル及びディレクトリが削除されます。File/SharedObjectはそのまま残ります。AIR for Androidにおいてはあまり影響はありません。

「SDカードに移動」

/data/app/air.appid が暗号化されてSDカード(/mnt/secure/asec/,/mnt/asec/)に保存されます。(※/mnt/sdcardではありません。ここらへんの暗号化の仕組みはちょっとよくわかってません。。)

/data/data/air.appid/はそのまま端末上に残るのでインストール後に生成したファイルは意図的にSDカードへ保存しない限り、端末上に残ったままで移動できません。

 

AndroidデバイスのSIMフリー専門店の情報

今日秋葉原にiPad2を見に行ったときに偶然発見したAndroid のラインナップがとても贅沢にそろっている店舗を発見しました。

店名はわかりませんが、

・Android SIMフリー端末(Motorola以外ほとんど)

・Droid君グッズ多数(フィギア、Tシャツなどなど)

などAndroid関連については突き抜けてると思われます。今のところ専門店といいつつ、マニアのリクエストに答えられる店が少なかったのでとても夢に溢れるお店の登場に感無量です。

お店の位置

35.699111,139.770287

店舗外観

SIMフリー端末圧巻のラインナップ(写真クリックで拡大します。)

おひまな方はのぞいてみてください。たぶん退屈しないと思います。

AIR for Android開発で役に立つアプリ

ここで紹介するアプリは自己責任での利用をお願いします。場合によってはシステムを破壊する場合もあります。
※アプリは全て購入及びインストールしてテスト後、レビューしています。

Titanium Backup PRO (要root)

デバイスのバックアップを丸ごと取ってくれる神アプリ。バージョンアップ時や、いじる前などにはバックアップを忘れずに。よく分からない方は無料版がこちらにあります。

Root Explorer(要root)

ROOT化に対応したエキスプローラ。本来は見えないシステム周りやアプリのdataまで見える。ファイルの移動やコピーも可能。ファイル管理ツールです。アプリ内で保存したデータの中身やファイルサイズ、SharedObjectの中を見たい場合など役に立ちます。root化非対応でよければAstroファイルマネージャーがあります。

Quick Unistaller

プレビュー用に作成したアプリ群をまとめてアンインストールできます。デモやサンプルなどまとめて消したい時におすすめ。

Watchdog Task Manager

メモリ監視、CPU監視ツール。無料版のLiteがあるのでまずそれからお試しでどぞ。リンクは有料版です。どれくらいメモリつかってるか?CPU食い過ぎていないか?など監視してくれます。リソース食い過ぎているとアラートなど出してくれます。

traceviewer

trace()文がはいたtraceログをを見ることができます。androidではtrace文はログとしてアーカイブに保存され、それをプレビューできるといったものです。

デバイスが通信可能かどうか調べる。(NetworkInfoクラス)

デバイスがwifiや3Gなどの通信網に接続しているかどうかを確認する関数のサンプルです。

下の関数は通信出来る状態にある場合true,通信できない場合はfalseを返します。あくまでネットワークの接続が出来ているかどうかの確認なので確実に通信できるかどうかはまた別の問題になります。ネットワークに繋ゲル必要がある場合、ネットワークの状態を確認した上で通信する際のエラーチェックも行う必要があると思います。

権限の設定はこちら。

単純にネットワークが利用出来るかどうかを調べる関数サンプル。

import flash.net.NetworkInfo;
import flash.net.NetworkInterface;

function checkNetworkEnabled():Boolean{
	var isCheck = false;

	if(NetworkInfo.isSupported){
		//NetworkInfoを参照します。
		var networkinfo:NetworkInfo = NetworkInfo.networkInfo;
		//NetworkInfoの中に複数のNetworkInterfaceが含まれていて個別に調べます。
		for each (var networkinterface:NetworkInterface in networkinfo.findInterfaces()){
			//通信可能なインターフェイスがある場合はそのインターフェイスの情報を表示します。
			if(networkinterface.active){
				isCheck = true;
			}
		}
	}
	return isCheck;
}

ネットワークの状態が変更された場合にイベントを発行して、変更後にネットワークが利用可能か調べてくれるサンプル。

※注意事項として、イベントはネットワークインターフェイスが複数ある場合個々のステータスが変化した場合に発生されます。例えばwifiと3Gネットワーク両方つながっていたとして3Gが切れてしまった場合でもネットワークはwifiで接続できますがステータスの変更イベントは発行されることになります。

import flash.net.NetworkInfo;
import flash.net.NetworkInterface;
import flash.text.TextField;
import flash.events.Event;

var txtf:TextField = new TextField();
txtf.autoSize = "left";
addChild(txtf);

//ネットワークの状態が変更された場合にイベントを発行します。
if(NetworkInfo.isSupported){
	NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);
}

function onNetworkChange(e:Event):void{
	txtf.appendText("networkchanging : "+ checkNetworkInfo().toString() + "\n");
}

//ネットワークが利用可能かを調べる関数
function checkNetworkInfo():Boolean{

	var isCheck:Boolean = false;

	if(NetworkInfo.isSupported){
		//NetworkInfoを参照します。
		var networkinfo:NetworkInfo = NetworkInfo.networkInfo;
		//NetworkInfoの中に複数のNetworkInterfaceが含まれていて個別に調べます。
		for each (var networkinterface:NetworkInterface in networkinfo.findInterfaces()){
			//通信可能なインターフェイスがある場合はそのインターフェイスの情報を表示します。
			if(networkinterface.active){
				isCheck = true;
			}
		}
	}

	return isCheck;

}

書画カメラを作る(アプリではない)

モバイル系のアプリつくったり、スマートフォンやタブレットの操作を記録しておきたい時ってあると思います。そんな時、書画カメラを使うのが一般的ですが価格的(5万円以上します。)な問題で入手が難しかったりします。そこで手持ちのWEBカメラをつかって書画カメラを自作します。

・持ち歩くことは想定しない。据え置きタイプ
・既になんらかのWEBカメラを持っている。

上の条件で想定したとして、こんな感じになりました。

用意するのはwebカメラ除いて4点。

マンフロット 237 フレックスアーム

マンフロット 035 スーパークランプ

マンフロット 118 1/4″-3/8″オスアダプター

WEBカメラ固定用ホルダー

Logicool Webcam Pro 9000

カメラを除いて約8000円弱で作れました。全部ネジなので固定用ホルダーとアダプターは他に用途がなければ固定してしまってもいいかもしれません。

つくってみて思ったのが、フレキシブルアームが結構長いので短いのがあればソッチの方がいいかもしれない。クランプも他にいくつか種類があるので小さめのにすれば持ち歩くことも可能。などなど。

 

XOOMをゲットしたので各種テストしてみました。

先日XOOMをアメリカのモトローラの通販サイトで購入し、ようやくGETしました。

※日本ではauからXOOM(日本語版)とdocomoからOptimus Padの2種のandroid3.0タブレットの発売が予定されています。

購入はクレジットカードで、アメリカの住所がないので転送サービスを利用してアメリカの指定の住所に転送後に日本に送ってもらえるようにお願いしました。使ったサービスはJISAさんです。かかった費用は本体68000+転送費用4311円+関税1800円でした。
ケースも買ったしまったんで全部含めると8万ぐらいです。

※輸入版なので日本語入力、表示はデフォルトの設定ではできません。輸入される方は自己責任でお願いします。

んで、早速いろいろテスト!!

Box2d Flash Alchemy Port + World Construction Kit

perfMaster delux

上条さんが公開しているモバイル向けパフォーマンス測定アプリでxoomのベンチとった結果です。

まだあんまりいじれていませんが、そのうちGPU使ったものもテストしていきたいと思います。

—-2011/3/14 追記————————-

Android3.0でサポートされているはずのマルチカメラですが、XOOMでは背面カメラしかサポートしていませんでした。

Camera.names.length が 1でした。

Android3.0 HoneyComb での変更点 (AIR for Android)

android3.0(honeycom)がでてエミュレータが少し安定してきたので、android2.2(Froyo),android2.3(GingerBread)からの変更点をまとめてみました。

・HOME画面UIおさらい

下のホーム画面見るだけでも既に全然違います。今までホーム長押しで表示されていた起動アプリ一覧がキーとして配置されています。さらに下の時計が表示されているバーは常に表示されます。

(外部リンク) HoneyComb新機能一覧まとめ

・メニューキーの扱い

ハードウェアキーがすべてなくなっています。HOME画面上ではメニュキーがなく、アプリが立ち上がった時点でメニュキーが画面左下に出現するような仕組みになっています。既にインストールされているアプリは画面右上にメニュキーがでるのがマナーのような感じがしているのですがどうなんでしょうか??知ってる方いたら教えてください。

僕の理想では下のようなメニューが理想的なのではと感じたのですが。。。。他のアプリと揃えたい!!

・サーチキーがない。キーイベントもとれない。

サーチキーはありませんがホーム画面にボタンやウィジェットとして配置されています。アプリ実装時はfroyo,gbも含めてサーチキーは何も割り当てないことをお勧めします。

・フルスクリーンモードの無効

フルスクリーンON/OFFどちらにチェックを入れても以下のようにフッターのキー部分はそのまま表示された状態で展開されます。

ハードウェアキーないので当たり前といえば当たり前ですが。。。

下のキャプチャはフルスクリーンON時の白紙Flaファイルを展開した画面です。

 

・マルチカメラサポート

実機がないので試せていませんが、インカメラをサポートしているようです。UIとは関係有りませんが。。。

以上、主なUI部分の変更点まとめでした。初見でまとめ書いたので気づいてない部分等ありましたらご指摘頂ければ幸いです。