รายงานข้อขัดข้องของ Android อัตโนมัติด้วย ACRA และ Cloudant

เผยแพร่แล้ว: 2022-03-11

การสร้างแอพ Android พื้นฐานเป็นเรื่องง่าย ในทางกลับกัน การสร้างแอพ Android ที่น่าเชื่อถือ ปรับขนาดได้ และมีประสิทธิภาพนั้นค่อนข้างท้าทาย

ด้วยอุปกรณ์ที่มีอยู่หลายพันเครื่องที่สูบออกมาจากผู้ผลิตหลายราย สมมติว่าโค้ดเพียงชิ้นเดียวทำงานได้อย่างน่าเชื่อถือในโทรศัพท์ต่างๆ ก็ถือว่าไร้เดียงสาที่สุด

การแบ่งกลุ่มเป็นการแลกเปลี่ยนที่ยิ่งใหญ่ที่สุดสำหรับการมีแพลตฟอร์มแบบเปิด และเราจ่ายราคาเป็นสกุลเงินของการบำรุงรักษารหัส ซึ่งจะดำเนินต่อไปเป็นเวลานานหลังจากที่แอปผ่านขั้นตอนการผลิต

เหตุใดการรายงานข้อผิดพลาดของ Android จึงมีความสำคัญ

แล้วจะเกิดอะไรขึ้นเมื่อแอป Android ขัดข้องหรือไม่ตอบสนอง กล่องโต้ตอบ "บังคับปิด" จะปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ทราบว่ามีบางอย่างผิดพลาด หากดาวน์โหลดแอปผ่าน Google Play ผู้ใช้จะได้รับแจ้งให้รายงานข้อขัดข้องโดยส่งรายงานข้อขัดข้องของ Android โดยละเอียด (รวมถึงเวลา รุ่นโทรศัพท์ เวอร์ชัน Android สแต็กเทรซ ฯลฯ) ที่คุณ (นักพัฒนา) สามารถดูได้ Developer's Console ช่วยให้คุณสามารถแก้ไขจุดบกพร่องของผู้กระทำความผิดได้

ทั้งหมดนี้ฟังดูดีมาก—แต่มีปัญหาสำคัญกับการรายงานข้อผิดพลาดเริ่มต้นของ Android: ผู้ใช้มักจะไม่ใช้มัน ทำให้นักพัฒนาซอฟต์แวร์ไม่รู้เกี่ยวกับสถานะของแอปของตน

ทั้งหมดนี้ฟังดูดีมาก—แต่มีปัญหาสำคัญกับการใช้การรายงานข้อผิดพลาดเริ่มต้นของ Android: ผู้ใช้มักจะ ไม่ ดำเนินการเมื่อแอปของพวกเขาขัดข้อง อันที่จริง คนส่วนใหญ่เลือกที่จะไม่ส่งรายงานข้อผิดพลาดของ Android ในฐานะนักพัฒนาซอฟต์แวร์ที่ขยันขันแข็ง คุณจะรับข้อมูลเชิงลึกที่เชื่อถือได้เกี่ยวกับข้อขัดข้องและความล้มเหลวของแอปได้อย่างไร

บันทึกข้อขัดข้องของ Android ที่เชื่อถือได้มีความสำคัญอย่างยิ่งเมื่อผู้ใช้ไม่ส่งรายงานข้อขัดข้อง

แนะนำACRA

ACRA ย่อมาจาก "การรายงานข้อขัดข้องอัตโนมัติสำหรับ Android" เป็นไลบรารีฟรีที่ให้คุณแก้ปัญหา 'การรายงานข้อผิดพลาดด้วยตนเอง' ด้วยโค้ดสองสามบรรทัด เมื่อคุณใช้งานไลบรารี่และทุกอย่างได้รับการเตรียมใช้งานอย่างถูกต้องแล้ว คุณจะสามารถแยกบันทึกข้อผิดพลาด Android เดียวกันเป็นค่าเริ่มต้นของ Google (พร้อมตัวเลือกการปรับแต่งเพิ่มเติมอีกมากมาย) โดยอัตโนมัติและโดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ

นอกจากนั้น ACRA ยังให้คุณเลือกวิธีที่คุณต้องการแจ้งผู้ใช้เกี่ยวกับข้อขัดข้องของ Android โดยค่าเริ่มต้นคือการรายงานในเบื้องหลังแบบเงียบ และทางเลือกอื่น ๆ รวมถึงกล่องโต้ตอบที่ปรับแต่งเอง

เมื่อไม่นานมานี้ ACRA ได้รับการสนับสนุนโดย Google Spreadsheet ซึ่งหมายความว่าคุณสามารถรับรายงานทั้งหมดของคุณในไฟล์เดียว ซึ่งโฮสต์ได้ฟรีบนบัญชี Google Drive ของคุณ ขออภัย Google ได้ขอให้เราไม่ใช้ตัวเลือกนี้ในอนาคต ดังนั้นเราจึงเหลือทางเลือกสองทางสำหรับการส่งข้อมูลรายงานข้อขัดข้อง ซึ่งเราจะกล่าวถึงบางส่วนในบทแนะนำนี้:

  • อีเมลมาตรฐาน (ยังคงต้องมีการโต้ตอบกับผู้ใช้)
  • อีเมล/ไคลเอ็นต์ HTTP ที่กำหนดเอง (ต้องมีการตั้งค่าอย่างละเอียด)
  • แบ็กเอนด์แบบกำหนดเอง (พร้อมตัวเลือกตั้งแต่ฟรีไปจนถึงโซลูชันเชิงพาณิชย์)

ในบทความนี้ เราจะวิเคราะห์หนึ่งในโซลูชันเหล่านี้: การโฮสต์รายงาน ACRA ของคุณบนแบ็คเอนด์ Cloudant และการแสดงภาพข้อมูลด้วย acralyzer

การตั้งค่าแบ็คเอนด์ Cloudant

สิ่งแรกที่เราต้องทำคือลงทะเบียนบัญชี Cloudant แน่นอนว่ามีข้อดีหลายประการ: บริการของ Cloudant ไม่ได้ฟรีทั้งหมด แต่ตามหน้าการกำหนดราคา ไม่น่าเป็นไปได้มากที่คุณจะเกินขีดจำกัด $5 ต่อเดือน (เว้นแต่ว่าคุณมีฐานผู้ใช้จำนวนมากและมีข้อบกพร่องมากมายในโค้ดของคุณ)

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

  1. ฐานข้อมูลการจัดเก็บหรือเพื่อให้แม่นยำยิ่งขึ้น Apache CouchDB CouchDB จัดเก็บข้อมูลในรูปแบบ JSON ซึ่งหมายความว่ารายงานทั้งหมดที่ส่งจากอุปกรณ์ Android จะต้องตรงกับรูปแบบเพื่อที่จะแทรกเป็นรายการ การแทรกฐานข้อมูลเป็นคำขอ HTTP POST หรือ PUT อย่างง่าย
  2. เว็บแอป (สำหรับการวิเคราะห์) หรือ CouchApp ที่แม่นยำยิ่งขึ้น นี่คือแอปพลิเคชัน JavaScript อย่างง่ายที่ให้คุณเรียกใช้การสืบค้นและแสดงข้อมูลที่จัดเก็บไว้ในอินสแตนซ์ CouchDB

เพื่อให้ส่วนหลังของเราทำงานได้อย่างถูกต้อง เราจะต้องตั้งค่าองค์ประกอบทั้งสองนี้ ตามทฤษฎีแล้ว เราสามารถสร้างฐานข้อมูลและแอปจากแหล่งที่มา จากนั้นใช้เครื่องมือเพื่อปรับใช้กับแบ็คเอนด์ของเรา—แต่คนดีๆ ที่ ACRA ได้ทำสิ่งนั้นให้เราแล้ว วิธีที่ง่ายที่สุดคือการจำลองฐานข้อมูลระยะไกลและแอประยะไกล

ไปข้างหน้าและทำซ้ำ ACRA CouchDB ที่ว่างเปล่า:

  • เลือกส่วน 'การจำลองแบบ' ในแดชบอร์ด Cloudant ของคุณ
  • เป็นฐานข้อมูลต้นทาง เลือก 'ฐานข้อมูลระยะไกล' โดยมี http://get.acralyzer.com/distrib-acra-storage เป็น URL
  • เป็นฐานข้อมูลเป้าหมาย เลือก 'ฐานข้อมูลใหม่' และตั้งชื่อว่า “acra-{myapp}” (โดยไม่ใส่เครื่องหมายคำพูด) โปรดทราบว่าพารามิเตอร์ {myapp} ไม่ควรซ้ำกับแอปของคุณ และชื่อฐานข้อมูลต้องขึ้นต้นด้วย “acra-“
  • คลิก 'ทำซ้ำ'

สิ่งนี้แสดงให้เห็นวิธีตั้งค่าแบ็คเอนด์ของ Cloudant เพื่อจัดการการรายงานข้อขัดข้องของ Android

ดังนั้นเราจึงจำลองฐานข้อมูลสำหรับการจัดเก็บรายงานได้สำเร็จ ต่อไป เราต้องทำซ้ำ acralyzer CouchApp เพื่อให้เราเห็นภาพข้อมูล:

  • เลือกส่วน 'การจำลองแบบ' ในแดชบอร์ด Cloudant ของคุณ
  • เป็นฐานข้อมูลต้นทาง เลือก 'ฐานข้อมูลระยะไกล' โดยมี http://get.acralyzer.com/distrib-acralyzer เป็น URL
  • เป็นฐานข้อมูลเป้าหมาย เลือก 'ฐานข้อมูลใหม่' และตั้งชื่อว่า "acralyzer"
  • คลิก 'ทำซ้ำ'

ขั้นตอนนี้ประกอบด้วยการจำลองแอป acra เพื่อแสดงข้อมูลบันทึกข้อขัดข้องของ Android

หมายเหตุ : การจำลองแอป acralyzer เป็นทางเลือก คุณไม่จำเป็นต้องใช้หากคุณสนใจเพียงจัดเก็บรายงานข้อขัดข้องของ Android แทนที่จะแสดงข้อมูลเป็นภาพ (เราจะพิจารณา acralyzer อย่างละเอียดในหัวข้อถัดไปของบทช่วยสอน Android นี้) หากคุณรู้สึกมั่นใจเพียงพอกับทักษะ JavaScript ของคุณ คุณสามารถเขียนแอปวิเคราะห์ของคุณเองได้! แต่นั่นอยู่นอกขอบเขตของโพสต์บล็อกนี้

ขั้นตอนสุดท้ายของกระบวนการตั้งค่าเริ่มต้นคือการเพิ่มสิทธิ์ด้านความปลอดภัย Cloudant มอบชั้นความปลอดภัยของตนเองบน CouchDB ด้วยการควบคุมสิทธิ์ส่วนบุคคลที่ละเอียดยิ่งขึ้น ดังนั้นเพื่อเขียนรายงานไปยังฐานข้อมูลของเรา เราจำเป็นต้องสร้างบัญชีผู้ใช้ที่มีสิทธิ์ในการเขียน:

  • เลือกส่วน 'ฐานข้อมูล' ในแดชบอร์ด Cloudant ของคุณ
  • คลิกส่วนสิทธิ์ (ไอคอนล็อก) สำหรับฐานข้อมูล acra-{myapp}
  • คลิก 'สร้างคีย์ API'
  • จดชื่อผู้ใช้และรหัสผ่านที่สร้างขึ้น (เราจะใช้ในภายหลัง)
  • เพิ่มสิทธิ์การเขียนสำหรับชื่อผู้ใช้ที่สร้างขึ้น

เพิ่มการอนุญาตด้านความปลอดภัยเพื่อให้เข้าถึงบันทึกและรายงานข้อขัดข้องของ Android ได้ในภายหลัง

การแสดงภาพรายงานข้อขัดข้องของ Android ด้วย acralyzer

เมื่อจำลองแบบแล้ว แดชบอร์ด acralyzer สามารถเข้าถึงได้ง่ายโดยทำตาม https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard ฉันจะยอมรับ: มันไม่ใช่เครื่องมือวิเคราะห์ที่สวยงามที่สุด แต่มันมีจุดมุ่งหมาย

จากเมนูด้านบน คุณสามารถเลือกฐานข้อมูลที่คุณต้องการแสดง (สามารถโฮสต์หลายฐานข้อมูลสำหรับแอพต่างๆ ในโครงการเดียว ซึ่งจะส่งผลต่อโควตาการใช้งานของคุณ) และแสดงตัวอย่างข้อมูลในแดชบอร์ดหลัก ตัวอย่างเช่น คุณสามารถ:

  • พล็อตจำนวนรายงานตามหน่วยเวลา (ชั่วโมง วัน เดือน ฯลฯ)
  • ดูการกระจายรายงานตามเมตริกเฉพาะของ Android (เวอร์ชัน Android, เวอร์ชัน SDK, เวอร์ชันแอป, อุปกรณ์ ฯลฯ)
  • แสดงรายการรายงานข้อขัดข้องทั้งหมด (พร้อมรายละเอียดสแต็กเทรซ) หรือดูบั๊กทั้งหมด (ในที่นี้ “บั๊ก” คือกลุ่มของรายงานที่เหมือนกันซึ่งมาจากผู้ใช้ที่แตกต่างกัน)
  • ดูตัวอย่างรายละเอียดของจุดบกพร่องเดียวและตั้งสถานะว่าได้รับการแก้ไขแล้ว (หากแก้ไขแล้ว)
  • ล้างรายการเก่าหรือล้าสมัย

การแสดงภาพข้อมูลบันทึกข้อขัดข้องของ Android จะมีประโยชน์มากในการปรับปรุงแอปของคุณอย่างมีกลยุทธ์มากขึ้น

โปรดทราบว่าเมตริกข้อขัดข้องของ 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 ในเมื่อมีทางเลือกอื่นที่ดูดีกว่าและเสนอคุณสมบัติเพิ่มเติมสำหรับการใช้งานแบบเดียวกัน ฉันจะให้เหตุผลสองข้อแก่คุณ

  1. ตัวเลือกอื่นๆ ทั้งหมดนี้เป็น โอเพ่นซอร์ส ซอฟต์แวร์ที่เป็นกรรมสิทธิ์ แม้จะมีตะกร้าที่เต็มไปด้วย EULA คุณก็ไม่สามารถแน่ใจได้ ว่า ข้อมูลของคุณถูกรวบรวมและจัดการอย่างไร ในทางกลับกัน ACRA และ acralyzer เป็นโครงการโอเพ่นซอร์สที่โฮสต์บน GitHub ซึ่งคุณสามารถแยกและปรับแต่งตามความต้องการของคุณได้อย่างง่ายดาย

  2. ความคล่องตัวของข้อมูล สมมติว่าคุณไม่พอใจ Cloudant การจำลองและย้ายข้อมูลของคุณไปยังส่วนหลังอื่นทำได้ง่าย คุณรับประกันได้ว่าข้อมูล จะเป็นของคุณ

เช่นเดียวกับตัวเลือกมากมาย ตัวเลือกนี้ขึ้นอยู่กับความชอบส่วนบุคคลและความคุ้นเคย ดูชุดข้อความ Google+ นี้สำหรับการสนทนาเพิ่มเติมเกี่ยวกับทางเลือกต่างๆ ที่มีอยู่เพื่อทำให้แอปของคุณเชื่อถือได้มากขึ้น

สรุปแล้ว

ACRA เป็นไลบรารี่ที่แข็งแกร่งและปรับแต่งได้สูงซึ่งสามารถใช้ร่วมกับ Cloudant และ acralyzer เพื่อให้ได้รายงานข้อขัดข้องอัตโนมัติและการวิเคราะห์ขั้นพื้นฐานฟรีสำหรับแอปของคุณ ทั้งหมดนี้ใช้ความพยายามเพียงเล็กน้อยในการนำไปใช้

การเขียนโค้ด Android ที่เชื่อถือได้นั้นต้องใช้ประสบการณ์และการมองการณ์ไกลเป็นอย่างมาก แต่ไม่มีพวกเราคนใดที่รอบรู้อย่างแท้จริง เตรียมพร้อมสำหรับข้อขัดข้องและข้อผิดพลาดที่ไม่คาดคิด และพร้อมที่จะ แก้ไข สิ่งที่ไม่คาดคิดโดยเร็วที่สุด นั่นเป็นงานประเภทหนึ่งที่นำไปสู่ผลิตภัณฑ์ที่ยอดเยี่ยมและประสบการณ์ผู้ใช้ที่ยอดเยี่ยม

ที่เกี่ยวข้อง: ทำให้แอปของคุณมีกำไร—ใช้ประโยชน์จาก Mobile Analytics