Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Customize Error Message
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
magiepooh
June 22, 2017
Technology
900
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Customize Error Message
Customize Error Message for Android
How to catch Uncaught Exception.
magiepooh
June 22, 2017
More Decks by magiepooh
See All by magiepooh
今さら角丸のTransition
magiepooh
0
1.5k
Google I/O Extended Tokyo 2018
magiepooh
2
1.7k
APIのデータのマッピングを 約18倍速くした話
magiepooh
2
1.1k
まだAPI定義管理で消耗してるの?〜Swaggerを用いた大規模アプリ時代のAPI定義管理とコードジェネレート〜
magiepooh
38
19k
RootBeer
magiepooh
0
870
Kotlin入門
magiepooh
2
1.9k
Adjust Full Screen
magiepooh
2
560
How to get size of NavigationBar and StatusBar
magiepooh
1
1.8k
How to detect phone call
magiepooh
0
1.9k
Other Decks in Technology
See All in Technology
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
250
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
330
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
560
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
140
WebGIS AI Agentの紹介
_shimizu
0
560
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
140
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.8k
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.5k
徹底討論!ECS vs EKS!
daitak
3
1.7k
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
320
現場のトークンマネジメント
dak2
1
190
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
770
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Tell your own story through comics
letsgokoyo
1
970
Faster Mobile Websites
deanohume
310
32k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
We Have a Design System, Now What?
morganepeng
55
8.2k
Fireside Chat
paigeccino
42
4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
400
The Curious Case for Waylosing
cassininazir
1
400
HDC tutorial
michielstock
2
720
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Transcript
Customize Error Message @magie_pooh shibuya.apk #16
ࣗݾհ ౻ాୖຏ @magie_pooh @magiepooh
Customize Error Message @magie_pooh shibuya.apk #16
Crash Reporting Tool • Crashlytics • Firebase Crash Reporting •
Play Console
Crash Reporting Tool • Crashlytics • Firebase Crash Reporting •
Play Console
None
͜͜ΛΧελϚΠζ͍ͨ͠
None
None
None
ফ͍ͨ͠
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Ϋϥε
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Ϋϥε
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Ϋϥε
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Ϋϥε
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Ϋϥε
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Ϋϥε
Field field = Throwable.class .getDeclaredField("detailMessage"); field.setAccessible(true); field.set(throwable, ""); ExceptionͷϝοηʔδΛͻͨ͢Βফ͢
ফ͑ͨʂʂʂ
CrashlyticsͷΈ • Fabric.with(this, new Crashlytics());
CrashlyticsͷΈ • Fabric.with(this, new Crashlytics()); • CrashlyticsCore#onPreExecute()Ͱ CrashlyticsControllerΛੜ
CrashlyticsͷΈ • Fabric.with(this, new Crashlytics()); • CrashlyticsCore#onPreExecute()Ͱ CrashlyticsControllerΛੜ • CrashlyticsControllerΫϥεͰ
CrashlyticsUncaughtExceptionHandlerΛੜ
·ͱΊ • UncaughtExceptionHandlerΛ͑ΧελϚΠζͰ͖Δ • ଞͷCrash Reporting ToolະௐࠪͳͷͰɺͲͳ͔ͨڭ͑ ͍ͯͩ͘͞ • Firebase
Crash ReportingͰݸਓใʹؔΘΔ෦ ʮREDACTED_PERSONAL_IDENTIFICATION_NUMBER ʯʹͳΔΒ͍͠ɻ୭͔ڭ͍͑ͯͩ͘͞