รายงานข้อขัดข้องของ Android อัตโนมัติด้วย ACRA และ Cloudant
เผยแพร่แล้ว: 2022-03-11การสร้างแอพ Android พื้นฐานเป็นเรื่องง่าย ในทางกลับกัน การสร้างแอพ Android ที่น่าเชื่อถือ ปรับขนาดได้ และมีประสิทธิภาพนั้นค่อนข้างท้าทาย
ด้วยอุปกรณ์ที่มีอยู่หลายพันเครื่องที่สูบออกมาจากผู้ผลิตหลายราย สมมติว่าโค้ดเพียงชิ้นเดียวทำงานได้อย่างน่าเชื่อถือในโทรศัพท์ต่างๆ ก็ถือว่าไร้เดียงสาที่สุด
การแบ่งกลุ่มเป็นการแลกเปลี่ยนที่ยิ่งใหญ่ที่สุดสำหรับการมีแพลตฟอร์มแบบเปิด และเราจ่ายราคาเป็นสกุลเงินของการบำรุงรักษารหัส ซึ่งจะดำเนินต่อไปเป็นเวลานานหลังจากที่แอปผ่านขั้นตอนการผลิต
เหตุใดการรายงานข้อผิดพลาดของ Android จึงมีความสำคัญ
แล้วจะเกิดอะไรขึ้นเมื่อแอป Android ขัดข้องหรือไม่ตอบสนอง กล่องโต้ตอบ "บังคับปิด" จะปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ทราบว่ามีบางอย่างผิดพลาด หากดาวน์โหลดแอปผ่าน Google Play ผู้ใช้จะได้รับแจ้งให้รายงานข้อขัดข้องโดยส่งรายงานข้อขัดข้องของ Android โดยละเอียด (รวมถึงเวลา รุ่นโทรศัพท์ เวอร์ชัน Android สแต็กเทรซ ฯลฯ) ที่คุณ (นักพัฒนา) สามารถดูได้ Developer's Console ช่วยให้คุณสามารถแก้ไขจุดบกพร่องของผู้กระทำความผิดได้
ทั้งหมดนี้ฟังดูดีมาก—แต่มีปัญหาสำคัญกับการใช้การรายงานข้อผิดพลาดเริ่มต้นของ Android: ผู้ใช้มักจะ ไม่ ดำเนินการเมื่อแอปของพวกเขาขัดข้อง อันที่จริง คนส่วนใหญ่เลือกที่จะไม่ส่งรายงานข้อผิดพลาดของ Android ในฐานะนักพัฒนาซอฟต์แวร์ที่ขยันขันแข็ง คุณจะรับข้อมูลเชิงลึกที่เชื่อถือได้เกี่ยวกับข้อขัดข้องและความล้มเหลวของแอปได้อย่างไร
แนะนำACRA
ACRA ย่อมาจาก "การรายงานข้อขัดข้องอัตโนมัติสำหรับ Android" เป็นไลบรารีฟรีที่ให้คุณแก้ปัญหา 'การรายงานข้อผิดพลาดด้วยตนเอง' ด้วยโค้ดสองสามบรรทัด เมื่อคุณใช้งานไลบรารี่และทุกอย่างได้รับการเตรียมใช้งานอย่างถูกต้องแล้ว คุณจะสามารถแยกบันทึกข้อผิดพลาด Android เดียวกันเป็นค่าเริ่มต้นของ Google (พร้อมตัวเลือกการปรับแต่งเพิ่มเติมอีกมากมาย) โดยอัตโนมัติและโดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ
นอกจากนั้น ACRA ยังให้คุณเลือกวิธีที่คุณต้องการแจ้งผู้ใช้เกี่ยวกับข้อขัดข้องของ Android โดยค่าเริ่มต้นคือการรายงานในเบื้องหลังแบบเงียบ และทางเลือกอื่น ๆ รวมถึงกล่องโต้ตอบที่ปรับแต่งเอง
เมื่อไม่นานมานี้ ACRA ได้รับการสนับสนุนโดย Google Spreadsheet ซึ่งหมายความว่าคุณสามารถรับรายงานทั้งหมดของคุณในไฟล์เดียว ซึ่งโฮสต์ได้ฟรีบนบัญชี Google Drive ของคุณ ขออภัย Google ได้ขอให้เราไม่ใช้ตัวเลือกนี้ในอนาคต ดังนั้นเราจึงเหลือทางเลือกสองทางสำหรับการส่งข้อมูลรายงานข้อขัดข้อง ซึ่งเราจะกล่าวถึงบางส่วนในบทแนะนำนี้:
- อีเมลมาตรฐาน (ยังคงต้องมีการโต้ตอบกับผู้ใช้)
- อีเมล/ไคลเอ็นต์ HTTP ที่กำหนดเอง (ต้องมีการตั้งค่าอย่างละเอียด)
- แบ็กเอนด์แบบกำหนดเอง (พร้อมตัวเลือกตั้งแต่ฟรีไปจนถึงโซลูชันเชิงพาณิชย์)
ในบทความนี้ เราจะวิเคราะห์หนึ่งในโซลูชันเหล่านี้: การโฮสต์รายงาน ACRA ของคุณบนแบ็คเอนด์ Cloudant และการแสดงภาพข้อมูลด้วย acralyzer
การตั้งค่าแบ็คเอนด์ Cloudant
สิ่งแรกที่เราต้องทำคือลงทะเบียนบัญชี Cloudant แน่นอนว่ามีข้อดีหลายประการ: บริการของ Cloudant ไม่ได้ฟรีทั้งหมด แต่ตามหน้าการกำหนดราคา ไม่น่าเป็นไปได้มากที่คุณจะเกินขีดจำกัด $5 ต่อเดือน (เว้นแต่ว่าคุณมีฐานผู้ใช้จำนวนมากและมีข้อบกพร่องมากมายในโค้ดของคุณ)
เมื่อเราลงทะเบียนแล้ว เราต้องเข้าใจว่าสิ่งต่างๆ ทำงานอย่างไร ในระดับสูง แบ็คเอนด์ของเราจะประกอบด้วยสององค์ประกอบ:
- ฐานข้อมูลการจัดเก็บหรือเพื่อให้แม่นยำยิ่งขึ้น Apache CouchDB CouchDB จัดเก็บข้อมูลในรูปแบบ JSON ซึ่งหมายความว่ารายงานทั้งหมดที่ส่งจากอุปกรณ์ Android จะต้องตรงกับรูปแบบเพื่อที่จะแทรกเป็นรายการ การแทรกฐานข้อมูลเป็นคำขอ HTTP POST หรือ PUT อย่างง่าย
- เว็บแอป (สำหรับการวิเคราะห์) หรือ CouchApp ที่แม่นยำยิ่งขึ้น นี่คือแอปพลิเคชัน JavaScript อย่างง่ายที่ให้คุณเรียกใช้การสืบค้นและแสดงข้อมูลที่จัดเก็บไว้ในอินสแตนซ์ CouchDB
เพื่อให้ส่วนหลังของเราทำงานได้อย่างถูกต้อง เราจะต้องตั้งค่าองค์ประกอบทั้งสองนี้ ตามทฤษฎีแล้ว เราสามารถสร้างฐานข้อมูลและแอปจากแหล่งที่มา จากนั้นใช้เครื่องมือเพื่อปรับใช้กับแบ็คเอนด์ของเรา—แต่คนดีๆ ที่ ACRA ได้ทำสิ่งนั้นให้เราแล้ว วิธีที่ง่ายที่สุดคือการจำลองฐานข้อมูลระยะไกลและแอประยะไกล
ไปข้างหน้าและทำซ้ำ ACRA CouchDB ที่ว่างเปล่า:
- เลือกส่วน 'การจำลองแบบ' ในแดชบอร์ด Cloudant ของคุณ
- เป็นฐานข้อมูลต้นทาง เลือก 'ฐานข้อมูลระยะไกล' โดยมี http://get.acralyzer.com/distrib-acra-storage เป็น URL
- เป็นฐานข้อมูลเป้าหมาย เลือก 'ฐานข้อมูลใหม่' และตั้งชื่อว่า “acra-{myapp}” (โดยไม่ใส่เครื่องหมายคำพูด) โปรดทราบว่าพารามิเตอร์ {myapp} ไม่ควรซ้ำกับแอปของคุณ และชื่อฐานข้อมูลต้องขึ้นต้นด้วย “acra-“
- คลิก 'ทำซ้ำ'
ดังนั้นเราจึงจำลองฐานข้อมูลสำหรับการจัดเก็บรายงานได้สำเร็จ ต่อไป เราต้องทำซ้ำ acralyzer CouchApp เพื่อให้เราเห็นภาพข้อมูล:
- เลือกส่วน 'การจำลองแบบ' ในแดชบอร์ด Cloudant ของคุณ
- เป็นฐานข้อมูลต้นทาง เลือก 'ฐานข้อมูลระยะไกล' โดยมี http://get.acralyzer.com/distrib-acralyzer เป็น URL
- เป็นฐานข้อมูลเป้าหมาย เลือก 'ฐานข้อมูลใหม่' และตั้งชื่อว่า "acralyzer"
- คลิก 'ทำซ้ำ'
หมายเหตุ : การจำลองแอป acralyzer เป็นทางเลือก คุณไม่จำเป็นต้องใช้หากคุณสนใจเพียงจัดเก็บรายงานข้อขัดข้องของ Android แทนที่จะแสดงข้อมูลเป็นภาพ (เราจะพิจารณา acralyzer อย่างละเอียดในหัวข้อถัดไปของบทช่วยสอน Android นี้) หากคุณรู้สึกมั่นใจเพียงพอกับทักษะ JavaScript ของคุณ คุณสามารถเขียนแอปวิเคราะห์ของคุณเองได้! แต่นั่นอยู่นอกขอบเขตของโพสต์บล็อกนี้
ขั้นตอนสุดท้ายของกระบวนการตั้งค่าเริ่มต้นคือการเพิ่มสิทธิ์ด้านความปลอดภัย Cloudant มอบชั้นความปลอดภัยของตนเองบน CouchDB ด้วยการควบคุมสิทธิ์ส่วนบุคคลที่ละเอียดยิ่งขึ้น ดังนั้นเพื่อเขียนรายงานไปยังฐานข้อมูลของเรา เราจำเป็นต้องสร้างบัญชีผู้ใช้ที่มีสิทธิ์ในการเขียน:
- เลือกส่วน 'ฐานข้อมูล' ในแดชบอร์ด Cloudant ของคุณ
- คลิกส่วนสิทธิ์ (ไอคอนล็อก) สำหรับฐานข้อมูล acra-{myapp}
- คลิก 'สร้างคีย์ API'
- จดชื่อผู้ใช้และรหัสผ่านที่สร้างขึ้น (เราจะใช้ในภายหลัง)
- เพิ่มสิทธิ์การเขียนสำหรับชื่อผู้ใช้ที่สร้างขึ้น
การแสดงภาพรายงานข้อขัดข้องของ Android ด้วย acralyzer
เมื่อจำลองแบบแล้ว แดชบอร์ด acralyzer สามารถเข้าถึงได้ง่ายโดยทำตาม https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard
ฉันจะยอมรับ: มันไม่ใช่เครื่องมือวิเคราะห์ที่สวยงามที่สุด แต่มันมีจุดมุ่งหมาย
จากเมนูด้านบน คุณสามารถเลือกฐานข้อมูลที่คุณต้องการแสดง (สามารถโฮสต์หลายฐานข้อมูลสำหรับแอพต่างๆ ในโครงการเดียว ซึ่งจะส่งผลต่อโควตาการใช้งานของคุณ) และแสดงตัวอย่างข้อมูลในแดชบอร์ดหลัก ตัวอย่างเช่น คุณสามารถ:

- พล็อตจำนวนรายงานตามหน่วยเวลา (ชั่วโมง วัน เดือน ฯลฯ)
- ดูการกระจายรายงานตามเมตริกเฉพาะของ Android (เวอร์ชัน Android, เวอร์ชัน SDK, เวอร์ชันแอป, อุปกรณ์ ฯลฯ)
- แสดงรายการรายงานข้อขัดข้องทั้งหมด (พร้อมรายละเอียดสแต็กเทรซ) หรือดูบั๊กทั้งหมด (ในที่นี้ “บั๊ก” คือกลุ่มของรายงานที่เหมือนกันซึ่งมาจากผู้ใช้ที่แตกต่างกัน)
- ดูตัวอย่างรายละเอียดของจุดบกพร่องเดียวและตั้งสถานะว่าได้รับการแก้ไขแล้ว (หากแก้ไขแล้ว)
- ล้างรายการเก่าหรือล้าสมัย
โปรดทราบว่าเมตริกข้อขัดข้องของ Android ที่ใช้ได้สำหรับการแสดงภาพจะขึ้นอยู่กับรายงานที่เราเลือกส่งจากแอปของเรา ACRA นำเสนอฟิลด์รายงานที่หลากหลาย ซึ่งบางฟิลด์อาจมีขนาดค่อนข้างใหญ่หรือไม่เกี่ยวข้องกับการแก้ไขข้อบกพร่องทั้งหมด สำหรับโครงการส่วนใหญ่ ฟิลด์รายงานที่จำเป็นก็เพียงพอแล้ว ซึ่งรวมถึง:
- APP_VERSION_CODE
- APP_VERSION_NAME
- ANDROID_VERSION
- PACKAGE_NAME
- REPORT_ID
- สร้าง
- STACK_TRACE
การนำ ACRA ไปใช้ในโครงการ Android ของคุณ
ตามที่กล่าวไว้ก่อนหน้านี้ในบทช่วยสอนนี้ การนำ ACRA ไปใช้นั้นง่ายมากและต้องใช้ขั้นตอนสั้นๆ เพียงไม่กี่ขั้นตอน
เพิ่มการพึ่งพา
อันดับแรก เราต้องรวมไลบรารีเป็นการพึ่งพาด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
- เป็นไฟล์ .jar ในโฟลเดอร์ /libs ของคุณ
เป็นการพึ่งพา maven:
<dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
เป็นการพึ่งพาแบบค่อยเป็นค่อยไป:
compile 'ch.acra:acra:XYZ'
เพิ่มคลาสแอปพลิเคชัน
ต่อไป เราต้องเพิ่มคลาสแอปพลิเคชัน Android ให้กับโปรเจ็กต์ของเรา (หรืออัปเดตคลาสที่มีอยู่ เนื่องจากมีได้เพียงอินสแตนซ์เดียวเท่านั้น) และประกาศใน AndroidManifest.xml:
<application android:name=".MyApp" android:theme="@style/AppTheme"> ...
และตั้งค่า ACRA ที่นั่น:
@ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }
แค่นั้นแหละ! แน่นอน คุณจะต้องแทนที่ตัวยึดตำแหน่ง {myapp} ทั้งหมดด้วยค่าจริง เช่นเดียวกับค่าสำหรับ formUriBasicAuthLogin
และ formUriBasicAuthPassword
ดังที่คุณเห็นจากข้อมูลโค้ดด้านบน เราใช้เฉพาะฟิลด์รายงานที่จำเป็นเท่านั้น คุณสามารถเพิ่มฟิลด์อื่นๆ ที่อาจเกี่ยวข้องกับใบสมัครของคุณได้
คุณยังสามารถเลือกใช้ PUT แทน POST ได้ ในกรณีนั้น REPORT_ID
จะถูกผนวกเข้ากับส่วนท้ายของ former
เป็นพารามิเตอร์
สุดท้าย คุณยังสามารถเลือกวิธีที่ผู้ใช้ได้รับแจ้งเกี่ยวกับข้อขัดข้องของแอป Android โดยค่าเริ่มต้นจะเป็นรายงานเบื้องหลังแบบเงียบ ในกรณีของเรา เราเลือกที่จะแสดงข้อความ Toast เพื่อแจ้งให้ผู้ใช้ทราบว่ามีการรายงานข้อขัดข้องแล้ว และการแก้ไขจุดบกพร่องจะพร้อมใช้งานในเร็วๆ นี้
ต้องการความช่วยเหลือ? นี่คือตัวอย่างโครงการ
หากต้องการดูการทำงานของ ACRA ฉันได้ตั้งค่า acra_example repo บน GitHub มันมีแอพง่าย ๆ ที่เริ่มต้น ACRA เมื่อเริ่มต้นและให้คุณหยุดมันด้วยการกดปุ่ม (ซึ่งจะทริกเกอร์ข้อยกเว้นตัวชี้ null) ข้อมูลข้อขัดข้องจะถูกส่งไปยังฐานข้อมูลตัวอย่าง Cloudant ที่สามารถดูได้ที่นี่
หากต้องการดูข้อมูล ให้เข้าสู่ระบบด้วยข้อมูลรับรองต่อไปนี้:
- ชื่อผู้ใช้: medo
- รหัสผ่าน: acraexample
รายการทางเลือกสำหรับ ACRA
ACRA ไม่ใช่ตัวเลือกเดียวสำหรับการรายงานข้อผิดพลาดของ Android อัตโนมัติ เนื่องจากข้อขัดข้องต่างๆ จะต้องเกิดขึ้น มีตลาดระหว่างธุรกิจกับนักพัฒนา (B2D) ขนาดใหญ่ที่พยายามหารายได้จากการแก้ปัญหา
ตัวอย่างเช่น Cittercism เป็นแพลตฟอร์มที่สมบูรณ์มากสำหรับการรายงานข้อขัดข้อง มันดูดีมาก มีตัวเลือกมากมายสำหรับการวิเคราะห์ข้อมูล และง่ายต่อการรวมเข้าด้วยกัน ข้อเสียเพียงอย่างเดียว: ราคาและการทดลองใช้ฟรีค่อนข้างจำกัดในแง่ของจำนวนผู้ใช้ที่ใช้งานอยู่ จำนวนวันที่เก็บรักษาข้อมูล และการสนับสนุน) BugSense เป็นบริการที่คล้ายกัน
อย่างไรก็ตาม ในความเห็นของฉัน Crashlytics เป็นโซลูชันที่เหนือชั้น จนกระทั่งเมื่อไม่นานนี้ Crashlytics มีโมเดล freemium (ที่มีระดับพรีเมียมแบบชำระเงิน); แต่ตอนนี้ (หลังจากการได้มาโดย Twitter) ฟีเจอร์ระดับพรีเมียมที่ก่อนหน้านี้มีให้ใช้งานฟรี ไม่มีค่าใช้จ่ายในการใช้งาน ค่าธรรมเนียม หรือข้อจำกัด นี่เป็นวิธีการรายงานข้อผิดพลาดที่ต้องการสำหรับบริษัทและนักพัฒนาที่มีชื่อเสียงระดับสูงจำนวนมาก และนักพัฒนา เนื่องจากใช้งานง่ายมากและมีเครื่องมือวิเคราะห์และการแสดงภาพที่มีประสิทธิภาพ มันยังรวมเข้ากับ IDE ที่ได้รับความนิยมมากที่สุดเป็นปลั๊กอิน (เช่น Eclipse, Android Studio) ดังนั้นการเพิ่ม Crashlytics ลงในแอพของคุณนั้นง่ายเหมือนการเลือกโปรเจ็กต์และกดปุ่ม ปลั๊กอินเหล่านี้ยังช่วยให้คุณติดตามรายงานข้อขัดข้องจาก IDE ของคุณโดยไม่ต้องเปิดเบราว์เซอร์
เหตุใดจึงต้องใช้ ACRA ในเมื่อมีทางเลือกอื่นที่ดูดีกว่าและเสนอคุณสมบัติเพิ่มเติมสำหรับการใช้งานแบบเดียวกัน ฉันจะให้เหตุผลสองข้อแก่คุณ
ตัวเลือกอื่นๆ ทั้งหมดนี้เป็น โอเพ่นซอร์ส ซอฟต์แวร์ที่เป็นกรรมสิทธิ์ แม้จะมีตะกร้าที่เต็มไปด้วย EULA คุณก็ไม่สามารถแน่ใจได้ ว่า ข้อมูลของคุณถูกรวบรวมและจัดการอย่างไร ในทางกลับกัน ACRA และ acralyzer เป็นโครงการโอเพ่นซอร์สที่โฮสต์บน GitHub ซึ่งคุณสามารถแยกและปรับแต่งตามความต้องการของคุณได้อย่างง่ายดาย
ความคล่องตัวของข้อมูล สมมติว่าคุณไม่พอใจ Cloudant การจำลองและย้ายข้อมูลของคุณไปยังส่วนหลังอื่นทำได้ง่าย คุณรับประกันได้ว่าข้อมูล จะเป็นของคุณ
เช่นเดียวกับตัวเลือกมากมาย ตัวเลือกนี้ขึ้นอยู่กับความชอบส่วนบุคคลและความคุ้นเคย ดูชุดข้อความ Google+ นี้สำหรับการสนทนาเพิ่มเติมเกี่ยวกับทางเลือกต่างๆ ที่มีอยู่เพื่อทำให้แอปของคุณเชื่อถือได้มากขึ้น
สรุปแล้ว
ACRA เป็นไลบรารี่ที่แข็งแกร่งและปรับแต่งได้สูงซึ่งสามารถใช้ร่วมกับ Cloudant และ acralyzer เพื่อให้ได้รายงานข้อขัดข้องอัตโนมัติและการวิเคราะห์ขั้นพื้นฐานฟรีสำหรับแอปของคุณ ทั้งหมดนี้ใช้ความพยายามเพียงเล็กน้อยในการนำไปใช้
การเขียนโค้ด Android ที่เชื่อถือได้นั้นต้องใช้ประสบการณ์และการมองการณ์ไกลเป็นอย่างมาก แต่ไม่มีพวกเราคนใดที่รอบรู้อย่างแท้จริง เตรียมพร้อมสำหรับข้อขัดข้องและข้อผิดพลาดที่ไม่คาดคิด และพร้อมที่จะ แก้ไข สิ่งที่ไม่คาดคิดโดยเร็วที่สุด นั่นเป็นงานประเภทหนึ่งที่นำไปสู่ผลิตภัณฑ์ที่ยอดเยี่ยมและประสบการณ์ผู้ใช้ที่ยอดเยี่ยม