LoginSignup
39
42

More than 5 years have passed since last update.

AndroidのWebViewのバージョンをCrashlyticsに投げる

Last updated at Posted at 2014-11-20

Android 5.0(Lollipop)以降のWebView

Android 4.4 (KitKat)までは、WebViewがOSに組み込まれていたので、
Chromiumのバグがあった場合、その修正や機能追加などは、
OS自体のアップデートをする必要がありました。
Android 5.0(Lollipop)以降では、ここにもあるとおり、
WebViewがOSから切り離され、Google Play ストア経由で
「Android System WebView」としてアップデートできるようになりました。

クラッシュレポート

今までWebViewを使っているアプリでは、
デバイス ✕ OSのバージョン
上記のパターンでバグの再現条件の調査を行うことができましたが、今後は
デバイス ✕ OSのバージョン ✕ Chromiumのバージョン
上記のようにChromiumのバージョンも考慮しなければならない可能性があります。

Androidアプリのクラッシュレポートを取得するサービスとして有名なCrashlyticsでは、
標準でデバイスやOSのバージョンなどを取得することはできますが、
WebViewで用いられているChromiumのバージョンを取得することはできません。

Crashlyticsはカスタムキーを設定してログを残すことができるので、これを使って
クラッシュ時にWebViewのUserAgentを合わせてCrashlyticsに投げるようにします。

実装

WebViewのUserAgentをパースするために、
gradleを使って導入できたので、Wootheeを使います。
準備はbuild.gradleのdependenciesに
compile 'is.tagomor.woothee:woothee-java:1.0.0'
を追加してbuildするだけです。

たとえば下記のようなクラスを用意して、

CrashlyticsUtils.java
package com.example.log;

import com.crashlytics.android.Crashlytics;
import java.util.Map;
import is.tagomor.woothee.Classifier;

public class CrashlyticsUtils {
    public CrashlyticsUtils() {
        throw new AssertionError();
    }

    private static final String NAME       = "name";
    private static final String OS_VERSION = "os_version";
    private static final String CATEGORY   = "category";
    private static final String OS         = "os";
    private static final String VENDOR     = "vendor";
    private static final String VERSION    = "version";

    public static void setUserAgent(final String userAgentString) {
        Map<String, String> userAgent = Classifier.parse(userAgentString);
        Crashlytics.setString(NAME, userAgent.get(NAME));
        Crashlytics.setString(OS_VERSION, userAgent.get(OS_VERSION));
        Crashlytics.setString(CATEGORY, userAgent.get(CATEGORY));
        Crashlytics.setString(OS, userAgent.get(OS));
        Crashlytics.setString(VENDOR, userAgent.get(VENDOR));
        Crashlytics.setString(VERSION, userAgent.get(VERSION));
    }
}

それをWebViewをもつクラスから実行すれば、クラッシュした際に
WebViewのUserAgentを合わせて取得することができます。

MainActivity.java
String userAgentString = webView.getSettings().getUserAgentString();
CrashlyticsUtils.setUserAgent(userAgentString);

qiita.png

39
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
42