SQLの窓

2012年07月15日


Android Flex : FLARToolkit を Flex4(AIR) を使って Android にのっけてみました。





動くとは思っていましたが、実機がテスト専用に買った RStream A1 なのでかなりレスポンスが悪かったです。最初、PC の同じ大きさ(320x240)で処理して見事に固まってしまいましたが、半分のサイズにする事でなんとか(コマ送り状態ですが)動作確認できました(Android は 2.2.2 です)

バッケージの中にあるデータは sdcard にコピーして使用します。dae のデータはインターネット経由でも動く事は解っているのですが、なにせ遅い(トラブルは避けたい)のでローカルで読み込んでいます。



本当は、実機側でシャッター押して画像化(あるいは動画化)したいところですが、それはまた個別にやらないと整理が付かないのです。









Flex4 でやる事のメリットは、3D に限らず大きいと思います。Java だけでやろうとするとやたらと面倒な事が、Flex4 ではいとも簡単にできます。反面、Native でないとできない事も多いので、その解決方法もいろいろ補充しましたので近いうちにまとめる予定です。

★ 以下はその基本部分のまとめです。

AIR Native Extentions for Android のフルコマンドラインビルド


関連する記事

7,980円の Rstream A1 をソフマップで買っちゃいました
Adobe AIR 3 が動く Android が 2.2 以降なので、動作確認用に買った Rstream A1 をバージョンアップしないといけない

Android の為の AIR Flex 基本 List で Web からデータ取得



posted by lightbox at 2012-07-15 01:00 | Flex | このブログの読者になる | 更新情報をチェックする

2012年07月04日


Android Flex : AIR Native Extentions for Android のフルコマンドラインビルド



Toast の表示と、ブラウザを開く処理とバージョン文字列の取得



※ 一括バッチを追加しました
cd java
call build
if ERRORLEVEL 1 goto proc_exit1
cd ..

cd ane
call build
if ERRORLEVEL 1 goto proc_exit2
cd ..

call setlib
echo library.swf を配置しました

call build_ane

call build
if ERRORLEVEL 1 goto proc_exit3

call inst

goto proc_normal

:proc_exit1
cd ..
echo java のビルドで失敗しました
goto proc_normal

:proc_exit2
cd ..
echo ane のビルドで失敗しました
goto proc_normal

:proc_exit3
echo 本体 のビルドで失敗しました
goto proc_normal


:proc_normal


Eclipse は必要ありません。Java の SDK と、Flex の SDK (と、最新が必要なら AIR の SDK ) と、Android の SDK があればいいです。( ここでは厳密には、エミュレータのデバックとして処理してます。が、実機でもそのまま動くはずです )

とにかく、一度解ってしまえばコマンドラインでビルドしたほうが小回りが利きます。一連の流れがはっきりすると、swf の作成は -library-path+=lightboxANE.ane でいい事が解るし、つまり、ane ファイルがあって、使い方さえ解れば自由に使える事が解ります( ID は 解凍すれば extension.xml に書かれてますし )

※ とは言うものの、ane のダウンロードって殆ど見かけませんでした( 見つけたものは動作確認しました )

java のコード

これは、http://www.adobe.com/devnet/air/native-extensions-for-air.html にたくさんサンプルがあったのですが、一番簡単だと思われる 『Sharing/SMS/Toast』 を使いました( URL を開くのは少し変更 )

■ Java のソースコード

java フォルダに入って、jc.bat でコマンドラインを開いて、build.bat で jar を作成します
javac -cp C:\android\android-sdk-windows\platforms\android-10\android.jar;C:\AdobeAIRSDK\lib\android\FlashRuntimeExtensions.jar lightbox\ToastFunction.java lightbox\OpenURLFunction.java lightbox\AndroidExtensions.java
del ..\jar\ANElib.jar
jar cvf ..\jar\ANElib.jar lightbox\*.class 


ActionScript のコード

これも、『Sharing/SMS/Toast』のものです。ane フォルダに入って、android.bat でコマンドプロンプトを開いて build.bat を実行します。

■ ActionScript のソースコード

※ 注意するのは、java も ActionScript も同じパッケージ名にする事です
compc +configname=airmobile -source-path . -output ..\lightboxANE.swc -include-classes lightbox.AndroidExtensions lightbox.AndroidExtensionsEvent -swf-version 14
swc を解凍して jar\library.swf として配置

これは、仕様らしいのですが、自動的にやってくれないので自分でします。メインの android.bat を実行してコマンドプロンプトを開いて setlib.bat を実行します。

del jar\library.swf
jar xf lightboxANE.swc library.swf
move library.swf jar

lightboxANE.ane を作成

拡張用のライブラリですが、Flex側のコードをビルドする為のコードも格納されるので、本体のビルドもこのライブラリを使用します。

以下は、見やすくする為に改行を入れています
adt
 -package
 -storetype pkcs12
 -keystore lightbox.p12
 -storepass password
 -target ane lightboxANE.ane extension.xml
 -swc lightboxANE.swc
 -platform Android-ARM -C jar .


本体 Mainw.swf 作成

build.bat で swf が作成されます。この後は、Android 用のパッケージを作成してエミュレータに転送するのですが、それらの処理は inst.bat で行っています。ですから、inst.bat を実行する前に、エミュレータ起動 して、tools\ddms.bat 実行しておきます。

■ Android アプリ用の XML と、拡張用の XML

inst.bat の実行
call adt -package -target apk-debug -storetype pkcs12 -keystore lightbox.p12 -storepass password lightbox_1.apk Mainw.xml Mainw.swf winofsql.png -extdir .
call adt -uninstallApp -platform android -appid lightbox.androidtest
call adt -installApp -platform android -package lightbox_1.apk

SDK 類のパスはそれぞれの PC の環境によって変わりますが、基本 C ドライブのルートに展開しておけば、そのまま使えると思います。

関連する記事

コマンドラインで簡単に AIR アプリを Android エミュレータにインストールして実行
コマンドラインで、Android エミュレータで、dae の 3Dモデルを表示するパッケージ
Android の為の AIR Flex 基本 List で Web からデータ取得
AIR Native Extentions for Android なコマンドライン一覧


参考

ns.adobe.com/air/extension/2.5 > AIR 3+ > -swf-version 13
ns.adobe.com/air/extension/3.1 > AIR 3.1+ > -swf-version 14

らしいです。
( default は必要無いです。入れると余計面倒な仕様になってます )


posted by lightbox at 2012-07-04 01:56 | Flex | このブログの読者になる | 更新情報をチェックする

2012年06月23日


Android Flex : Android の為の AIR Flex 基本 List で Web からデータ取得

Google ドライブからダウンロード




モバイルの基本と思われる List なんですが、基本すぎるせいなのかちょっと探してもあまり良いサンプルが見つからなかったので、WEB Flex3 の内容を移植してみました。List の dataProvider に直接 XMLList をセットできないので変換しましたが、もともと DataGrid 用だったのでこの方法にしました。

List 内に画像も表示してみました



関連する記事

コマンドラインで、Android エミュレータで、dae の 3Dモデルを表示するパッケージ

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark"
	xmlns:mx="library://ns.adobe.com/flex/mx"
	title="最初のビュー"
	creationComplete="initView();"
>

<fx:Script>
<![CDATA[

	// LogCat 出力用
	import mx.logging.targets.*;
	import mx.logging.*;

	// List 用
	import spark.events.IndexChangeEvent;

	// http サーバー関連
	import mx.collections.ArrayList;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;

	// LogCat
	private var logger:ILogger = Log.getLogger("MyLogger");

	// *****************************************************
	// 初期処理
	// *****************************************************
	public function initView():void {

		// ログ出力準備
		var traceTarget:TraceTarget = new TraceTarget();
		traceTarget.level = LogEventLevel.ALL;
		traceTarget.filters = ["*"];
		traceTarget.includeDate = false;
		traceTarget.includeTime = false;
		traceTarget.includeLevel = false;
		traceTarget.includeCategory = false;
		Log.addTarget(traceTarget);

	}

	// *********************************************************
	// データを WEB から追加
	// *********************************************************
	public function loadData():void {

		logger.info( "ボタンが押されました" );

		srv.url = "http://homepage2.nifty.com/lightbox/data/list.xml";

		// レスポンス結果のデータフォーマット
		srv.resultFormat = "e4x";
		
		srv.method = "GET";
		
		// リクエストを実行
		var at:AsyncToken = srv.send();


	}


	// *********************************************************
	// リストを選択
	// *********************************************************
	public function myChangedHandler(event:IndexChangeEvent):void {

		// 本来は複数選択用
		var selIndices:Vector.<int> = event.currentTarget.selectedIndices;
		logger.info( selIndices[0].toString() );
		var selItems:Vector.<Object> = event.currentTarget.selectedItems;
		logger.info( selItems[0].toString() );

		// 単体
		logger.info( event.currentTarget.selectedItem.toString() );
		logger.info( event.newIndex.toString() );

	}

	// *****************************************************
	// HTTPServiceが成功
	// *****************************************************
	private function resultHandler(e:ResultEvent):void
	{
		var dataSet:ArrayList = null;

		var aData:Array = new Array();
		for each(var xmlData:XML in e.result.row.name ) {
			aData.push(xmlData);
		}

		dataSet = new ArrayList(aData);
		base.dataProvider = dataSet;

	}
	
	// *****************************************************
	// HTTPServiceでエラーが発生した
	// *****************************************************
	private function faultHandler(e:FaultEvent):void
	{
		logger.info("HTTPService失敗\n\n理由 : " + e.fault.message);
	}

]]>
</fx:Script>
<fx:Declarations>
<mx:HTTPService id="srv" showBusyCursor="true"
		 result="resultHandler(event)"
		 fault="faultHandler(event)" />
</fx:Declarations>

	<s:Button
		x="42" y="27"
		width="131" height="60"
		label="ロード"
		click="loadData()" />

	<s:BorderContainer
		width="100%"
		height="100%"
		y="100"
	>
		<s:List
			id="base"
			width="100%"
			height="100%"
			change="myChangedHandler(event);" 
		>
			<mx:ArrayCollection>
				<fx:String>固定リストデータ1</fx:String>
				<fx:String>固定リストデータ2</fx:String>
				<fx:String>固定リストデータ3</fx:String> 
				<fx:String>サンプル通り</fx:String> 
			</mx:ArrayCollection>
		</s:List>
	</s:BorderContainer>


</s:View>


itemRenderer の中からのイベント処理です。
( ※ 昔と同じでトップを参照するしか方法を見つけられませんでした )

Mainw.mxml
startview.mxml

XML に アイコンの URL を含めるようにしました。


タグ:android AIR
posted by lightbox at 2012-06-23 21:34 | Flex | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり