HSP : HSP3Dish / onion software 2012(c)

# HSP3Dish android(NDK)版プログラミングガイド

1. android版 HSP3Dish概要
2. 環境の準備
3. Platform APIインストール
4. HSP3Dish Helperの設定
5. 新規プロジェクトの作成
6. プロジェクトのビルド
7. サンプルプロジェクト
8. ソースのコンパイル
9. 実機への転送と実行
10. データファイルの準備
11. システム情報の取得
12. タスク(アクティビティ)呼び出し
13. 画面サイズのスケーリングについて(new)
14. リリースビルド(new)
15. android版の注意事項、制限
16. android版の更新予定

## android版 HSP3Dish概要

android版 HSP3Dishは、android OS搭載機種(スマートフォン、タブレット等)上で動作するHSP3Dishのランタイムです。 Windows版 HSP3Dishがサポートする機能をandroid OS上で再現することが可能です。 (android版 HSP3Dishは、Windows版のスクリプトを実行させることを目的としており、HSP3開発システムそのものをiOS上で再現するものではありません。)
このマニュアルでは、android版の利用方法、注意点などを説明していきます。
現状ではandroid上で実行できるファイルをビルドするためには、開発のための環境設定を行なう必要があります。開発環境の構築に費用はかかりません。すべて無料で準備することができます。 これらは、Windows上で動作し、接続されているandroidデバイス上で動作の確認を行なうことができます。
HSP3Dishでのビルドを支援するための、HSP3Dish Helperツールが同梱されています。 これにより、比較的スムーズにandroid向けにビルドを行なうことが可能になります。 (尚、統合開発環境Eclipse上でお使い頂くことも可能ですが、 手順が多いためHSP3Dish Helperの利用を推奨しています。)

## 環境の準備

androidの実機上で動作させるためには、以下が必要となります。

- android開発環境(SDK) → [ダウンロードサイト]

  最新版のWindows版(インストーラーではない)zipアーカイブを任意のフォルダに解凍してください。推奨フォルダは、「c:\android\android-sdk〜」です。

- JDK(Java Development Kit) → [ダウンロードサイト]

  JDK (Java Development Kit)をインストールしてください。x86版のJRE6+JDK6を推奨します。JDK7(ver1.7)は、apkファイルの署名が正しく行なわれないため推奨されません。

- Android NDK（Native Development Kit）開発環境 → [ダウンロードサイト]

  最新版のWindows版zipアーカイブを任意のフォルダに解凍してください。推奨フォルダは、「c:\android\android-ndk〜」です。

- Apache Ant(開発補助ツール) → [ダウンロードサイト]

  最新版のzipアーカイブを任意のフォルダに解凍してください。推奨フォルダは、「c:\android\apache-ant〜」です。

推奨するフォルダにアーカイブを解凍した場合、上のような状態になります。(英文字のみ、スペースを含まないフォルダ名を使用してください)

## Platform APIインストール

ビルドに必要なPlatform APIのインストールを行ないます。 android開発環境(SDK)フォルダ内にある、「SDK Manager.exe」を実行してください。

このツールにより、必要なAPIをインストールすることができます。(ネットに接続されている必要があります)
「Android 4.0.3 (API 15)」のような形で、それぞれのバージョンに対応したAPIのチェックボックスが表示されます。 この中で、「Tools」「Android 2.3.3 (API 10)」はチェックを入れて必ずインストールするようにしてください。 それ以外のバージョンは必要に応じてインストールして頂いて構いません。
「Install packages...」のボタンを押すことで、ダウンロードとインストールが行なわれます。 インストールされた項目は、「Installed」の表示が付加されます。

## HSP3Dish Helperの設定

HSPインストールフォルダ(最新版のHSP3Dish開発セットによりアップデートされている必要があります)にあるHSP3Dish Helper(hsp3dh.exe)を起動してください。

「オプション」ボタンを押して表示される画面で、android開発環境(SDK)などのインストール行なったフォルダの場所を設定してください。

推奨するフォルダにインストールされた場合、上のような設定になります。
最後の「プロジェクト」フォルダ設定は、android用にアプリをビルドする際に作成されるプロジェクトフォルダの起点になる位置を示します。推奨フォルダは、「c:\android」です。

## 新規プロジェクトの作成

HSP3Dish Helper(hsp3dh.exe)を起動して、中央下にある「android」ボタンを押して、androidビルドのモードにします。

上のようなプロジェクト新規作成のダイアログが表示されます。(新規作成になっていない場合は、「新規プロジェクト」のボタンを押して下さい)
以下の項目を設定して「新規作成」ボタンを押すことで、指定したプロジェクトのフォルダが作成され、android用のビルド準備が整います。 android用アプリの開発では、1つのアプリにつき必ず1つのプロジェクトファイルを作成する必要があります。プロジェクトのフォルダは、設定メニューで設定されている場所を起点に作成されます。

- プロジェクト名

プロジェクトのタイトル名となります。スペースを含まない英文字のみで指定してください。

- ID

ビルドのターゲットIDを設定します。ターゲットIDは、SDKのAPIバージョンを指定するための番号になります。デフォルトで「"android-10"」(2.3.3)が指定されています。

通常は、変更する必要はありません。他のターゲットIDが必要な場合は、「ID...」ボタンを含めず押して表示される一欄の中からIDを選んで入力してください。

- パッケージ名

アプリを識別するための情報となります。パッケージ名には、他のパッケージ名と重複しない名称が求められます。 通常は、ドメインをトップレベルドメインから逆方法に並べたものを使うことが推奨されています。たとえば、「net.onionsoft.testapp」のように階層的に指定します。 名称には、スペースを含まない英文字のみで指定してください。Javaのパッケージ命名規約なども参考にしてみてください。
パッケージ名を省略した場合は、日付とプロジェクト名から自動的に生成される文字列が適用されます。

## プロジェクトのビルド

HSP3Dish Helper(hsp3dh.exe)を起動して、中央下にある「android」ボタンを押して、androidビルドのモードにします。

上のようなプロジェクトビルドのダイアログが表示されます。(ビルドになっていない場合は、「既存プロジェクト」のボタンを押して下さい)
プロジェクトのビルドを行なうことで、指定されたHSPスクリプト及びデータファイルをandroidで実行できる形式(apkファイル)として出力されます。 android用アプリの開発では、実行のためのプログラムとデータをすべてまとめたapkファイルが最終的な出力結果となります。
ダイアログで設定する項目は、以下の通りです。

- ソーススクリプト

実行するためのHSPスクリプト(.hsp)を指定します。必ずHSP3Dish用に記述されたスクリプトでなければなりません。「参照」ボタンを押すことで、ファイル選択ダイアログを開くことができます。

- データファイル(dpm)

スクリプトから参照されるデータが格納されているdpmファイルを指定します。dpmファイルは、HSPで使用している形式で、複数のファイルが1つのdpmファイルにパックされています。「作成...」ボタンを押すことで、指定したフォルダ内にあるすべてのファイルをdata.dpmというファイルにパックして、そのファイルを指定することができます。 データファイルの指定が空欄の場合は、データのないスクリプトとして処理されます。

- プロジェクト名

ビルドの対象となるプロジェクトを選択します。プロジェクトのフォルダが作成されて、ビルドの準備が整っているものの中から、1つを選択することができます。 (「更新」ボタンを押すことで、プロジェクトのフォルダが再検索されます。)

プロジェクト名などの項目を指定した後、「ビルド」ボタンを押すことでビルドが開始されます。HSPのソーススクリプトの変換及びNDKのコンパイルからパッケージの生成までをすべて自動で行ないます。
ビルドの結果は、consoleウィンドウに表示されます。

正常に終了すると、「終了しました」のメッセージが表示され、プロジェクトフォルダ以下のbinに、apkファイルが生成されています。
「クリーン」ボタンを押すことで、ビルドされたデータを破棄してプロジェクトフォルダを初期化することができます。全体を再度ビルドする場合には、一度「クリーン」によりデータを破棄しておいてください。

## サンプルプロジェクト

sample/hsp3dishフォルダには、HSP3Dishを使うためのサンプルスクリプトが含まれています。 ブロック崩しのHSP3Dishサンプル(block3.hsp)を、ソーススクリプトに指定して、 データファイル(dpm)は空欄のまま、ビルドを実行することができます。

## 実機への転送と実行

プロジェクトのビルドが完了したら、androidの実機に転送して確認することが可能です。 (エミュレータ上での実行は現在まだサポートされていません)
androidの実機をUSBで接続し、OSから認識されている状態で「転送」ボタンを押すことで、ビルド済みのapkファイルを転送(インストール)します。 後はアプリケーション一覧から、転送したアプリの実行を行なってください。
android実機の接続設定については、デバイスの機種ごとに異なります。以下のサイトなどを参考にしてみてください。

- 実機でデバッグするには [逆引きAndroid入門]

実機への転送ができない場合でも、ビルドで生成されたapkファイルをネットやUSBメモリを経由して転送してインストールを行ない実行の確認をすることも可能です。
「Logcat」ボタンを押して実行ログを表示させることが可能です。実機に転送して実行した際の、HSPからのエラーや初期化メッセージを確認することができます。

## データファイルの準備

スクリプトから参照されるデータファイルは2通りの方法で用意することができます。 1つは、「データファイル(dpm)」の項目で設定されているデータフォルダ(data.dpmを生成します)にファイルをコピーして使用する方法。基本的には、こちらの方法を使用してください。 ただし、サウンドファイル(wav,mp3など)は認識されないので注意してください。
もう1つの方法は、プロジェクトディレクトリ内のassetsフォルダにファイルをコピーするというものです。サウンドのファイルは必ず、assetsフォルダに入れるようにしてください。 assetsフォルダには、画像ファイルを入れることも可能ですが、assetsフォルダのリソースのサイズ・個数に制限があるため、1MBを越える大きなファイルを多数使用する場合は、data.dpmのデータフォルダを使用してください。
また、テキストファイルなどその他のデータファイルは必ず、data.dpmのデータフォルダを使用するようにしてください。

## システム情報の取得

sysinfo関数によりOSバージョン及び、デバイス名を取得することが可能になりました。 sysinfo(0)で、「android 2.3.3」のような文字列を取得することができます。これにより、ソース中で現在動作しているOSやバージョンを判別可能です。
また、sysinfo(2)で、デバイス名を取得することができます。現在、sysinfo関数の他の項目はサポートされていません。

## タスク(アクティビティ)呼び出し

exec命令により、他のタスク(アクティビティ)を呼び出すことが可能です。

    		exec "パッケージ名", 0, "クラス名"

２番目のパラメーター(実行モード)が0の場合は、「パッケージ名」「クラス名」により、 実行するタスクを指定します。 セキュリティの解除が必要な場合は、「AndroidManifest.xml」のに起動するクラスを記述してください。

より手軽に実行する手段として、URIを指定してアプリを呼び出す方法があります。

    		exec "URI文字列", 16

たとえば、URIに「http://hsp.tv」を指定した場合は、規定のwebブラウザを開きURLとして表示します。 「tel:123456789」によりダイアラーを起動します。他にもOSがサポートする様々な呼び出し方法が存在します。

## 画面サイズのスケーリングについて

最初に作成された解像度と異なるスクリーン上で実行する際に、スケーリング(拡大縮小)を適用することができます。
jniフォルダ内のmain.cソースを編集することで、スケーリングに関する設定を行ないます。
「static void engine_handle_cmd」で始まるソースコード(160行付近)にある以下の行を修正します。

    		//hgio_view( 480, 320 );
    		//hgio_scale( 1.0f, 1.0f );
    		//hgio_autoscale( 0 );

行頭が「//」になっている項目は、コメントアウトされ機能しません。 初期設定では、スケーリングの設定は行なっていませんので、上のようになっているはずです。

    		hgio_view( 480, 320 );

まず、「//」を消去して、hgio_viewの行を有効にします。hgio_viewにより、もともとの画面サイズ(スクリプトが動作する解像度)を設定してください。上の例では、横サイズが480、縦サイズが320であることを示しています。

    		hgio_scale( 2.0f, 2.0f );

指定した倍率で表示を行ないたい場合は、hgio_scaleの行を有効にします。hgio_scaleにより、もともとの画面サイズに対して、指定した倍率で表示を行ないます。倍率を固定したい場合には、こちらを使用してください。通常は、hgio_autoscaleを使用することを推奨します。

    		hgio_autoscale( 0 );

画面のスケーリングを自動的に調整したい場合は、hgio_autoscaleの行を有効にします。hgio_autoscaleにより、描画した画面サイズを適切に拡大縮小し、現在のスクリーンに表示させます。
カッコ内の数値で、スケーリングの方法をいくつか指定することができます。

    		0 : 画面全体に収まる最適な大きさ(縦横比は維持)
    		1 : X方向のサイズを基準に拡大縮小(縦横比は維持)
    		2 : Y方向のサイズを基準に拡大縮小(縦横比は維持)
    		3 : 縦横比は無視して画面全体に表示

スケーリングの設定は、起動時に行なわれます。スクリプト実行中に変更することはできません。

## リリースビルド

HSP3Dish Helperからリリースビルドを行なうと、署名入りのapkファイルを生成することができます。これにより、Google Play(Android マーケット)に作成したアプリを登録することが可能になります。 公開するための、おおまかな手順は以下の通りです。

- Googleに開発者登録を行なう(アプリを配布するためには、有償($25)の登録が必要になります)
- 署名のための証明書(keystore)を作成する
- HSP3Dish Helperでリリースビルドを行なう
- Android Developer Consoleからアップロードする

順を追って説明していきます。

- Googleに開発者登録を行なう

    	http://developer.android.com/

androidのデベロッパーページを開き、「公開」(publish)の詳細ページを選択します。 Googleアカウントでサインインを行ない、開発者情報を適切に入力して登録を行ないます。
(電話番号の入力は、国番号を含めて行ないます。日本の場合は先頭に「81」を付け、市外局番の先頭「0」を省くのが決まりです。「03-1234-5678」の場合は、「+81-3-1234-5678」となります。)
次に、Google Checkoutを利用して登録の決済を行ないます。クレジットカード等を使って支払いを行なうことができます。
すべて終了すると、Android Developer Consoleのページにアクセスできるようになります。 有料アプリを登録する場合は、さらに銀行の口座などのアカウント情報を設定する必要があります。

- 署名のための証明書(keystore)を作成する

まず、HSP3Dish Helperを起動し、androidタブの新規プロジェクトページを開きます。 次に、「KEY作成」ボタンを押します。(キー名は、「hspapp」のままで問題ありません)
コマンドプロンプトの画面が開き、以下の項目について情報を求めてくるのでキーボードから入力してください。すべて半角英文字で入力することを推奨します。

    	・パスワード
    	・パスワード再入力
    	・姓名
    	・組織単位名(部門・部署名)
    	・組織名(会社・団体名)
    	・都市名または地域名(市町村名)
    	・州名または地方名(都道府県名)
    	・国番号(日本の場合は81を入力)
    	・よろしいですか?(「y」を入力)
    	・鍵パスワード(Enterを入力)

以上で、「hspapp.keystore」ファイルがプロジェクトフォルダのルートに作成されます。 このファイルは、アプリ署名のために必要なので、削除しないで大切に保管しておいてください。

- HSP3Dish Helperでリリースビルドを行なう

HSP3Dish Helperの、androidタブで既存プロジェクトページを開きます。 ビルドしたいプロジェクトを選択し、通常のビルドを行なって正常に動作することを確認してください。
次に「リリース」ボタンを押してください。アプリのリリースビルドを実行し、署名を行ないます。 この時、コマンドプロンプトの画面が開き、パスワードを求められるので「hspapp.keystore」を作成した時に入力したパスワードを入力してください。
以上で、プロジェクトのbinフォルダに「プロジェクト名.apk」のファイルが生成されます。

- Android Developer Consoleからアップロードする

Android Developer Consoleのページで、新規のアプリを追加し、生成された「プロジェクト名.apk」のファイルをアップロードしてください。 (プロジェクト名-debug.apkや、プロジェクト名-release.apkのファイルは署名されていませんので、無効になります)
Google Playに登録を行なう場合は、紹介文やスクリーンショット、サポート情報などを設定する必要があります。
アップロードしたapkファイルをactivate(有効化)し、publish(公開)ボタンを押すことで、アプリを一般に公開します。(実際に公開されるまで、数時間の遅延があります)
公開されている情報は、Android Developer Consoleから、いつでも修正を行なうことができます。 ファイルを更新する場合は、再度リリースビルドを行なって、apkファイルを差し替えた後にactivate(有効化)してください。 ただし、更新を行なうためには、バージョン番号を上げる必要があります。プロジェクトが使用している「AndroidManifest.xml」ファイルの、android:versionCode、android:versionName項目の数値を更新してから、リリースビルドを行なうようにしてください。

## android版の注意事項、制限

- 入力可能な情報

タップした座標がmousex,mouseyに反映されます。 またstick命令により、クリック(タップ)のON/OFFを取得可能です。

- 画像フォーマットについて

celload、picload命令などで読み込まれる画像は、以下のフォーマットが使用できます。 アルファチャンネルを使用する場合は、PNG形式が推奨されます。

- JPEG baseline (プログレッシブJPEGは非サポート)
- PNG (8-bit形式のみ)
- TGA (サブセット)
- BMP (白黒、REL圧縮は非サポート)
- PSD (RGB24bitのみ読み出し)
- GIF
- HDR (radiance rgbE format)
- PIC (Softimage PIC)

- gmodeの制約について

現在のバージョンでは、gmode 6(色減算)はサポートされていません。 これは、android(NDK)版のみの制約事項です。将来のバージョンでは、対応を行なっていく予定です。

- 画像サイズについて

celload、picload命令などで読み込まれる画像の縦・横サイズが、2048を越えるものについては、正しく扱えない機種もあるので、推奨されません。 縦・横のサイズが2^nのサイズ、つまり1,2,4,8,16,32,64,128,256,512,1024でない画像を 読み込む時には、内部で変換を行なうため多少のオーバーヘッドが発生します。 (通常はそれほど気にする必要はありません。大量の画像を読み込む場合にCPUリソースが余計に必要となります)
画像ファイルはプロジェクトディレクトリ内のassetsフォルダに入れることができます。 ただし、リソースのサイズ・個数に制限があるため、1MBを越える大きなファイルを多数使用する場合は、data.dpmに含めて使用してください。

- mes,print命令について

現在のバージョンでは、mes及びprint命令で表示可能な文字列は半角英文字・記号のみになっています。デフォルトで16x16ドットの固定フォントが用意されています。
日本語を含むすべての文字を表示する場合は、あらかじめ画像データとして用意するなどの対応が必要になります。
これは、android(NDK)版のみの制約事項です。将来のバージョンでは、対応を行なっていく予定です。

- 再生可能なサウンドファイルについて

拡張子が「.wav」「.mp3」「.ogg」「.aac」のファイルに対応しています。 .aacや.oggについては、すべてのフォーマットをサポートしていないので注意してください。 「.wav」「.mp3」については、Windows版を含めすべてのhsp3dishで幅広くサポートされている形式です。
サウンドのファイルは必ずプロジェクトディレクトリ内のassetsフォルダに入れるようにしてください。data.dpmに含めるとOSのシステム側から読み取ることができません。

- 画面の回転について

画面の回転については、AndroidManifest.xmlを書き換えて制御することが可能です。

            <activity android:name="android.app.NativeActivity"
    	          android:screenOrientation="portrait"
                      android:label="@string/app_name">

「android:screenOrientation=」の行で指定されているパラメーターが、"portrait"の場合は縦画面。"landscape"の場合は、横画面にそれぞれ固定されます。 現在のバージョンでは、実行中の画面自動回転には対応していません。必ず、縦・横画面を固定して動作する仕様で作成してください。

- データの保存について

bsave、bload命令によってandroidストレージのデータファイル読み書きが可能です。 ファイル名が「/」で始まった場合は、フルパス指定となります。 androidストレージに保存する場合は、「/」を含めずファイル名(半角英文字)のみ指定するようにしてください。

## android版の更新予定

以下の機能は今後、上から順に高い優先度で追加される予定です。

- dialog命令によるダイアログ表示サポート
- 各種システム情報取得
- サウンド再生時のボリュームコントロール
- 日本語フォントの描画サポート
- 傾きセンサーの入力情報の取得
- マルチタッチ入力情報の取得
- http接続、ブラウザの呼び出しサポート
- OBAQプラグイン機能のサポート

バージョンアップの告知は、HSPオフィシャルサイトHSPTV!にて行なわれますので、随時ご確認ください。