スマホは携帯端末なので本体のメモリーが少ない。なので容量を圧迫するアプリはSDカードにインストールするのが一般的のようだが、なぜか作ったAIRアプリ「Mersenne」ではできない。AdobeAIR本体(Mersenneを動かすためのプラグイン的なもの)ですら移動できるのにっ!
Adobeのヘルプを見に行くと何やらパーミッションとやらを設定しないとならないらしい。
Flash CS5.5のファイルメニュー>AIR for Android 設定>権限の「アプリケーション記述ファイルへの権限およびマニフェストの追加を手動で管理します」にチェックを入れる。こうするとパブリッシュ(apkファイル生成)時にXMLファイルを上書きしなくなる。ただし今後はFlash上で設定を変更してもバージョンナンバーやその他もろもろが変更されなくなる。バージョンナンバーを変更したり権限を追加/削除する際は自分でXMLファイルをいじらないといけないので注意が必要。もちろん編集の度にバックアップは忘れずに。
あとはXMLファイルをUTF-8/CR・LF対応のテキストエディタ(私はTeraPadを愛用)で開いて直接編集すればいいようだ(ちなみにFlashで生成されるXMLはUTF-8/改行コードLF)。
私の作ったMersenneはAdSence表示のため「ネットワーク通信」の権限を許可しないとならないので、
<android>
<manifestAdditions>
<![CDATA[<manifest>
<manifest android:installLocation="preferExternal"/>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
]]>
</manifestAdditions>
</android>
と、<uses-permission~> を残したまま <manifest> ~ </manifest> 間にまんま追記してみた。
しかしパブリッシュし直してもSDカードに移動できない。なぜか動作確認用の中華タブレットはできるようになったのだが、相変わらずHTC EVO WiMAX ISW11HTでは「SDカードに移動」のボタンが押せなくなっている。ぐぬぬ。
モヤモヤしたまま仕事に出かけ、帰宅後に腕組みしながらXMLファイルを開いて眺めていたらあることに気がついた。なんか<manifest>がカブってね? 試しに以下のように記述し「preferExternal」の後ろのスラッシュも抜いてみた。
<android>
<manifestAdditions>
<![CDATA[
<manifest android:installLocation="preferExternal">
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
]]>
</manifestAdditions>
</android>
今度は無事SDカードへのインストールができた!なんだSDカードインストールの許可を与えるためのinstallLocationをmanifestの属性として書かないとダメだったのね・・・XMLは独自ルールでいくらでも書けるからキライだー。
それはそうと、こないだようやくAndroid SDKを開発マシンにインストールしてみた。いままでFlashのみでapk生成して実機でテストしていたので。スマホ歴1年でJavaすらロクにいじくったことのない私だが、そんなんでも独学でAIRアプリが開発できてしまうFlash CS5.5おそるべし。