AndroidアプリのLicense Verification Library (LVL)のエラーについて
Androidアプリの違法コピーを防ぐため、Android Marketでは 「License Verification Library (LVL)」 というライセンス認証ライブラリを使用して認証処理を行います。
2012/3/1 追記
電子書籍「Androidアプリ開発者のための不正使用対策」の販売を開始しました!
大変悪質な認証回避ツール(LVLを含む)対策、改竄検知方法、LVL使用時の注意点等も記載されています。(危険な内容の為、Webでは公開できません!)
2012/08/23追記 Androidアプリの改造ツールの詳細と手口について(違法コピー天国の現状報告) < Android開発者サイトに記載のあるLVL実装方法は改造ツールを使えば数秒で回避する改造が行えますので、注意して下さい。
LVLの詳細、及び実装方法は以下の公式ページを参照して頂くとして、ここでは、認識しているLVLのエラー内容について情報共有、及び備忘録を兼ねて記載します。
なお、LVLエラーの内、ライセンス無しエラーについては公式ページにも記載されているレベルの基本的なエラーなので、説明を省きます。
認識しているLVLエラーは以下の通りです。
- LVL自体が自爆する
- Android Marketアプリが原因でライセンス不許可になる
上記エラーはIS01にて確認したものですが、auが配布しているソフトウェアアップデートをインストールする前はLVLの自爆、インストール後からはAndroid Marketアプリが原因のエラーが発生する様になりました。
つまり、エラー続きという事です(苦)
– LVL自体が自爆する –
※このエラーはAndroid Marketアプリを最新にしてある場合は発生しなくなった様です。 しかし、考慮して置いた方が良いかも知れません。
古いAndroid Marketアプリの場合、通信機能が無効になっている時には以下の様な例外が発生してLVL自体が自爆する事がありました。
自爆するとコールバックが返ってこない、または返ってくるまで時間がかかるという状態に陥ります。
java.lang.RuntimeException: Handler{2fa47a58} sending message to a Handler on a dead thread
発生箇所は以下の辺りです。(古い情報なので細かい場所は忘れました)
at com.android.vending.licensing.LicenseChecker$ResultListener.verifyLicense
プログレスダイアログなどを表示していた場合、ダイアログのキャンセルを認めていないと自爆により表示されっぱなしでエンドユーザーはお手上げ状態になる可能性があります。
そうならない為にも、プログレスダイアログなどはキャンセルを認める設定にして置いた方が無難です。
– Android Marketアプリが原因でライセンス不許可になる –
こちらのエラーはAndroid Marketアプリが原因のため、少しやっかいです。
大抵の端末の場合、Android Marketアプリは自動更新になっています。そのため、勝手にアップデートし、エラーを出す様に改悪されます。
確認しているのは「サーバがエラーを発生しました。」ですが、「マーケット(com.android.vending)が予期せず停止しました。やり直してください。」というエラーもあるようです。
Android Marketアプリがエラーを出す状態になると、確実にライセンス不許可となり、以下のメソッドが呼び出されます。
com.android.vending.licensing.LicenseCheckerCallback#dontAllow()
このメソッドは、通信機能が無効になっている際にも呼び出されるため、何が原因でエラーになっているのかがわかりにくいという問題があります。
Android Marketアプリがエラーを出す原因としては以下のものがあります。
- Android Marketアプリ自体が自動更新されてエラーが出る状態になっている
- 設定の「アカウントと同期」のGoogleアカウントのパスワードが入力されていない
「Android Marketアプリ自体が自動更新されてエラーが出る状態になっている」場合、設定の「アプリケーション」から「マーケット」アプリを選択し、「アップデートのアンインストール」ボタンを押してエラーを出すアップデートをアンインストールすれば直る可能性があります。
このエラーを出す状態の時にAndroid Marketアプリを起動すると必ずエラーダイアログが出てAndroid Marketに接続ができなくなっている様です。そのダイアログの「再試行」ボタンを押しても改善される事はありません。
「設定の「アカウントと同期」のGoogleアカウントのパスワードが入力されていない」については、上記アップデートのアンインストールと関係がありそうではあるのですが、何かのきっかけにより「アカウントと同期」のパスワードが消去される事があるようです。
お陰で何度もパスワードを入力させれられました(苦)
この状態になっている時に「マーケット」アプリを立ち上げると真っ白なまま何も出来ず、「Back」キーでアプリを終了させようとすると一瞬だけパスワード入力ダイアログが表示されます。
– 最後に –
このLVLはオプションであり、実装する必要はありません。しかし、Android 2.2からはSDへのコピーができるようになっており、加えて、現在のコピープロテクトが近々廃止される予定のため、LVLの使用を考慮して置いた方が良いかも知れません。
散々コピーされた後では遅いですから。
上記以外にもLVLのエラーはあるかも知れませんが、何にしても使いづらく、開発者に負担を強いるライブラリなので、色々なケースを想定して置いた方が良いかも知れません。
他にも何か有益な情報がありましたならば、Twitter( @SkyArts_dot_com )の方でも構いませんのでコメントを下さい。
SkyArtsでは、LVL、Androidアプリなど、スマートフォンアプリに関する各種ご相談なども承っております。