Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Android

Làm Chủ Phát Triển App Android Năm 2019: Đón Đầu Các Tính Năng Mới Nhất

hay là ứng dụng Bitotsav '19 trở thành hiện thực như thế nào

Bối cảnh: Pantheon '17 ⏪

Gần hai năm trước, vào tháng 9 năm 2017, một người bạn tên Ashank Anshuman thuyết phục tôi làm app cho lễ hội kỹ thuật của viện. Chúng tôi làm việc khoảng hai tuần, ngày đêm, để kịp phát hành đúng lúc lễ hội. Mặc dù kiệt sức, nhưng cảm giác tuyệt vời khi đưa thứ gì đó 'ra ngoài', vào production, mà người ta thực sự dùng! Nó phục vụ mục đích hoàn hảo, giúp ban tổ chức dễ dàng truyền đạt mọi thứ cho người tham gia.

Pantheon '17 - Apps on Google Play
Trong nỗ lực cung cấp nền tảng quốc gia cho thanh niên trưng bày kỹ năng kỹ thuật; hiển thị…play.google.com

Được đánh giá 4.9 với khoảng 120 review, mà bot của Google gỡ bỏ vì lý do nào đó, nhưng đó là chuyện khác. Chúng tôi nhận được yêu cầu chia sẻ source code, nhưng từ chối, vì nhiều lý do — nhưng chủ yếu vì không hài lòng với code, đặc biệt các phần vội vã gần cuối. Chỉ đơn giản là không đủ thời gian và kinh nghiệm để viết code đủ tốt để mọi người học hỏi và/hoặc sử dụng.

Lại Bắt Đầu Lại! ?

Nhảy tới tháng 11 năm 2018: Ankit Agrawal (anh ấy là 'người lễ hội') mời tôi tham gia team Bitotsav, lễ hội văn hóa - xã hội hàng năm, mà tôi đồng ý, vì đang tìm lý do để quay lại Android. Lần này tôi thuyết phục Ashank (tốn nhiều công!) để cùng làm app.

Tháng 12 không làm nhiều, nhưng tôi bắt đầu đọc về Architecture Components, AndroidX, Jetpack v.v. Cũng đã làm quen với Kotlin qua vài tháng qua, với hai khóa học quan trọng: khóa hai phần của Hadi Hariri và khóa mới hơn của Svetlana Isakova và Andrey Breslav (được giới thiệu tại KotlinConf 2018). Kotlin trở thành lựa chọn hiển nhiên cho app.

Introduction to Kotlin Programming
Kotlin 1.0 phát hành tháng 2/2016, và kể từ đó đã được các developer trên thế giới đón nhận…shop.oreilly.com
Kotlin for Java Developers | Coursera
Kotlin for Java Developers từ JetBrains. Ngôn ngữ lập trình Kotlin là ngôn ngữ hiện đại cho bạn nhiều…www.coursera.org

Quyết định ?

Nửa đầu tháng 1 cũng trôi qua với không nhiều code được viết, vì tôi bận và không tới trường được cho đến 16/1. Tuy nhiên, chúng tôi đã đưa ra quyết định lớn:

  • Dùng Kotlin hoàn toàn
  • Dùng feature-based packaging
  • Dùng Jetpack Architecture Components với AndroidX
  • Dùng API 21 làm Min API (22 có thể là lựa chọn tốt hơn)
  • Dùng Android Studio Canary
  • Dùng Git Flow & SemVer
  • Viết code đủ tốt để công khai sau lễ hội ?

Làm Chủ Phát Triển App Android Năm 2019: Đón Đầu Các Tính Năng Mới Nhất

Jetpack với AndroidX

Về cơ bản, một hard reset từ toàn bộ kinh nghiệm phát triển app năm 2017 sang bleeding edge năm 2019. Rất hứng thú, nhưng cũng là thách thức lớn.

Code Code Code! ?

Chúng tôi quyết định Ashank lo Backend (DB & Networking, Notifications với FCM, Background Processing) và tôi lo Frontend và Integration, như Pantheon '17. Nhiều tài nguyên giúp ích khi bắt đầu và làm việc, nhưng tốt nhất là những codelabs tuyệt vời của Google:

  • Room with a View - Kotlin (ViewModel, LiveData & Room với Coroutines)
  • Using Kotlin Coroutines in your Android App
  • Data Binding Codelab
  • Navigation Codelab: (Navigation Architecture Component)
  • Background Work with WorkManager
Google Codelabs
Google Developers Codelabs cung cấp trải nghiệm coding hướng dẫn, thực hành. Hầu hết codelabs sẽ dẫn bạn qua…codelabs.developers.google.com

Cũng, app Sunflower & Google IO 18 của Google là codebase tham khảo lý tưởng. Android Dev Summit app cũng tốt nếu tôi biết sớm hơn!

googlesamples/android-sunflower
App chăm sóc cây minh họa best practices Android development với Android Jetpack. - googlesamples/android-sunflowergithub.com

Với 'vũ khí' này, chúng tôi bắt đầu code. Tôi quyết định dùng Navigation architecture component để implement kiến trúc single-Activity. Ashank bắt đầu với Room và FCM. Tôi cũng nghĩ đến Koin cho IoC, nhưng chưa chắc.

Ngẫu nhiên, Joe Birch ra mắt khóa Koin ngay lúc đó trên caster.io (Khóa nhỏ, gọn, của chuyên gia, mỗi khóa miễn phí một tuần khi ra mắt!), và quyết định dùng. Không hối hận! Hỗ trợ Android tuyệt vời và docs tuyệt vời ❤️

Koin
Trong khóa này, chúng ta sẽ học về dependency injection framework Koin bằng cách xây dựng một ứng dụng đầy đủ chức năng…caster.io

Với Navigation và Koin setup xong, tôi bắt đầu UI, quyết định dùng Material Design Components hoàn toàn cho UI, guidelines và docs rất giúp. Cũng bắt buộc dùng Data Binding vì tôi thích nó! Trong khi đó Ashank implement WorkManager, chúng tôi quyết định dùng thay Firebase Job Dispatcher, đi full Jetpack!

Điều đầu tiên tôi phát triển là Schedule UI, giúp quen với Architecture Components. Xong đó chuyển sang Registration-flow UI, có lẽ phần phức tạp nhất, với advanced usage của LiveData và Navigation cho ba bước với form validate real-time (Đáng một bài blog riêng, coming soon?!). Điều này làm tôi tự tin hơn với các component, và từ đó đi suôn sẻ. Hoàn thành các tính năng dự kiến, phát hiện một số gotchas, fix một số bug.

Ra mắt ?

Với các tính năng chính đã implement, chúng tôi làm đẹp UI, hoàn thành các TODO cuối, và sẵn sàng ra mắt! Như finishing touch, tôi thêm thứ đã dự định từ đầu:

Theme màu khác nhau trên mỗi configuration change! Điều này để phù hợp theme lễ hội: "Colours of Asia"

App lên Play Store ngày 11/2/2019! ??

Bitotsav '19 - Apps on Google Play
Bitotsav '19 kỳ 29 của viện Birla Institute of Technology, Mesra's annual socio-cultural fest sắp diễn ra…play.google.com

Làm Chủ Phát Triển App Android Năm 2019: Đón Đầu Các Tính Năng Mới Nhất

Bitotsav '19 App

Fixes & Updates

Chúng tôi gặp (duy nhất!) hai bug trong vài giờ, fix ngay. Bug đầu liên quan đến DAO methods marked suspend, nhưng tôi vẫn không 100% chắc tại sao xảy ra ?. Bug thứ hai do obfuscation gây serialization failure, fix dễ dàng với Keep annotation.

Sau đó tôi làm update tiếp, thêm leaderboard trong feed và night events cho lễ hội trong schedule, cùng một số thay đổi khác. Update thứ ba thêm một vài tính năng minor.

Lễ hội diễn ra tốt, app được dùng bởi hơn 1000 người tham gia!

Chúng tôi gặp sự cố nhỏ do entry DB sai trên server bởi bạn Sushant Gupta, sau đó anh ấy viết bài blog khá dramatic về việc này.

DDoS Attack on Bitotsav '19 Website
Đây không phải technical write up. Đây là câu chuyện我想分享 which might be a lesson for several Web & App…cs.sonudoo.com

Sau lễ hội, ra update cuối, lưu event details, feed v.v. dạng JSON như phần của app và ẩn số điện thoại organizer vì lý do privacy.

Công khai!

Đến lúc open source code! Lần này chúng tôi chăm chút viết code dễ hiểu, và sẵn sàng cho thế giới. Tôi chuẩn bị README đẹp, và để xóa số điện thoại khỏi history repo, dùng công cụ BFG Repo Cleaner tuyệt vời.

Code app Bitotsav '19 giờ công khai, ai cũng có thể review, tham khảo, học hỏi hoặc dùng! Xem và đừng quên để ⭐ ?

aksh1618/Bitotsav-19
Official app for Bitotsav '19. Contribute to aksh1618/Bitotsav-19 development by creating an account on GitHub.github.com

Thách thức ?

Chúng tôi gặp một số thách thức khi phát triển:

  • Hạn chế thời gian: Thách thức chính là thời gian rất hạn để học concept rất mới và dùng tạo app cho hàng trăm người. Ràng buộc thời gian dẫn đến nhiều giờ làm liên tục, stress và mệt mỏi, nhưng chúng tôi vượt qua và deliver!
  • WorkManager với Coroutines: Về mặt kỹ thuật, gặp một số thách thức minor với WorkManager và Coroutines, nhưng khắc phục được. Mong hỗ trợ coroutines tốt hơn trong Android SDK khi phát triển tiếp ?.
  • API 21: Chọn min API 21 để tránh adapt cho version cũ, vì hầu hết thiết bị Android đều API 21+. Nhưng ngạc nhiên, một số thứ không chạy trên API 21, đặc biệt view backgrounds. Rất frustrating, làm tôi ước gì đặt min API 22, hơn nữa khi biết app chỉ cài trên 2 thiết bị API 21: cái chúng tôi test ?.
  • Thiếu thiết bị: Thách thức khác là không đủ thiết bị test. Pantheon '17 có ký túc xá ~200 người, test dễ. Lần này hầu hết đi thực tập, chỉ còn tin vào code!
  • Không có code reviewer: Nhiều thứ chúng tôi dùng mới, cố gắng làm đúng hết sức. Nhưng reviewer sẽ rất giúp. Ngay bây giờ, nếu bạn cảm thấy có thể review nhanh code app, chúng tôi rất biết ơn!
  • Thiên thạch: Cũng gặp vấn đề ' DDoS ', đọc blog Sushant link trên, bạn sẽ không hối hận!

Bài học ✅

  • Kotlin + Jetpack = ❤️ : Bài học chính: Android Development đã đi xa và với Kotlin và Jetpack, chắc chắn vui hơn và purely joyful! Thực sự, có nhiều khoảnh khắc orgasmic khi coding!
  • Không có gì là Không thể: Hơi cliché nhưng đúng: nếu có ý chí làm chăm chỉ, bạn làm được bất cứ gì, khó đến đâu. Chắc sẽ có giai đoạn stress, nhưng cứ power through. Chỉ cần tin vào bản thân!

Hối hận ?

  • Không Instant App / App Bundles: Bỏ lỡ hoàn toàn. Không nghĩ đến. Ah well, maybe next time.
  • Không tests: Biết, đây là lớn! Tests proper có thể giúp rất nhiều, nhưng do time constraint, quyết định không viết tests cho đến 'sau này', mà chưa đến ?.

TL;DR. ?

Bắt đầu app mới năm 2019?

Dùng Kotlin & Coroutines

  • Học Kotlin và dùng hoàn toàn!
  • Học dùng coroutines với Android.

Dùng Jetpack Components với AndroidX

  • Học dùng Navigation Component cho Single-Activity Architecture.
  • Học dùng Lifecycle Components cho UI & Room cho persistence.
  • Làm ơn mình xíu và dùng Data Binding!
  • Học dùng WorkManager cho background processing.

Dùng Material Components

  • Material Components Guidelines
  • Material Components Android Docs

Viết Tests!

Chúng tôi không làm được nhưng bạn chắc chắn nên! ĐỪNG bỏ qua tests.

Tham khảo Source Code

.. của các app làm những điều này: Sunflower App, IO App, Dev Summit App hoặc tất nhiên, Bitotsav '19 App! (cũng để ⭐ ?)

Cập nhật liên tục

Đăng ký blog và newsletter để cập nhật! Một vài cái để bắt đầu: Android Weekly, ProAndroidDev, AndroidPub, Kotlin Weekly. Quá tải? Xem talk tuyệt vời của Huyen Tue Dao:

Be Like Water: Keeping up with Android
Nếu bạn thích talks từ 360 AnDev, hãy support conference qua Patreon! Hằng số duy nhất khi làm mobile là…academy.realm.io

Vậy là xong. Đây là thời điểm tuyệt vời cho Android Development, hãy bắt đầu app mới của bạn, và đừng quên vui vẻ khi làm!

Nếu học được gì, để comment. Constructive criticism welcome ?

Tìm tôi trên Twitter ? , LinkedIn ? hoặc GitHub ??

Hẹn gặp lần sau ??