ライセンス検証ライブラリ(LVL)を有効にしたばかりのJavaで記述されたアプリケーションがあります。起動時に、LVLを呼び出してGoogle Playに「電話をかけ」、アプリが適切にライセンスされていることを確認して、アプリがアクションを実行できるようにします。
このコードは、さまざまな応答とさまざまなデバイスでテストされており、機能します。1つのデバイスを除いて。このデバイスでは、サービスにバインドできないというエラーで継続的に障害が発生します。
問題のある行は、GoogleがLVLSDKで提供するLicenseChecker.javaの一部です。
boolean bindResult = mContext
.bindService(
new Intent(
new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
Base64文字列には「com.android.vending.licensing.ILicensingService」が含まれています(おそらく弱い形式の難読化を除いて、なぜエンコードされているのかわかりません)。
このデバイスは、テスト用にオンラインで購入し、カスタムファームウェアでフラッシュした安価なタブレットです。何らかの理由で「com.android.vending.licensing.ILicensingService」が適切に処理されないか、まったく処理されない可能性があり、このメッセージが表示されます。
また、顧客が所有する他のデバイスにもこの障害がある可能性があります。この状況で、タブレットの問題についてアプリのせいにしないように、ある程度意味のあるエラーメッセージを顧客に伝えたいと思います。
プロセスディレクトリを探すか、名前付きインテントを処理するサービスを見つける方法を考えています。それは可能ですか?もしそうなら、どうすればそれを実行できますか?アプリが実行されない理由をできるだけ正確にユーザーに伝えることができれば、多くの苦痛を軽減できます。