androidでMultiple APKと言う機能が、android 2.3からサポートされています。これを使って、他にリリースしているアプリにバンドルする形で新しい別のパッケージをインストールできないかを考えていたのですが、、どうやら難しそうな感じで、思っていたようなMultipleっぷりではなかった…と言う話。
やりたいこと
既にリリースしている自社のサービスがある前提。例えば100万本くらいインストールされているアプリに対して、新サービスのパッケージAPKをMultiple APKみたいな機能を使って、まとめて100万台に対して配布したい!!と言うのがやりたいこと。思えば虫のいい話ですが。。以下の4つを案として調べてみた。
結論
残念ながら現在のandroidの仕様では、複数の関係ないAPKを同時に入れ込むようなパッケージングは技術的に難しそう。当初の予定通り、別アプリから強制的に画面遷移を伴ってインストールさせるなど、個別にインストールする方法でいくしか今は無いように思う。。残念。
と思ったんだけど、制約さえ回避出来るのであればもしかして出来るのでは、と思った。詳しくは以下。
Android Multiple APKについて
android2.3により実装された、複数APKを1つのパッケージとして扱う方法。一番有望だったが、以下の制限があるため今回の利用には適さないと思われる。
「制限:同一パッケージ名としてリリースする必要がある」
この機能は本来、デバイス機能の違いをAPK個別で吸収し切れない場合の回避策として提供されている。そのため前提として同じ機能を持つパッケージの、別バージョンとしてのみ複数apkが許可されている。今回に当てはめると、例えば旧アプリA(net.mantol.appA)にバンドルしようとすると、新アプリC(net.mantol.appC)を旧アプリAと同じパッケージ名で提供し、旧アプリBにバンドルする場合は旧アプリB(net.mantol.appB)と言うパッケージ名で新アプリCを提供する必要が出て来る。
あれ、、ここまで書いておいて何だけど、弊社の場合は以下の制限があるからこの方法は無理だと言う結論に至った。
「制限:A, B, Cのアプリは別パッケージ名として存在しており、変更不可」
これさえクリア出来れば、本来の使い方とは違いそうだけど、出来るんじゃないか。。誰かやってみたら教えて><
- Multiple APK Support
- Multiple APKにの仕様書(原典)
- Androidマーケットが複数APKをサポート(見た目以上に重要)
- テッククランチの記事。Multiple APKがどういう機能かの説明がある。
- ソフトウェア技術ドキュメントを勝手に翻訳 4. マルチ APK サポート
- 原典の日本語訳その1。
- Multiple APKサポートを訳してみたよ
- 原典の日本語訳その2。
- Multiple APK Supportで、複数のバイナリをAndroid Marketに入稿したらどういうことになるのかわからなかったので、「手探りでやってみた」
- 使用してみた例。この場合は、本来のMultiple APKの使い方をしているため問題なく出来ている。
PACKAGE_INSTALLパーミッションを使う
androidのpermissionの1つに PACKAGE_INSTALLパーミッションと言うものがある。例えばメーカーのマーケットアプリ等は、アプリから強制的にインストールさせる機能を持っている。調べた結果、どうやらgoogle本体やメーカー各社は特殊な権限(signatureOrSystem)を持っておりそのアプリからしか上記のPACKAGE_INSTALLパーミッションは利用出来ないようになっているらしい。。メーカーの協力があればこの機能は利用出来る可能性がある。(例えばメーカーのマーケットで他のアプリを入れた場合には、新アプリもまとめてインストールするなど。)
- Androidのコマンドとか権限とかの話
- signatureOrSystemなど、権限についての話が書いてある。
- Activity の Permission 一覧
- androidアプリで使える権限の一覧が書いてある。
- 勘違いしたくないAndroidセキュリティ「アプリインストール」に関する5つのポイント
- 上記パーミッションの使われ方など。
- Android/J.SMSHider.A(McAfee)
- こういうパーミッションは、一歩間違えるとウィルス化してしまう例。
- [http://jp-erteam.nprotect.com/11:title=[資料]FastRacing ゲームアプリケーション再パッケージングを通したSmart Phone情報流出]
- 上記と同様の、ウィルス例。
ADBを使う
3, 4はは、もはや本来の意図的に使わないことを分かりつつ調べてますが。。ADBとは、androidの開発ツールキットに付属しているデバッグ用のツールのこと。ADBを使うことでandroid単体では出来ない操作が色々出来たりする。ADB経由でアプリのインストールを行うことはどうやら出来そうだが、そもそもUSB接続等で利用する必要があるため、ユーザに配布するパッケージの自動インストールには使えなさそう。。そりゃそうだ。
- Android ADB Shell を使うためには(USB接続含む)
- adbの実際の使い方。
- adb shell を使ってアプリをまとめて連続インストールやアンインストールやコピーをする方法
- コマンドラインからなら出来るかも?と言う実例。
ルート化手法を使う
androidのroot権限をアプリに渡すことで、大体のことは出来るようになります。恐らく今回の場合も出来るようになりそうですが、ルート化したandroidはメーカー保証が受けられないなど、かなりブラックな方法のため今回の検討からは外さざるを得ない。。またメーカー側は制御をかけてアプリのルート化を防止する方向で動いているようである。(危険なので、そりゃそうだと思います。)
- root化可能なAndroid端末一覧
- ルート化出来る端末と、方法の一覧。
- root化用アプリ
- ルート化することの出来るアプリの例。
- Galaxy S2はGingerBreakでROOT化出来なかったらしぃ
- タイトルは逆ですが「出来ました」と言う例。Galaxy S2でのルート化作業の実例。
提供元不明アプリについて
今回の件と付随するが、別サーバからのインストールには「提供元不明のアプリ」の許可が必要になる。マーケット系アプリはこれを「ON」にさせていますが、セキュリティ的には危険な行為のはず。。今後変わっていくのか?世の中のandroidのうち、何%が「ON」になっているんだろう。