あひる裁縫店

好きなこと、技術のこと、くだらないこと

【Android】Google Play Servicesで特定の端末のみエラーが発生

Googleが提供しているライブラリを使って、QRコード認識機能を作っていた時に、
認識できない端末を発見(HUAWEI P10Lite Nexus 5X)

アプリが落ちるわけではなく、カメラを使ってQRコードを認識しようとしても、
全く認識しない...

最終的にどちらも違う方法で認識できるようになったが、
そのあとエラーを再現できなくなりました。

この方法が正しいのは不明ですが、やったことをまとめます。

HUAWEI P10Lite の場合

Local module descriptor class for(Googleのライブラリ名) not found.

という、ワーニングが出た。
モジュール見つからないんですけど、みたいなワーニング。

アプリをビルドする際、端末側がオフラインだったので試しに、


1. アプリを削除
2. Wifi接続
3. アプリを再ビルド

という手順でアプリを再ビルドすると、QRコードが認識できるようになった。
これ自体はHUAWEIの昔からのバグだったようで、最新バージョンでは修正されているようです。

端末のOSなどを常に最新にしておけば、発生しないかもしれません。


Nexus 5X

Error loading module com.google.android.gms.vision.barcode optional module true: gh: No acceptable module found. Local version is 0 and remote version is 0.

Nexusはこんなエラーが出た。
Googleさん、せめてNexusでこんなもの出てほしくなかったヨ)

まず、プラグインのバージョンが古いと思い、最新にアップデートするもこれは意味なし。

「0が返ってくるんですけど」と言い張るので、Google Play Services が利用可能なのかを確認します。

適当なActivityのonCreate()に、以下のコードを書いて確認。

val api = GoogleApiAvailability.getInstance()
val code = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this)
if (code == ConnectionResult.SUCCESS) {
    // 利用可能
} else {
    // 利用不可のときはGoogleが用意しているエラーダイアログを表示
    api.getErrorDialog(this, code, 0).show()
}

Google PlayGoogle Play 開発者サービスも端末に入っているので、
エラーダイアログは表示されませんでした。

そして!

この確認を書いたら、QRコードが認識できるようになりました。
何度アプリを入れなおしても、確認コートを消しても出来るようになりました...。


ということで2端末で起こったことを、もう一度振り返ります。


1. プラグインのバージョンを上げる -> それでも直らず
2. アプリアンインストール 、再起動、ビルドをするも直らず
3. Wifiが入っていないせい?と思い、アプリを削除してWiFiオンで再度ビルド。(HUAWEI端末はこれで直ったがNexusは直らず)
4. 端末にGooglePlay開発者サービスがインストールされているかチェックするコードを追加
5. サクセスが返ってくるが、なぜかそのあと認識できるようになった
6. アンインストールを行い、チェックをしたりしなかったりしてみる。キャッシュデータも削除したが、読み取れなくなることは無くなった。
(そして、認識できない現象は再現できなくなった…)


すっきり、「原因はこれだ!」と分からなかったので、気持ち悪い結果ですが、これで認識できるようになりました。
(というか、エラーの再現できなくなりました)


毎回そうですが、試すときは自己責任でお願いします。