Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Customize Error Message

Customize Error Message

Customize Error Message for Android

How to catch Uncaught Exception.

magiepooh

June 22, 2017
Tweet

More Decks by magiepooh

Other Decks in Technology

Transcript

  1. Customize
    Error Message
    @magie_pooh
    shibuya.apk #16

    View Slide

  2. ࣗݾ঺հ
    ౻ాୖຏ
    @magie_pooh
    @magiepooh

    View Slide

  3. Customize
    Error Message
    @magie_pooh
    shibuya.apk #16

    View Slide

  4. Crash Reporting Tool
    • Crashlytics
    • Firebase Crash Reporting
    • Play Console

    View Slide

  5. Crash Reporting Tool
    • Crashlytics
    • Firebase Crash Reporting
    • Play Console

    View Slide

  6. View Slide

  7. ͜͜ΛΧελϚΠζ͍ͨ͠

    View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. ফ͍ͨ͠

    View Slide

  12. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  13. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  14. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  15. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  16. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  17. private static Thread.UncaughtExceptionHandler defaultUEH;

    private static Thread.UncaughtExceptionHandler caughtExceptionHandler
    =

    new Thread.UncaughtExceptionHandler() {

    @TargetApi(Build.VERSION_CODES.KITKAT) @Override

    public void uncaughtException(Thread thread, Throwable
    throwable) {

    // do something
    defaultUEH.uncaughtException(thread, throwable);

    }

    };
    @Override public void onCreate() {

    super.onCreate();

    Fabric.with(this, new Crashlytics());

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(caughtExceptionHandler);

    }
    ApplicationΫϥε

    View Slide

  18. Field field = Throwable.class
    .getDeclaredField("detailMessage");

    field.setAccessible(true);

    field.set(throwable, "");
    ExceptionͷϝοηʔδΛͻͨ͢Βফ͢

    View Slide

  19. ফ͑ͨʂʂʂ

    View Slide

  20. Crashlyticsͷ࢓૊Έ
    • Fabric.with(this, new Crashlytics());

    View Slide

  21. Crashlyticsͷ࢓૊Έ
    • Fabric.with(this, new Crashlytics());
    • CrashlyticsCore#onPreExecute()಺Ͱ
    CrashlyticsControllerΛੜ੒

    View Slide

  22. Crashlyticsͷ࢓૊Έ
    • Fabric.with(this, new Crashlytics());
    • CrashlyticsCore#onPreExecute()಺Ͱ
    CrashlyticsControllerΛੜ੒
    • CrashlyticsControllerΫϥεͰ
    CrashlyticsUncaughtExceptionHandlerΛੜ੒

    View Slide

  23. ·ͱΊ
    • UncaughtExceptionHandlerΛ࢖͑͹ΧελϚΠζͰ͖Δ
    • ଞͷCrash Reporting Tool͸ະௐࠪͳͷͰɺͲͳ͔ͨڭ͑
    ͍ͯͩ͘͞
    • Firebase Crash ReportingͰ͸ݸਓ৘ใʹؔΘΔ෦෼͸
    ʮREDACTED_PERSONAL_IDENTIFICATION_NUMBER
    ʯʹͳΔΒ͍͠ɻ୭͔ڭ͍͑ͯͩ͘͞

    View Slide