Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Android

เชี่ยวชาญการพัฒนาแอป Android ในปี 2019: ยอมรับฟีเจอร์ล่าสุด

หรือว่าแอป Bitotsav ’19 กลายเป็นความเป็นจริงอย่างไร

พื้นหลัง: Pantheon ’17 ⏪

เกือบสองปีก่อน ในเดือนกันยายน 2017 เพื่อนชื่อ Ashank Anshuman ชวนให้ทำงานบนแอปสำหรับงานเทศกาลเทคนิคของสถาบันเรา เราทำงานประมาณสองสัปดาห์ วันและคืน เตรียมพร้อมส่งออกทันเวลาสำหรับเทศกาล แม้เราจะเหนื่อยล้าความรู้สึกที่ได้เมื่อมีสิ่งบางอย่าง 'ออกสู่สาธารณะ' ในโปรดักชัน ที่ผู้คนใช้จริงนั้นน่าทึ่งมาก! มันทำหน้าที่ได้อย่างสมบูรณ์ ช่วยผู้จัดงานสื่อสารทุกอย่างให้ผู้เข้าร่วมได้ง่าย

Pantheon '17 - Apps on Google Play
ในความพยายามที่จะให้เวทีระดับชาติสำหรับเยาวชนแสดงทักษะทางเทคนิค; แสดง…play.google.com

ได้รับการจัดอันดับ 4.9 พร้อมรีวิวประมาณ 120 รีวิว ซึ่งบอทของ Google ลบไปด้วยเหตุผลบางอย่าง แต่เป็นเรื่องราวอีกครั้ง เราได้รับคำขอให้แชร์ซอร์สโค้ดของแอป แต่เราปฏิเสธ เนื่องจากหลายเหตุผล — แต่ส่วนใหญ่เพราะเราไม่พอใจกับโค้ด โดยเฉพาะส่วนที่เร่งเร้าในช่วงท้าย เราเพียงแค่ไม่มีเวลาและประสบการณ์พอที่จะเขียนโค้ดที่พอจะให้คนอื่นเรียนรู้และ/หรือใช้งาน

Here We Go Again! ?

ไปถึงพฤศจิกายน 2018: Ankit Agrawal (เขาคือ 'ผู้ชายเทศกาล') ขอให้เข้าร่วมทีม Bitotsav เทศกาลสังคม-วัฒนธรรมประจำปีของเรา ซึ่งผมตกลง เพราะกำลังหาข้ออ้างกลับมาที่ Android อีกครั้ง ครั้งนี้ผมชวน Ashank (ใช้ความพยายามมาก!) ให้ทำงานบนแอป

เราไม่ได้ทำอะไรมากในเดือนธันวาคม แต่ผมเริ่มอ่านเรื่อง Architecture Components, AndroidX, Jetpack เป็นต้น ผมยังคุ้นเคยกับ Kotlin มาเป็นเดือนๆ โดยมีหลักสูตรสองหลักสูตรที่ช่วยมาก: หลักสูตรสองส่วนโดย Hadi Hariri และอีกหลักสูตรโดย Svetlana Isakova และ Andrey Breslav (ซึ่งเขาแนะนำใน KotlinConf 2018) Kotlin จึงเป็นตัวเลือกที่ชัดเจนสำหรับแอป

Introduction to Kotlin Programming
Kotlin 1.0 เปิดตัวเมื่อกุมภาพันธ์ 2016 และตั้งแต่นั้นมาได้รับการยอมรับจากนักพัฒนาทั่วโลก…shop.oreilly.com
Kotlin for Java Developers | Coursera
Kotlin for Java Developers จาก JetBrains ภาษาโปรแกรม Kotlin เป็นภาษาสมัยใหม่ที่ให้คุณ…www.coursera.org

การตัดสินใจ ?

ครึ่งแรกของเดือนมกราคมก็ผ่านไปโดยไม่ได้เขียนโค้ดมาก เพราะผมยุ่งและไม่สามารถไปถึงวิทยาลัยจนถึงวันที่ 16 ม.ค. แต่เราทำการตัดสินใจสำคัญบางอย่าง:

  • ใช้ Kotlin เพียงอย่างเดียว
  • ใช้การบรรจุแบบฟีเจอร์ (Feature-based packaging)
  • ใช้ Jetpack Architecture Components กับ AndroidX
  • ใช้ API 21 เป็น Min API (22 อาจเป็นตัวเลือกที่ดีกว่า)
  • ใช้ Android Studio Canary
  • ใช้ Git Flow & SemVer
  • เขียนโค้ดให้พอจะทำสาธารณะหลังเทศกาล ?
เชี่ยวชาญการพัฒนาแอป Android ในปี 2019: ยอมรับฟีเจอร์ล่าสุด
Jetpack กับ AndroidX

ก็คือการรีเซ็ตแบบเต็มที่จากประสบการณ์พัฒนาแอปในปี 2017 สู่ bleeding edge ในปี 2019 มันน่าตื่นเต้นแต่อย่างไรก็ตามก็เป็นความท้าทายใหญ่

Code Code Code! ?

เราตัดสินใจว่า Ashank จะดูแล Backend ของแอป (DB & Networking, Notifications ด้วย FCM, Background Processing) และผมจะดูแล Frontend และ Integration เหมือนที่ทำสำหรับ Pantheon ’17 ทรัพยากมากมายช่วยได้ขณะเริ่มต้นและขณะทำงาน แต่ที่ดีที่สุดโดยไกลคือ Codelabs เก๋ๆ จาก Google นี้:

  • Room with a View - Kotlin (ViewModel, LiveData & Room กับ Coroutines)
  • การใช้ Kotlin Coroutines ในแอป Android ของคุณ
  • Data Binding Codelab
  • Navigation Codelab: (Navigation Architecture Component)
  • Background Work with WorkManager
Google Codelabs
Google Developers Codelabs ให้ประสบการณ์เขียนโค้ดแบบนำทาง ตามบทช่วยสอน แบบ hands-on คอเล็บส่วนใหญ่จะพาคุณผ่าน…codelabs.developers.google.com

นอกจากนี้ แอป Sunflower & Google IO 18 ของ Google เป็นโค้ดเบสที่เหมาะสำหรับการอ้างอิง แอป Android Dev Summit ก็ควรจะเป็นแหล่งอ้างอิงที่ดี ถ้าผมรู้จักมันก่อนหน้านี้!

googlesamples/android-sunflower
แอปปลูกต้นไม้ที่แสดงแนวทางปฏิบัติที่ดีที่สุดในการพัฒนา Android ด้วย Android Jetpack - googlesamples/android-sunflowergithub.com

ด้วยเครื่องมือเหล่านี้ในมือ เราเริ่มเขียนโค้ด ผมตัดสินใจใช้ Navigation architecture component เพื่อนำสถาปัตยกรรม Single-Activity App มาใช้ Ashank เริ่มกับ Room และ FCM ผมยังคิดว่าจะใช้ Koin สำหรับ IoC แต่ไม่แน่ใจ

โดยบังเอิญ Joe Birch เปิดหลักสูตร Koin ประมาณเวลานั้นบน caster.io (คอร์สสั้น จบช่วง โดยมืออาชีพ แต่ละคอร์สฟรีหนึ่งสัปดาห์เมื่อเปิดตัว!) และตัดสินใจไปด้วย ไม่เสียดายเลย! รองรับ Android ดีมาก และเอกสารประกอบเยี่ยม ❤️

Koin
ในหลักสูตรนี้ เราจะเรียนรู้เกี่ยวกับเฟรมเวิร์ก Dependency Injection ที่รู้จักในชื่อ Koin โดยการสร้างแอปที่ทำงานได้เต็มรูปแบบ…caster.io

ด้วยการตั้งค่า Navigation และ Koin ผมเริ่ม UI ตัดสินใจ ใช้ Material Design Components เพียงอย่างเดียวสำหรับ UI ซึ่ง แนวทางปฏิบัติ และเอกสาร ช่วยได้มาก ผม ต้อง ใช้ Data Binding เพราะผมชอบมัน! ขณะเดียวกัน Ashank นำ WorkManager มาใช้ ซึ่งเราตัดสินใจ ใช้แทน Firebase Job Dispatcher ไป Jetpack เลย!

สิ่งแรกที่ผมพัฒนาคือ Schedule UI ซึ่งช่วยให้ผมคุ้นเคยกับ Architecture Components ทำเสร็จแล้ว ผมไปต่อที่ Registration-flow UI อาจเป็นส่วนซับซ้อนที่สุดของแอป ซึ่งมีการใช้ LiveData และ Navigation อย่างขั้นสูงสำหรับการใช้งานสามขั้นตอนพร้อมฟอร์มที่ตรวจสอบแบบเรียลไทม์ (คุ้มค่าที่จะเขียนบล็อกโพสต์ของตัวเอง เร็วๆ นี้?!). ทำให้ผมมั่นใจมากขึ้นในคอมโพเนนต์เหล่านี้ และจากนั้นก็ราบรื่น

Launch ?

เมื่อฟีเจอร์หลักพร้อม เราทำ UI brush-ups เสร็จ TODOs ท้ายที่สุด และพร้อมเปิดตัว! เป็นท้ายที่สุด ผมเพิ่มสิ่งที่วางแผนไว้ตลอด:

ธีมสีที่แตกต่างกันในทุกครั้งที่เปลี่ยนการกำหนดค่า! ทำเพื่อประกอบธีมของเทศกาล: “สีของเอเชีย”

แอปเปิดตัวบน Play Store วันที่ 11 ก.พ. 2562! ??

Bitotsav '19 - Apps on Google Play
Bitotsav '19 ฉบับที่ 29 ของงานเทศกาลสังคม-วัฒนธรรมประจำปีของสถาบันเทคโนโลยีบีรลา เมสรา พร้อมจะจัดขึ้น…play.google.com
เชี่ยวชาญการพัฒนาแอป Android ในปี 2019: ยอมรับฟีเจอร์ล่าสุด
Bitotsav ’19 App

แก้ไข & อัปเดต

เราเจอ (เพียงแค่!) สองบั๊กภายในไม่กี่ชั่วโมง แก้ไขทันที บั๊กแรกเกี่ยวกับ DAO methods ที่ถูกทำเครื่องหมาย suspend แต่ผมยังไม่แน่ใจ 100% ว่าเกิดจากอะไร ? บั๊กที่สองเกิดจาก Obfuscation ทำให้ Serialization ล้มเหลว แก้ไขง่ายด้วย Keep annotation

จากนั้นผมเริ่มทำงานบนอัปเดตถัดไป ซึ่งเพิ่ม Leaderboard ใน Feed และกิจกรรมกลางคืนใน Schedule พร้อมการเปลี่ยนแปลงอื่นๆ อัปเดตครั้งที่สามตามมาเพิ่มฟีเจอร์เล็กๆ น้อยๆ

เทศกาลดำเนินไปอย่างดี แอปถูกใช้งานโดยผู้เข้าร่วมกว่า 1000 คน!

เราเจอปัญหาเล็กน้อยจากการป้อนข้อมูล DB ผิดบนเซิร์ฟเวอร์โดยเพื่อน Sushant Gupta ซึ่งเขาเขียนบล็อกโพสต์ดราม่ากล่าวถึงเรื่องนี้ต่อมา

DDoS Attack on Bitotsav '19 Website
นี้ไม่ใช่บทความทางเทคนิค นี่เป็นเรื่องราวที่ผมอยากแบ่งปันซึ่งอาจเป็นบทเรียนสำหรับนักพัฒนา Web & App หลายคน…cs.sonudoo.com

หลังเทศกาล เราเผยแพร่อัปเดตสุดท้าย เก็บรายละเอียดกิจกรรม Feed เป็น JSON ส่วนหนึ่งของแอป และลบหมายเลขติดต่อผู้จัดงานเพื่อเหตุผลความเป็นส่วนตัว

Going Public!

ถึงเวลาเปิดซอร์สโค้ด! รอบนี้เราดูแลเขียนโค้ดให้เข้าใจง่าย และพร้อมสำหรับโลก ผมเตรียม README ที่สวยงาม และเพื่อลบหมายเลขติดต่อออกจากประวัติ Repository เราใช้เครื่องมือ BFG Repo Cleaner ที่ยอดเยี่ยม

โค้ดสำหรับแอป Bitotsav ’19 ตอนนี้สาธารณะ สำหรับใครก็ตามที่จะทบทวน อ้างอิง เรียนรู้ หรือใช้งาน! ไปดูและอย่าลืมทิ้งดาว ?

aksh1618/Bitotsav-19
แอปอย่างเป็นทางการสำหรับ Bitotsav '19 Contribute to aksh1618/Bitotsav-19 development by creating an account on GitHub.github.com

ความท้าทาย ?

เราเผชิญความท้าทายบางอย่างระหว่างการพัฒนา:

  • ข้อจำกัดด้านเวลา: ความท้าทายหลักคือมีเวลาจำกัดมากในการเรียนรู้แนวคิดใหม่มากและนำไปสร้างแอปที่จะถูกใช้โดยร้อยๆ คน ข้อจำกัดเวลานี้นำไปสู่ชั่วโมงต่อเนื่องมาก ส่งผลให้เครียดและเหนื่อย แต่เราทำได้!
  • WorkManager กับ Coroutines: ด้านเทคนิค เราเจอความท้าทายเล็กน้อยกับ WorkManager และ Coroutines แต่สามารถเอาชนะได้ หวังว่าจะมีการรองรับ Coroutines ดีกว่านี้ทั่ว Android SDK
  • API 21: เราเลือก Min API 21 เพื่อหลีกเลี่ยงการปรับทุกอย่างให้ทำงานบนเวอร์ชันเก่า เนื่องจากอุปกรณ์ Android ส่วนใหญ่อยู่บน API 21 ขึ้นไป แต่เพี้ยนบางอย่างไม่ทำงานบน API 21 โดยเฉพาะพื้นหลังมุมมอง (view backgrounds)rils คือเรื่องรำคาญ ทำให้อยากให้ Min API เป็น 22 แม้กระทั่งเมื่อพบว่าแอปถูกติดตั้งบนอุปกรณ์ API 21 เพียงสองเครื่อง: เครื่องที่เราทดสอบ ?
  • ขาดอุปกรณ์: อีกความท้าทายคือไม่มีอุปกรณ์พอทดสอบ ระหว่าง Pantheon ’17 เรามีหอพัก ~200 คน ทดสอบง่าย ครั้งนี้ส่วนใหญ่ไปฝึกงาน เราเหลือเพียงความมั่นใจในโค้ด!
  • ไม่มี Code Reviewers: หลายอย่างที่เราใช้ใหม่ และเราพยายามทำให้ถูกต้องที่สุด แต่ถ้ามี Reviewer จะช่วยมาก แม้ตอนนี้ ถ้าคุณรู้สึกว่าสามารถรีวิวโค้ดแอปได้ เราจะขอบคุณมาก!
  • วันสิ้นโลก: เรายังเจอปัญหา ' DDoS ’ อ่านบล็อกของ Sushant ลิงก์ด้านบน คุณจะไม่เสียดาย!

สรุป ✅

  • Kotlin + Jetpack = ❤️ : สรุปหลักคือการพัฒนา Android ได้ก้าวไกล และด้วย Kotlin และ Jetpack มันสนุกและสุขใจอย่างแท้จริง! จริงๆ มีหลายช่วง orgasmic ระหว่างเขียนโค้ด!
  • ไม่มีอะไรเป็นไปไม่ได้: คลิเช่แต่จริง: ถ้าคุณมีขจีทำงานหนัก คุณทำอะไรได้ ไม่ว่าจะยากแค่ไหน ตอนเครียดจะมี แต่มองไปข้างหน้า 相信在自己身上!

สิ่งที่เสียดาย ?

  • ไม่มี Instant App / App Bundles: เราพลาดอย่างสมบูรณ์ ไม่ได้คิดถึงเลย อาจจะครั้งหน้าจะได้
  • ไม่มี Tests: ผมรู้ นี่ใหญ่! การมี Tests ที่เหมาะสมช่วยได้มาก แต่เนื่องจากข้อจำกัดเวลา เราตัดสินใจไม่เขียน Tests จนกว่า 'ภายหลัง' ซึ่งยังไม่มาถึง ?.

TL;DR. ?

เริ่มต้นด้วยแอปในปี 2019?

ใช้ Kotlin & Coroutines

  • เรียนรู้ Kotlin และใช้เพียงอย่างเดียว!
  • เรียนรู้การใช้ Coroutines กับ Android.

ใช้ Jetpack Components กับ AndroidX

  • เรียนรู้การใช้ Navigation Component สำหรับ Single-Activity Architecture.
  • เรียนรู้การใช้ Lifecycle Components สำหรับ UI & Room สำหรับ Persistence.
  • ทำให้ตัวเองเป็นการได้และใช้ Data Binding!
  • เรียนรู้การใช้ WorkManager สำหรับ Background Processing.

ใช้ Material Components

  • Material Components Guidelines
  • Material Components Android Docs

เขียน Tests!

เราไม่ได้ทำ แต่น้องๆ ควรทำ! อย่าเลิก Tests!

อ้างอิง Source Code

.. ของแอปที่ทำสิ่งเหล่านี้: Sunflower App, IO App, Dev Summit App หรือแน่นอน Bitotsav ‘19 App! (และทิ้งดาว ?)

อยู่ในข่าวสาร

สมัครรับบล็อกและจดหมายข่าวเพื่ออยู่ในข่าวสาร! นี่คือบางตัวเริ่มต้น: Android Weekly, ProAndroidDev, AndroidPub, Kotlin Weekly. รู้สึกท่วมท้น? ดู Talk เก๋ๆ นี้โดย Huyen Tue Dao:

Be Like Water: Keeping up with Android
ถ้าคุณชอบการพูดจาก 360 AnDev โปรดสนับสนุนการประชุมผ่าน Patreon! ความคงที่ของการทำงานใน Mobile คือ…academy.realm.io

ดีแล้วครับ นี่เป็นเวลาที่ยอดเยี่ยมสำหรับการพัฒนา Android เลยไปเริ่มแอปใหม่ของคุณ และอย่าลืมสนุกขณะทำมัน!

ถ้าเรียนรู้อะไรได้ ทิ้งความคิดเห็น นقدเชิงสร้างสรรค์ยินดีรับ ?

ติดตามผมบน Twitter ? , LinkedIn ? หรือ GitHub ??

จนกว่าจะพบกันใหม่ ??