PlayマーケットからAPK以外をダウンロードしてみる
LVL (Licence Verification Library)は、Playストアから落としたアプリかどうかをチェックする機能。
http://developer.android.com/guide/google/play/licensing/index.html
でもLVL自体が欲しいわけじゃなくて、APK Expansion Fileを使いたいだけだったりします。Expansionは、APK (アプリケーションパッケージ)に入りきらない付属ファイル等をPlayストアに上げさせてくれるもの。
Expansionは、ZIP形式になっていて、複数個を上げるのに対応しています。
いろいろ準備
http://developer.android.com/guide/google/play/licensing/setting-up.html によると、Playストアに開発者登録している場合には、「プロフィール」から「公開鍵」が得られます。これはLVLで必要になるのでメモ。
ライセンスライブラリとダウンロードライブラリは SDK Manager から落とせます。
落としてもjarでなく、ソースが来ます。(SDK)/extras/google/{play_licensing, play_apk_expansion} が必要。自分のワークスペースに複写して、プロジェクトをインポートしてやった方がいいかも知れない。
eclipseを立ち上げた後の作業
src/src と srcフォルダが重なってたり、res/res と resフォルダが重なってたり、といくつかおかしいところがあります。
ここは黙ってファイルを移動させるのがおとなというもの。それでうまくいきます。
次に、プロジェクトごとにライブラリ指定をやりなおします。そのままだとパスがおかしいので、プロジェクトのプロパティの"Android"でいじります。
また、デフォルトではAnrdoid 4のSDKを読むようになっていて、もっと低いのに対応させたいと思って、古いは新しいを兼ねるだろ、とSDKのバージョンを落とすと、なんかいろいろ問題が出るので、ここは何もしないでおくのが得策。
ダウンローダライブラリ
ダウンローダライブラリには com.example.expansion.downloader 配下のクラス SampleAlarmReceiver, SampleDownloaderActivity, SampleDownloaderService を参考にというか自分のプロジェクトに放り込みます。
次にSampleDownloaerActivityのxAPKSを適切なのに書き換える。SampleDownloaderServiceのBASE64_PUBLIC_KEYは、さきほどPlayストアの開発者プロフィールに出てきたあれをコピペします。SampleDownloaderServiceのSALTは適当に変えます、ていうか
static { SALT = new byte[20]; SecureRandum rand = new SecureRandum(); rand.nextBytes(SALT); }
とやって、都度異なるSALTになるようにしています。…本当にこれで大丈夫なんだろうか…?
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
あたりのパーミッションがダウンローダには必要。本体ではINTERNETとWRITE_EXTERNAL_STORAGE以外は使ってないじょ。
ライセンス確認ができない
とりあえず自分用に作り変えてコンパイルして、
完全にはまったのが、リソースがみつからんとかなんとか怒られた時。デバッガで追っていくと、ライセンスが取れてないというもの。
で、どこかでHTTPアクセスの記述があるだろうと思ったけれども見つからない。いったいどうやってんだよこれ、と思ったところ、http://y-anz-m.blogspot.jp/2011/03/androidapplication-licensing.html に
License Verification Library (LVL) は Android Market クライアントとライセンスサービス間のライセンスに関連したやりとり全てをハンドルする
という記述が。
えー、ときどき手持ちの端末はIS-03だと申しておりますが、こやつはバッテリ容量が少なくて、「バックグラウンドデータ」のチェックボックスを外してるんですね。それで、Playストアを開くと、バックグラウンドデータが無効になってるから実行できません、とか言われるんですね。
これだこれ。バックグラウンドデータが無効になってるから、Playストアアプリが動かないからだ。
ということで、「バックグラウンドデータ」を有効にする。
おー、動いた。