Adobe Airで作成したAndroidアプリをx86アーキテクチャに対応させるポイント

Pocket

ASUSのFonepad 7やDellのVenue 8をお持ちの方々は、Google PlayでAdobe Airをインストールしようとすると次のようなエラーが発生すると思います。
パッケージファイルが無効です。 アプリケーションのインストール中に不明なエラーコードが発生しました:「-24」

このエラーは、Google Playで公開されているAdobe AirがASUSのFonepad 7やDellのVenue 8などのIntel Atom(x86アーキテクチャ)CPUに対応していないために発生します。x86アーキテクチャのAndroid機種でAdobe Air上で動作するアプリを使用する場合、アプリ側が対応を行っている必要があります。もしあなたが該当機種をお使いでアプリのインストール時に上のエラーが発生した場合、インストールをあきらめるしかありません1 (以降では、Intel Atom CPUの端末の事をAtom端末、それ以外の大多数の端末の事をARM端末と記述します)。

今回、Adobe Airを使用したアプリをAtom端末に対応させる方法を紹介します。Adobe Airを使ってAndroidアプリを作っている方はAtom端末にも対応させてみてはいかがでしょうか。

ちなみに、Adobe Airの開発経験のある方を対象とするので、細かい点は省略して要点を絞って記載します。

Native Extensionのパッケージング

Native Extentionを使用している場合、xmlの定義にAndroid-x86を追加します。ARM端末とAtom端末とで処理を分ける必要がない場合でも行います。

<extension xmlns="http://ns.adobe.com/air/extension/3.6">
  <id>xxxxxID</id>
  <versionNumber>1</versionNumber>
  <platforms>
    <platform name="Android-ARM">
      <applicationDeployment>
        <nativeLibrary>xxxxx.jar</nativeLibrary>
        <initializer>aaa.bbb.ccc.Extension</initializer>
        <finalizer>aaa.bbb.ccc.Extension</finalizer>
      </applicationDeployment>
    </platform>
    <platform name="Android-x86">
      <applicationDeployment>
        <nativeLibrary>xxxxx.jar</nativeLibrary>
        <initializer>aaa.bbb.ccc.Extension</initializer>
        <finalizer>aaa.bbb.ccc.Extension</finalizer>
      </applicationDeployment>
    </platform>
    <platform name="default">
        <applicationDeployment/>
    </platform> 
  </platforms>
</extension>

パッケージング時、adtコマンドの引数に”-platform Android-x86″オプションを追加します。

SET PLATFORM_ANDROIDARM= -platform Android-ARM -C targetdir\ .
SET PLATFORM_ANDROIDx86= -platform Android-x86 -C targetdir\ .
SET PLATFORM_DEFAULT= -platform default -C default\ .

adt -package -target ane filename.ane extension.xml -swc filename.swc %PLATFORM_ANDROIDx86% %PLATFORM_ANDROIDARM% %PLATFORM_DEFAULT%

Airアプリのパッケージング

今までは以下のようなパラメタでadtコマンドを実行していたと思います。

adt -package -target ane (略) appname.apk application.xml (略)

これからも、ARM端末向けのパッケージは今までと同様のコマンドで作成します。これに加え、Atom端末向けに以下のコマンドを実行します。

adt -package -target ane -arch x86 (略) appname_x86.apk application_x86.xml (略)

つまり、ARM端末用とAtom端末用とでapkファイルを二つ作成します。ちなみに、application.xmlとapplication_x86.xmlの内容は、versionNumber以外は同一で構いません。ただし、application_x86.xmlのversionNumberの方が大きくなるように注意してください。
applicationarm.xmlの例

<?xml version="1.0" encoding="utf-8" ?> 
<application xmlns="http://ns.adobe.com/air/application/3.6">
	<id>appliID</id>
	<versionNumber>0.6.1</versionNumber>
(略)

applicationx86.xmlの例

<?xml version="1.0" encoding="utf-8" ?> 
<application xmlns="http://ns.adobe.com/air/application/3.6">
	<id>appliID</id>
	<versionNumber>0.6.2</versionNumber>
(略)

この時、Atom端末用のapkファイルの方が10MB近くファイルサイズが大きくなります。これはAtom端末用のapkファイルにはAdobe Airランタイムが必ず同梱されるためです。

Google Playへの公開

Google Play Developer Consoleからapkファイルを公開します。この際、アドバンストモードに切り替えた後、前の手順で作成した二つのapkファイルを両方ともアップロードします。
devecon
Google Playでは、対応している端末が使用できるapkのうち、もっともversionNumberが大きいものをダウンロードするという動きをします(これら一連の機能をMultiple APKというらしい)。
ちなみにx86アーキテクチャのCPUはx86とARMの両方に対応しているという判定になるようです。そのため、もしARM端末用APKファイルのversionNumberの方を大きくした状態でAtom端末でダウンロードするとARM端末用APKファイルをダウンロードしてしまうため、インストール時にエラーが発生します。

まとめ

  • Google PlayのAdobe AirはAtom端末には対応していない
  • Native Extensionのパッケージング時にx86を指定(extension.xmlとadtコマンドの引数)
  • APKのパッケージング時にARM用とAtom用の二つのAPKファイルを作成する。この際、versionNumberはAtom用の方が大きくなるように注意する
  • Google PlayにはARM用、Atom用 両方のAPKファイルを登録する

ずいぶん端折ったので、わからない事が多々あると思います。遠慮なく聞いてくださってけっこうですし、参考サイトにはすべての情報が掲載されています。あと、もし誤りがあればご指摘いただけると助かります。

<参考サイト>

Pocket

  1. Adobeがもうちょっと気の利いた対応を行ってくれれば解決するかも知れません []

コメントを残す

メールアドレスが公開されることはありません。