2012年12月27日木曜日

AppInventor Portable for Windows(仮) Part3


AppInventor Portable for Windows(仮) Part2に引き続き、Part3を書きます。

セットアップ作業を極限まで削減するというニーズはあるということで、Portable環境の構築方法(サーバを含んだフルセット)について書いてみたいと思います。

XPユーザが根強く残っている可能性を想定して試験的にWindowsXP(32bit)メモリ1GB環境での構築を行ってみたのですが、Buildサーバが通常の起動ができなかったためやむを得ずHeap容量を大幅に減らして起動しましたが、その状態ではapkファイルを生成することができませんでした。

というわけでXPではBuildサーバを含めた完全な動作が難しい状況なのでメモリの少ないXP環境での利用は困難という結論になりました。

やはりメモリが豊富に使える64bit向けでVista以降での動作を前提とした構築メモということでご理解ください。


ちなみにXPの場合はWindows Server 2003 Resource Kit Toolsのインストールとlinkd.exeコマンドのUSBメモリへのコピーとバッチファイルの書き換えも必要になるため敷居が高い(?)ものにもなりますので、XP対応については封印の方針です(OSのサポート期限も迫っていますし・・・)。

Vista以降とは言ってみたものの、手元にVistaがないため筆者は動作確認ができません。もし、動作確認ができたよ、という方がいらっしゃいましたらコメントなどでお知らせいただければ助かります。

※注意
USBメモリに入れる各種ソフトウェア等のライセンスについてはここでは触れません。利用される方の利用形態、目的などを考慮してソフトウェアライセンス条項を検討した上でご利用ください。BlocksEditorの豆腐対策に使うフォントファイルも同様です。




■必要なモノ
・WindowsVista、7、8の64bit版
・PCのメモリは4GB以上推奨(検証環境では2GBでも動作しています)
・USBメモリ(1GB以上あれば大丈夫です)
AI4A-Configuratoins
GoogleAppEngine SDK for Java
JavaSE JDK(JREではダメです)64bit(Java6、7のいずれも動作すると思います)
AppInventor セットアッププログラム
・豆腐化対策用フォントファイル
・管理者権限のアカウント(USBからの実行時に必須ですので利用するユーザさんにも周知ください)

■事前準備
USBメモリを作る前に必要なファイルを準備するために次のものをPCにインストールしてください(作業が終わったらアンインストールします)。

・JavaSE JDK(JREではダメです)64bit
・AppInventor セットアッププログラム

このインストールされたフォルダ構成をUSBメモリにコピーすることになります。


■USBメモリのフォルダ構成(ドライブ名は環境によって変化します)
X:\AIPortable\AI4A                                           -(1)
                     \appengine-java-sdk-1.7.3    -(2)
                     \AppInventor                            -(3)
                     \jdk1.6.0_37                             -(4)
                     AIPortable.bat                         -(5)

(1)はAI4A-Configuratoinsを展開したものをコピーしてください。この中のファイルでは2つほどAppInventorサーバとBuildサーバの起動バッチファイルを以下のように書き換える必要があります。

■AI4A\AppEngine\startAI.cmd

REM set the location of the App Engine
set AEJSDK=..\..\appengine-java-sdk-1.7.3


■AI4A\BuildServer\launch-buildserver.cmd

REM set the location of your jarsigner
set JARSIGNERLOCATION=%JAVA_HOME%\bin\jarsigner.exe


(2)はGoogleAppEngine SDK for Javaを展開したそのままの構成のものをコピーしてください。

(3)はWindows用のAppInventorセットアッププログラムをWindowsにインストールし、C:\Program Files (x86)\AppInventorフォルダ・ファイル構成をそのままコピーしてください。

(4)はJDKをインストールした後、こちらもC:\Program Files\Java\jdk1.6.0_37フォルダをそのままコピーしてください。また、豆腐化対策フォントファイルをこのディレクトリ内のjre\lib\fontsフォルダ以下にコピーしておいてください。

(5)は起動バッチファイルです。以下にバッチファイルの内容を記載します。

■起動バッチファイル(要管理者権限コマンドプロンプト実行)
・AIPortable.bat

REM AppInventor Portable for Windows(64bit)
@echo off
NET SESSION > NUL 2>&1
IF %ERRORLEVEL% == 0 (
    ECHO 管理者として実行中. AppInventorを起動します.
    GOTO START
) ELSE (
    ECHO 管理者として実行していません. AppInventorは起動できません. 右クリックで「管理者として実行」で起動してください >&2
    PAUSE
    EXIT /B 1
)
:START
set JAVA_HOME=%~dp0\jdk1.6.0_37
set STPATH=%PATH%
set PATH=%JAVA_HOME%\bin;%PATH%
assoc .jnlp=JNLPFile
ftype JNLPFile="%JAVA_HOME%\jre\bin\javaws.exe" "%%1"
mklink /D "C:\Program Files\AppInventor" %~dp0\AppInventor
start /MIN %~dp0\AI4A\AppEngine\startAI.cmd
start /MIN %~dp0\AI4A\BuildServer\launch-buildserver.cmd
pause
rmdir "C:\Program Files\AppInventor"
set PATH=%STPATH%
set JAVA_HOME=
ftype JNLPFile=
assoc .jnlp=
taskkill /F /IM cmd.exe /T

(追記)
上記バッチファイルをGitHubで公開しました。
AIPortable.bat

バッチファイルについて簡単に説明します。

・NET SESSION > NUL 2>&1
から
・:START
まで

この部分はバッチファイルが管理者権限で実行されているかをチェックしています。管理者権限でない場合はバッチファイルを終了します。

・set JAVA_HOME=%~dp0\jdk1.6.0_37
JAVA_HOME環境変数を定義します。場所はUSBメモリ内のバッチファイルを実行しているカレントディレクトリにあるJDKフォルダになります。

・set STPATH=%PATH%
現在のPATH設定を待避します。

・set PATH=%JAVA_HOME%\bin;%PATH%
PATHの先頭にJAVA_HOME内のbinフォルダを追加します。

・assoc .jnlp=JNLPFile
・ftype JNLPFile="%JAVA_HOME%\jre\bin\javaws.exe" "%%1"

BlocksEditorを起動するJavaWebStartファイル(拡張子.jnlp)の起動プログラム関連づけ設定です。

・mklink /D "C:\Program Files\AppInventor" %~dp0\AppInventor

本来AppInventorセットアッププログラムで関連ファイルがインストールされる場所からUSBメモリ内にシンボリックリンクを作成します(要管理者権限)。

ここで「おや?」と思われる方もいらっしゃるかもしれません。AppInventorセットアッププログラムは通常32bitプログラムとしてインストールされるため、64bitOSの場合

C:\Program Files (x86)

以下にインストールされるのですが、バッチファイルでは64bitプログラム側にあるかのようにシンボリックリンクを作成しています。

実はBlocksEditorは内部でレジストリ値を検索してAppInventorセットアッププログラムのインストール位置を検出しているのですが、Portable版ではこのレジストリ値が存在しないことやそもそもProgram filesフォルダとは関係ない場所にあるため、フォルダ位置のデフォルト値が採用されることになりそれが(x86)の入らないPATHになっています。

・start /MIN %~dp0\AI4A\AppEngine\startAI.cmd
・start /MIN %~dp0\AI4A\BuildServer\launch-buildserver.cmd

AppInventorサーバとBuildサーバを起動します。

・pause
何かキーが押されるまでバッチファイルの実行を一時停止します。キーが押されると以下の後始末処理が実行されます。

・rmdir "C:\Program Files\AppInventor"
シンボリックリンクを削除します(要管理者権限)。

・set PATH=%STPATH%
・set JAVA_HOME=

PATHを元に戻し、JAVA_HOMEを空にします。

・ftype JNLPFile=
・assoc .jnlp=

JavaWebStartファイルの起動プログラム関連づけを外します。もし、すでにJava環境が導入済みの環境だとそちらの関連づけが外れてしまうので注意してください(既存設定がある場合はこれらの実行をスキップするように後日対応するかもしれません)。

・taskkill /F /IM cmd.exe /T

このバッチファイルで起動した全てのプロセスを強制終了します。これ以外のcmd.exeが実行中だった場合、道連れにされるリスクがあるので注意してください。


■動作確認
動作確認のためPCにインストールされているJavaSE JDKやAppInventorセットアッププログラムをアンインストールしてください。

PCにUSBメモリを挿し、該当ドライブのAIPortableフォルダを開きます。そして、AIPortable.batをマウスで右クリックして「管理者として実行」を使って実行します。ダブルクリックで実行した場合、管理者権限ではないのでバッチファイルはメッセージをコマンドプロンプト上に表示してPAUSEでキー入力を待ちます。適当なキーを押すとそのまま終了します。

「管理者として実行」がうまく動作していれば全部で4つのコマンドプロンプトが開き(その内2つは最小化の状態)AppInventorサーバとBuildサーバが起動されます。AppInventorサーバを起動しているコマンドプロンプトは最小化されずに開いていると思いますので、こちらで

情報: The admin console is running at http://localhost:8888/_ah/admin

というメッセージが表示されるまでブラウザからアクセスするのを待っていてください(マシンスペックなどによっては結構待たされるかもしれません)。

なお、このサーバ起動時やBlocksEditor起動時にWindowsファイアウォール設定でブロック解除の許可に関するダイアログが開きますが、必ずプライベートネットワークからのアクセスを許可するようにしてください(重要)。

Webブラウザで

http://localhost:8888/

にアクセスしてAppInventorへのログイン画面が表示されれば起動成功です。

■終了方法について
終了する時は、必ず起動時に最初に開くキー入力待ちしているコマンドプロンプトで適当なキーを押して終了するようにしてください。これはシンボリックリンクの削除などの後始末処理を実行するためです。


■利用される方へのお願いとご注意
お世辞にも完璧なPortableさを実現している訳ではないため、いくつか初心者ユーザが戸惑う部分があります(要管理者権限であることやダブルクリックで実行できないなど)。

このあたりは利用マニュアルなどを添付していただくなどしてユーザサポートをお願いできればと思います。

また、本記事に書かれている内容は管理者権限で実行されるため、重要な設定を変更することになります。それにより生じた不都合については一切責任を負えませんのであらかじめご了承の上ご利用ください。



■検証済み環境の情報
・Windows8 Pro 64bit CP版
・Windows8 Enterprise 64bit評価版
・Windows7 HP 64bit

他の環境での動作報告をお待ちしています。

動作しない場合は、どんなメッセージが表示されているかなど出来るだけ多くの情報をいただけると対応を検討しやすくなりますのでご協力よろしくお願いします。

その他、記事中の誤りなどがありましたらコメントにてお知らせいただければと思います。


0 件のコメント:

コメントを投稿

おすすめ書籍