試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ディストリに依存しないAIRアプリケーション実行方法

(2015/1/8)GNU/Linux向けのAdobe AIRは廃止され、本記事の内容も古い内容となっている。

「Adobe AIR 1.5のインストーラ使用時の使い方」はAdobeが提供するインストーラを使用した場合の使い方となるが、「Adobe AIR 1.5のインストール(準備とインストーラ関係)」で扱っているAIRのインストーラが使えないディストリの場合、この方法では使えない。
しかし
http://web.archive.org/web/20080920025032/http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=72&catid=677&threadid=1349878&enterthread=y
の情報により、別途配布されているSDKのパッケージに含まれるbin/adlで.airファイル(ZIP圧縮されている)内のMETA-INF/AIR/application.xmlを開くことでアプリケーションの起動ができることが分かったため、デスクトップ環境上の関連付けの仕組みを利用してNautilusなどのGUIファイルマネージャから.airファイルを開くことでそのAIRアプリケーションが起動できるようにするためのスクリプトと関連付け設定ファイル群を作成した。

  1. 準備
  2. スクリプト
    1. 使い方
  3. デスクトップ環境への関連付け
    1. 起動ファイル
    2. ファイルの種類
    3. 登録・反映作業
  4. 制約

準備

SDKのダウンロードページからGNU/Linux向けのSDKをダウンロード後/opt/AdobeAIRSDK/へ展開しておく。

ファイル情報: air_1.5_sdk.tbz2
項目値
ファイルサイズ19,403,150バイト
MD55dced4b26ec1606d794bc72cfd2cafb0
SHA-10a5dc95685103c81d25b559b15e3858034a58128
(2009/8/31)2009/8/31の時点では以下のファイルとなっている。
ファイル情報: AdobeAIRSDK.tbz2
項目値
ファイルサイズ19,686,708バイト
MD5f1a3618595216fd3e4b99a16fb404a93
SHA-1d5687b41a92721cbb24aa3d34309a317f5eaf033
この他、下のスクリプトを実行するにはZenityとunzipコマンドが必要。

スクリプト

[任意]ファイル名: AIRRunner.sh ライセンス: MIT
#! /bin/bash

# AIRRunner.sh: Adobe AIR Application Runner
#               for Adobe AIR 1.5 on GNU/Linux
# Licensed under MIT
# (C) 2009 kakurasan
# version 20090831

# Requirements:
#  * Adobe AIR SDK (AdobeAIRSDK.tbz2), unpacked to /opt/AdobeAIRSDK/
#  * unzip
#  * zenity

# THANKS:
#  * http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=72&catid=677&threadid=1349878&enterthread=y#4911388

AIRSDKDIR=/opt/AdobeAIRSDK
ADL=${AIRSDKDIR}/bin/adl
PATH=/bin:/usr/bin

die()
{
  zenity --error --title "AIRRunner: Error" --text "${1}"
  exit 1
}

# check
if [[ ! -x /usr/bin/zenity ]]; then
  echo "Error: zenity is not installed"
  exit 1
fi
[[ -x /usr/bin/unzip ]] || die "unzip is not installed"
[[ -x "${ADL}" ]] || die "Cannot find adl (SDK not installed)"

# input file
if [[ ${#} -eq 1 ]]; then
  # relative path ==> absolute path
  AIRFILE="$(cd "$(dirname "${1}")" && pwd)/$(basename "${1}")"
else
  AIRFILE=$(zenity --file-selection --title "Open .air file")
  if [[ ${?} -ne 0 ]]; then
    # cancel
    exit 0
  fi
fi
[[ -f "${AIRFILE}" ]] || die "File \"${AIRFILE}\" does not exist"

# tmpdir
TMPDIR="$(mktemp --tmpdir -d AIRRunner.XXXXXXXX)"
[[ ${?} -eq 0 ]] || die "cannot create tempdir"

# unpack
cd "${TMPDIR}"
if ! unzip "${AIRFILE}"; then
  rm "${TMPDIR}" -fr
  die "Cannot unzip \"${AIRFILE}\""
fi
if [[ ! -f "${TMPDIR}"/META-INF/AIR/application.xml ]]; then
  rm "${TMPDIR}" -fr
  die "Cannot find \"META-INF/AIR/application.xml\" in \"${AIRFILE}\""
fi

# run
"${ADL}" -nodebug "${TMPDIR}"/META-INF/AIR/application.xml "${TMPDIR}"

# cleanup
rm "${TMPDIR}" -fr

# EOF

(2009/8/31)一時ディレクトリの処理など細かい部分を調整
このスクリプトは、一時ディレクトリに.airファイルの中身を展開後[SDKのディレクトリ]/bin/adlでアプリケーションを実行し、終了後に先ほど展開した一時ファイル群を掃除するという動作をする(特に難しいことはしていない)。

使い方
  • 引数を付けずに実行した場合: ファイル選択ダイアログから.airファイルを選択
  • 引数を付けて実行した場合: 引数の.airファイルを実行

デスクトップ環境への関連付け

以下のファイルを全て適切な場所に配置し、本記事後ろの「登録・反映作業」に書いたコマンドを実行する必要がある。

起動ファイル
ファイル名: ~/.local/share/applications/airrunner.desktop(一般ユーザ・自分用) もしくは /usr/share/applications/airrunner.desktop(全ユーザで使用)
[Desktop Entry]
Name=Adobe AIR Application Runner
Comment=Adobe AIR Application Runner
GenericName=Adobe AIR Application Runner
Exec="[AIRRunner.shの場所(絶対パス)]"
Type=Application
Terminal=false
MimeType=application/vnd.adobe.air-application-installer-package+zip;
Categories=X-None;

スクリプトを[ホームディレクトリ]/bin/以下に配置する場合、Exec行は「/home/[ユーザ名]/bin/AIRRunner.sh」のようにする。

ファイルの種類
ファイル名: ~/.local/share/mime/packages/AdobeAIR.xml(一般ユーザ・自分用) もしくは /usr/share/mime/packages/AdobeAIR.xml(全ユーザで使用)
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

  <mime-type type="application/vnd.adobe.air-application-installer-package+zip">
    <comment>Adobe AIR Application</comment>
    <comment xml:lang="ja">Adobe AIRアプリケーション</comment>
    <glob pattern="*.air"/>
  </mime-type>
</mime-info>

中身はZIPなのでマジック*1「PK」を条件に付け加えてもよいかもしれない。

登録・反映作業
設定反映のためのコマンドは2つ実行する。「アプリケーションの実行」ダイアログや端末にコピペするとよい。
(一般ユーザ・自分用)
update-desktop-database ~/.local/share/applications/
update-mime-database ~/.local/share/mime/
(全ユーザで使用)
gksudo update-desktop-database /usr/share/applications/
gksudo update-mime-database /usr/share/mime/

ここまでを完了すると、NautilusなどのGUIファイルマネージャから.airファイルをダブルクリックするなどの操作でAIRアプリケーションが起動できるようになる。

制約

以下はSDKパッケージ内のbin/adlを利用する形において避けられない制約となる。
  • Webブラウザ上でFlashクリックからAIRアプリケーションをインストールすることはできない(する必要がない)ため、HTMLページのソースを表示して、.airファイルのURLを調べてから直接ダウンロード・保存する必要がある。
  • アップデート機能のあるソフトウェアでも更新はできず*2、新しいバージョンが出たと通知があっても、配布サイトから直接最新バージョンを入手して、そちらの.airファイルを開くことで更新を行うことになる。

*1:ファイル先頭にある、ファイル形式固有の文字列

*2:メッセージ「Error: This method is not supported if application is launched from ADL.」が端末に出る