AIR for Android のパッケージ名から「air.」を削除する

By | 2012年8月2日

AIR for Android 設定
AIR を利用してアプリを開発すると、パッケージ名の先頭に自動で「air.」が付加されますが、今回はこの「air.」を削除してみようと思います。
が、少々ネイティブ開発の知識が必要になり、コマンドラインを使用することになるので面倒かもしれません。

●Adobeの公式説明を見てみる
パッケージ名の元になるアプリケーションIDについて、AIRの一般設定のページに説明があります。また、「注意」の部分にアプリケーションIDを変更するための手順を紹介しているページへもリンクもありますので、これをベースに進めて行きます。

●変換前の準備
手順1、2では、Android SDKとJDKをダウンロードします。
この辺はAndroidの開発環境を整える場合と同じなので情報はたくさんあります。ダウンロード後はパスの設定をお忘れなく。

3については、このページの手順に従うとファイル変換の際に必要になるのですが、これを使わなくても行けそうだったので省略します。

4、5は使用しますので、ダウンロードしておきます。
5のapktoolですが、apktool-install-それぞれのOS-r04-brut1.tar.bz2 と apktoolX.X.X.tar.bz2 のどちらも必要になります。両方とも解凍しておくのですが、apktoolX.X.X.tar.bz2 は apktool.jar の状態にする必要があり、ソフトによっては jar をさらに解凍してしまう場合もあるのでご注意下さい。

OSによって拡張子は異なると思いますが、解凍してできた aapt、apktool、apktool.jar はパスの通った場所に置いた方が後々ラクです。
4のsmaliはまだ出番なしです。

●apkの展開
準備ができたところで作業開始です。ここからはコマンドラインの作業がメインになります。
まずはapkを展開します。apkも仕様上はzipと同じなので、色々な解凍ソフトで展開できるのですが、ファイル内容が変わってしまうので apktool を使用します。
ちなみに、ここに書く手順は途中までAdobeのページと若干異なりますが、出来上がりは同じです。

展開したいapkがあるフォルダに移動して、以下のコマンドを実行します。
この時、apktool、apktool.jar が同じフォルダに無いと実行できませんのでご注意下さい。

apktool d ”apkファイル名”

実行すると、apkファイルと同階層に同じ名前でフォルダが作成され、中身が展開されます。

●マニフェスト修正
展開された AndroidManifest.xml 内の manifest タグ内の package から air. を削除します。

●smali ファイル修正
展開された smali/air フォルダ以下の全ての.smaliファイルのパッケージ名を air.無しのものに修正します。
AppEntry.smali は修正箇所が特に多いと思います。

修正完了後は、ファイルを新しい場所に移動します。
air.com.cda244.sample.rmair から air.を削除して com.cda244.sample.rmair にする場合、
展開フォルダ/smali/air/com/cda244/sample/rmair フォルダにあるファイルを、
展開フォルダ/smali/com/cda244/sample/rmair フォルダにごっそり移動させます。
空になったairフォルダは削除して構いません。

●素材リスト作成
ここから先は展開したフォルダ内でコマンドを入力します。

aapt というツール(コマンド)を使用して、使用する素材のリストを作成します。
改行されているかもしれませんが、実際は1行です。

aapt package -f -M AndroidManifest.xml -F resources.arsc -I ”Android SDKの場所”/platforms/android-XX/android.jar -S ./res

android-XX の部分ですが、AndroidManifest.xml 内のapplicationタグに android:hardwareAccelerated という属性がある場合、XX に11以降を入れないとエラーが出ます。Android 2.2の8など、11未満を設定したい場合はこの属性を削除します。

実行後、resources.arsc というファイルが作成されます。

●dexファイル作成
Androidで動作する dex 形式のファイルを作成します。

java -jar smali.jar -o classes.dex smali/

しばらく放置していた smali.jar を使用します。バージョンによってはsmali-1.X.X.jar などとなっているかもしれません。上の例では、作業フォルダ(apktoolで展開したフォルダ)内にsmali.jar を配置しましたが、参照できる所であれば大丈夫です。

実行後、classes.dex というファイルが作成されます。

●ひとまずapkにまとめる
apkを作成するのに必要なファイルが用意できましたので、apkbuilder を使用してapkを作成します。
apkbuilder は Android SDK 内のtoolsに含まれています。

apkbuilder rmair.apk -u -z resources.arsc -f classes.dex

実行すると、「このツールは廃止予定です」とアラートが出ますが、apkはちゃんと作成されます。
さて、apkはできたのですが、まだ実行形式としては不完全です。

●アセットを追加する
今のapkにはAIRで使用している外部素材やアイコン等が含まれていないので、これらを追加します。
assetsフォルダをまとめて追加します。

zip -u rmair.apk -r assets

●署名する
署名をしないとインストールできないので、署名します。

jarsigner -verbose -keystore ”キーストア” c1.apk ”キーの別名(エイリアス)”

AIR でパブリッシュする際の.p12とは異なるので、ここで初めて作る人もいるかもしれません。
eclipseを利用すれば、apkをエクスポートする際に流れで作る事ができて簡単ですが、そうで無い場合はkeytoolを使用してキーを作ることになります。
キー作成については、省略しますが、Android開発関係で検索するとすぐに見つかると思います。

●最適化
これが最後の最後です。apk を zipalign で最適化します。
最適化することで、動作速度やメモリの使用効率が良くなったりといいことずくめです。

zipalign -v 4 rmair.apk rmair_2.apk

これでやっとパッケージ名から「air.」を消した rmair_2.apk が出来ました。

●おわりに
「air.」を消す、ということですが、パッケージ名を変更する、という事まで広げて考えると、以下の様な場合に使えるかなと思います。

  • URLに「air.」を入れたくない。
  • 有名アプリを自分のIDで出s ←もちろんダメです。

また、動作について、パッケージを名を変更してもアプリ単体の動作は問題ありませんが、別のアプリと連携する場合に、パッケージ名を埋め込んでし まっていると不具合が起こる可能性がありますので、その点はご注意下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です