ปิด/เปิด Crashlytic เมื่อรันใน Debug Mode แบบอัตโนมัติด้วย Gradle

Ammarptn
Ammarptn
Published in
2 min readSep 15, 2018

ในการพัฒนา Android แอพ — Crashlytic เป็นเครื่องมือที่ช่วยในการจัดการและแจ้งเตือนเวลาแอพของเราเกิดปัญหา Force close

โดยปกติเมื่อทำการติดตั้ง Crashlytic เข้ากับแอพแล้ว เมื่อมีการ crash เกิดขึ้น Firebases จะแจ้งเตือนทางอีเมล์ทันที โดยคนในทีมก็จะได้รับ อีเมล์นี้เช่นกัน

ทำให้เวลาทดสอบหรือพัฒนาฟีเจอร์ใหม่ๆแล้วเกิด crash ของตัวแอพ Crashlytic ก็จะยังแจ้งเตือน สร้างความผวาและปั่นป่วนในทีมอยู่ไม่น้อย

เพื่อป้องกันไม่ให้เกิดความเข้าใจผิดในกรณีแอพ crash ระหว่างการพัฒนาแอพ และตัว Production บทความนี้จึงจะมาแนะนำการจัดการการแจ้งเตือนนี้กัน

โดย Document ของ Crashlytic ได้บอกวิธีการปิดการแจ้งเตือน โดยสามารถเข้าไปดูได้ที่ link ข้างล่าง

https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt_in_reporting

หลังจากที่เราได้ติดตั้ง Crashlytic เข้ากับโปรเจกของเราแล้ว ทันทีแอพมีปัญหา เราก็จะได้รับอีเมล์จาก Firebase โดย ทีม Firebase ได้เขียนไว้ว่า เราสามารถปิดมันได้ทั้งแบบ Runtime และ Build Process โดยบทความนี้จะเน้นในส่วนของ Build Process เพื่อลดบรรทัดของโค้ดที่เราต้องไปเขียน ในไฟล์ Java/Kotlin

หลังจากที่เราได้ติดตั้ง Crashlytic เข้ากับโปรเจกของเราแล้ว ทันทีแอพมีปัญหา เราก็จะได้รับอีเมล์จาก Firebase โดย ทีม Firebase ได้เขียนไว้ว่า เราสามารถปิดมันได้ทั้งแบบ Runtime และ Build Process โดยบทความนี้จะเน้นในส่วนของ Build Process เพื่อลดบรรทัดของโค้ดที่เราต้องไปเขียน ในไฟล์ Java/Kotlin

ในการแก้ เราก็แค่เพิ่ม

<meta-data android:name=”firebase_crashlytics_collection_enabled” android:value=”false” />

ใน Tag ของ <applicaiton> เพียงเท่านี้ Crashlytic ก็จะไม่แจ้งเตือน crash อีกต่อไป

แต่ทำให้เกิดภาระ เวลาเราจะ build Production/Release เราก็ต้องมาแก้เป็น true เวลา Debug ก็ต้องแก้เป็น false

การแก้ไปแก้มาเองแบบ manual นี้ อาจจะทำให้เราเผลอลืมแก้ให้เป็นค่าที่ถูกต้องในกรณีที่ต้องเปิดมัน เช่น เผลอปิดไปขณะกำลัง Build ตัว Production ทำให้ crash ที่เกิดขึ้นในการใช้งานจริงก็จะไม่มีการแจ้งเตือน

เพื่อไม่ให้เกิดความผิดพลาดและยุ่งยาก เราสามารถใช้ Gradle ในการควบคุมได้และไม่ต้องมาแก้เองอีกต่อไป เพราะว่า จาก link นี้

ได้บอกไว้ว่าเราสามารถ inject ค่าจาก Gradle ลงไปได้ ตัวอย่างเช่นกำหนดใน Gradle

android {
defaultConfig {
manifestPlaceholders = [hostName:"www.example.com"]
}
...
}

แล้วก็ inject ลง AnroidManifact.xml

<intent-filter ... >
<data android:scheme="http" android:host="${hostName}" ... />
...
</intent-filter>

นั้นหมายความว่าเราสามารถ inject ค่า True หรือ False เพื่อเปิดและปิดแบบอัตโนมัติ

จาก Doc ด้านบน เราก็เปลี่ยนจาก falseเป็น ${triggerCrashlytic} ตามโค้ดด้านล่าง

<meta-data android:name=”firebase_crashlytics_collection_enabled” android:value=”${triggerCrashlytic}” />

แล้วเราก็ไปเพิ่ม field triggerCrashlytic ที่ไฟล์ build.gradle ในส่วนของ app module โดยกำหนดในเมื่อ Build แบบ Debug ให้ส่งค่า triggerCrashlytics เป็น false และหากเป็น Release ให้ส่งค่าเป็น True

android {
...
buildTypes {
release {
...
manifestPlaceholders = [triggerCrashlytic: true]

}
debug {
manifestPlaceholders = [triggerCrashlytic: false]
}
}
}

เมื่อแก้เสร็จแล้ว ก็ sync หากไม่มั่นใจก็สามารถทดลองทำให้มัน Crash ดูก็ได้

โดยถ้าเราสั่งรันแอพที่เป็น Debug build เมื่อเกิดการ crash มันก็จะไม่แจ้งเตือนใดๆ

หากเรารันแอพที่เป็น Release build เมื่อมี crash เราก็ได้รับการแจ้งเตือนแน่นอน

ขอให้สนุกกับการ Crash ครับ

--

--