Bitotsav '19 앱이 현실이 된 방법
배경:판테온 '17 ⏪
거의 2년 전인 2017년 9월에 친구인 Ashank Anshuman이 저를 설득하여 우리 연구소의 기술 축제를 위한 앱을 개발하도록 했습니다. 우리는 약 2주 동안 밤낮으로 일했고 축제 시간에 맞춰 출시될 준비를 했습니다. 우리는 지쳤지만 프로덕션에서 사람들이 실제로 사용하는 '저곳'을 얻는 것은 놀라운 느낌이었습니다! 목적을 완벽하게 수행하여 주최측이 참가자들에게 모든 것을 쉽게 전달할 수 있도록 도왔습니다.
Pantheon '17 - Google Play 앱
청소년이 기술 능력을 뽐낼 수 있는 국가적 플랫폼을 제공하기 위한 노력에서; 표시 중... play.google.com
약 120개의 리뷰와 함께 4.9로 평가되었으며 Google의 봇이 어떤 이유로 제거했지만 다른 시간에 대한 이야기입니다. 앱 소스를 공유해 달라는 요청을 몇 차례 받았지만 여러 가지 이유로 거절했습니다. 하지만 대부분 코드, 특히 끝부분에 급하게 나온 부분이 만족스럽지 않았기 때문입니다. 사람들이 배우거나 사용할 수 있을 만큼 좋은 코드를 작성할 시간과 경험이 부족했습니다.
다시 시작합니다! ?
2018년 11월로 빨리감기:Ankit Agrawal(그는 '페스트 가이')은 Android를 다시 방문할 핑계를 찾고 있었기 때문에 연례 사회 문화 축제인 Bitotsav 팀에 합류할 것을 요청했습니다. 이번에는 Ashnk에게 앱 작업을 하도록 설득했습니다(많은 설득력이 필요했습니다!).
우리는 12월에 많은 일을 하지 않았지만 Architecture Components, AndroidX, Jetpack 등과 같은 것에 대해 읽기 시작했습니다. 또한 지난 몇 달 동안 Kotlin에 익숙해졌고 몇 가지 과정이 도움이 되었습니다. 하나뿐인 Hadi Hariri의 강의와 Svetlana Isakova와 Andrey Breslav의 최신 강의(KotlinConf 2018에서 소개) 따라서 Kotlin은 앱을 위한 확실한 선택이었습니다.
Kotlin 프로그래밍 소개
Kotlin 1.0은 2016년 2월에 출시되었으며 그 이후로 전 세계 개발자들에게 채택되었습니다... shop.oreilly.com
자바 개발자를 위한 Kotlin | 코세라
JetBrains의 Java 개발자를 위한 Kotlin입니다. Kotlin 프로그래밍 언어는 더 많은 것을 제공하는 현대적인 언어입니다... www.coursera.org
결정?
1월 상반기도 너무 많은 코드를 작성하지 않고 지나갔다. 내가 정신이 없어서 1월 16일까지 대학에 갈 수 없었기 때문이다. 그러나 우리는 몇 가지 중요한 결정을 내렸습니다.
- Kotlin만 사용
- 기능 기반 패키징 사용
- AndroidX와 함께 Jetpack 아키텍처 구성요소 사용
- API 21을 최소 API로 사용 (22개가 더 나은 선택이었을 수도 있음)
- Android 스튜디오 카나리아 사용
- Git Flow 및 SemVer 사용
- 축제가 끝난 후 공개될 만큼 좋은 코드를 작성하시겠습니까?
기본적으로 2017년의 모든 앱 개발 경험에서 2019년의 최첨단으로 하드 리셋했습니다. 정말 흥미진진하면서도 큰 도전이었습니다.
코드 코드 코드! ?
우리는 Ashank가 앱의 백엔드(DB 및 네트워킹, FCM을 통한 알림, 백그라운드 처리)를 처리하기로 결정했고 Pantheon '17에서 했던 것처럼 프론트엔드 및 통합을 처리하기로 결정했습니다. 시작하고 작업하는 동안 많은 리소스가 유용했지만 Google에서 제공하는 다음과 같은 멋진 코드랩이 단연 최고였습니다.
- 전망 객실 - Kotlin(ViewModel, LiveData 및 Coroutine이 있는 회의실)
- Android 앱에서 Kotlin 코루틴 사용
- 데이터 결합 Codelab
- 탐색 Codelab:(탐색 아키텍처 구성요소)
- WorkManager를 사용한 백그라운드 작업
Google Codelabs
Google Developers Codelabs는 가이드가 있는 튜토리얼, 실습 코딩 경험을 제공합니다. 대부분의 Codelab에서 단계별로 안내해 드립니다... codelabs.developers.google.com
또한 Google의 Sunflower 및 Google IO 18 앱은 참조용으로 이상적인 코드베이스였습니다. Android Dev Summit 앱도 미리 알았더라면 참고할 수 있는 좋은 소스였을 것입니다!
googlesamples/android-sunflower
Android Jetpack을 사용한 Android 개발 모범 사례를 보여주는 원예 앱. - googlesamples/android-sunflower github.com
이것들을 무기고에 넣고 코딩을 시작했습니다. 새로운 탐색 아키텍처 구성요소를 사용하기로 결정했습니다. 단일 활동 앱 아키텍처 구현 . Ashank는 Room과 FCM으로 시작했습니다. 저도 코인을 사용할 생각을 하고 있었습니다. IoC용 하지만 확실하지 않습니다.
덧붙여서, Joe Birch는 그 즈음에 caster.io에서 Koin 과정을 시작했고(작은 기능, 전문가가 진행하는 핵심 과정, 출시 후 1주일 동안 각각 무료입니다!), 함께 진행하기로 결정했습니다. 거기에 후회는 없습니다! 진심으로, 안드로이드 지원은 놀랍고 문서는 훌륭합니다 ❤️
코인
이 과정에서는 완전한 기능을 갖춘 빌드를 통해 Koin이라는 종속성 주입 프레임워크에 대해 배웁니다. caster.ioNavigation 및 Koin 설정으로 UI로 시작하여 머티리얼 디자인 구성 요소를 사용하기로 결정했습니다. 지침이 적용되는 UI 전용 및 문서 편리했다. 또한 갖고 있었습니다. 데이터 결합 사용 나는 그것을 사랑하기 때문에! 한편 Ashnk는 WorkManager, 를 구현했습니다. Firebase Job Dispatcher 대신 사용하기로 결정한 , 완전한 Jetpack이 시작됩니다!
가장 먼저 개발한 것은 Schedule UI로 Architecture Components에 익숙해지는 데 도움이 되었습니다. 이 작업이 완료되면 앱에서 가장 복잡한 부분인 등록 흐름 UI로 넘어갔습니다. 이 UI는 LiveData 및 Navigation을 사용하여 실시간으로 검증된 양식으로 3단계를 구현하는 기능을 갖추고 있습니다. 곧?!). 덕분에 이러한 구성 요소에 대해 훨씬 더 확신을 갖게 되었고 그 이후부터는 순조롭게 주행할 수 있었습니다. 우리는 계획된 기능을 완료하고 일부 문제를 발견하고 일부 버그를 수정했습니다.
시작 ?
주요 기능이 구현된 상태에서 몇 가지 UI 브러시업을 수행하고 몇 가지 최종 TODO를 완료하고 출시 준비를 마쳤습니다! 마지막으로, 저는 항상 계획했던 것을 추가했습니다.
모든 구성이 변경될 때마다 다른 색상 테마! 이것은 "아시아의 색"이라는 축제의 주제를 보완하기 위해 수행되었습니다.
앱이 2019년 2월 11일 Play 스토어에 출시되었습니다! ??
Bitotsav '19 - Google Play 앱
Birla Institute of Technology의 제29회 Bitotsav '19, Mesra의 연례 사회 문화 축제가 모두 열릴 예정입니다... play.google.comBitotsav '19 앱 수정 및 업데이트
우리는 몇 시간 만에 두 가지 버그에 직면했고(유일한!) 즉시 수정했습니다. 첫 번째는
suspend
로 표시된 DAO 메서드와 관련이 있습니다. , 하지만 정확히 왜 그런 일이 일어났는지 100% 확신할 수 없습니다. 두 번째 문제는 난독화로 인해 직렬화 실패가 발생했으며 K유지로 쉽게 해결되었습니다. 주석.그런 다음 다음 업데이트 작업을 시작했습니다. 피드에 순위표를 추가하고 일정에 축제를 위한 야간 이벤트를 추가하고 몇 가지 다른 변경 사항을 적용했습니다. 몇 가지 사소한 기능을 더 추가한 후 세 번째 업데이트가 이루어졌습니다.
페스티벌은 성공적으로 진행되었으며 1000명이 넘는 참가자가 앱을 사용했습니다!
친구 Sushant Gupta가 서버에 DB를 잘못 입력하여 사소한 문제에 직면했습니다. Sushant Gupta는 나중에 이에 대해 다소 극적인 블로그 게시물을 작성했습니다.
Bitotsav '19 웹사이트에 대한 DDoS 공격
기술적인 글이 아닙니다. 이것은 여러 웹 및 앱에 대한 교훈이 될 수 있는 공유하고 싶은 이야기입니다... cs.sonudoo.com축제가 끝난 후 우리는 이벤트 세부 정보, 피드 등을 앱의 일부로 JSON으로 저장하고 개인 정보 보호를 위해 주최자의 연락처 번호를 수정하는 최종 업데이트를 출시했습니다.
공개!
코드를 공개할 때였습니다! 이번에는 이해할 수 있는 코드를 작성하는 데 신경을 썼고, 이를 세상에 선보일 준비가 되었습니다. 멋진 README를 준비했고 저장소 기록에서 연락처 번호를 제거하기 위해 놀라운 BFG Repo Cleaner 도구를 사용했습니다.
Bitotsav '19 앱의 코드는 이제 공개되어 누구나 검토, 참조, 학습 또는 사용할 수 있습니다! 확인하고 떠나는 것을 잊지 마세요? ?
aksh1618/Bitotsav-19
Bitotsav '19의 공식 앱. GitHub에서 계정을 만들어 aksh1618/Bitotsav-19 개발에 기여하세요. github.com도전?
개발 과정에서 몇 가지 문제에 직면했습니다.
- 시간 제한: 우리가 직면한 주요 과제는 매우 새로운 개념을 배우고 수백 명이 사용할 앱을 만드는 데 사용할 시간이 매우 제한적이라는 것이었습니다. 이 시간 제약으로 인해 많은 연속 시간이 투입되어 스트레스와 피로로 이어졌지만 힘을 내고 전달할 수 있었습니다!
- 코루틴이 있는 WorkManager: 기술적인 측면에서 우리는 WorkManager와 Coroutine을 사용하면서 몇 가지 사소한 문제에 직면했지만 극복할 수 있었습니다. 개발이 계속됨에 따라 Android SDK 전체에서 코루틴에 대한 더 나은 지원을 원하십니까?.
- API 21: 대부분의 Android 기기는 어쨌든 API 21 이상이므로 이전 버전에서 작동하도록 모든 것을 조정하지 않아도 되도록 최소 API 21을 선택했습니다. 그러나 놀랍게도 API 21, 특히 보기 배경에서 작동을 거부하는 일부 기능이 있습니다. 정말 실망스러웠습니다. 최소 API를 22로 설정했으면 좋았을 텐데, 앱이 우리가 테스트한 두 개의 API 21 기기에만 설치되었다는 것을 알았을 때 더욱 그랬습니다.
- 기기 부족: 우리가 직면한 또 다른 문제는 테스트할 장치가 충분하지 않다는 것이었습니다. Pantheon '17 동안에는 200명 정도의 호스텔이 있어서 테스트가 쉬웠습니다. 이번에는 대부분의 사람들이 인턴십을 위해 떠났으므로 우리는 코드에 대한 자신감을 가질 수 밖에 없었습니다!
- 코드 검토자 없음: 우리가 사용했던 많은 것들이 우리에게 새로운 것이었으며 우리는 모든 것을 제대로 하고 있는지 확인하기 위해 최선을 다했습니다. 그러나 검토자가 있으면 매우 도움이 될 것입니다. 지금이라도 앱의 코드를 빠르게 검토해 주시면 감사하겠습니다!
- 묵시록: 우리는 또한 ' DDoS ' 문제, 위에 링크된 Sushant의 블로그 게시물을 읽어보세요. 후회하지 않을 것입니다!
테이크아웃 ✅
- Kotlin + Jetpack =❤️ : 주요 시사점은 Android 개발이 먼 길을 왔다는 것입니다. Kotlin과 Jetpack을 사용하면 확실히 훨씬 더 재미있고 즐겁습니다! 진지하게, 여러 오르가즘이 있었습니다. 코딩 과정의 순간!
- 불가능한 것은 없습니다: 진부하지만 사실입니다. 열심히 하려는 의지만 있다면 아무리 어려워도 무엇이든 할 수 있습니다. 물론 스트레스가 많은 단계가 있지만 계속 힘을 내십시오. 자신을 믿으세요!
죄송합니까?
- 인스턴트 앱/앱 번들 없음 :우리는 바로 이것을 놓쳤습니다. 그것에 대해 생각하지도 않았습니다. 아, 아마 다음 기회에.
- 테스트 없음 :나도 알아, 이거 큰일이야! 적절한 테스트가 있으면 많은 도움이 될 수 있었지만 시간 제약으로 인해 아직 오지 않은 '나중에'까지 테스트를 작성하지 않기로 결정했습니다.
TL;DR. ?
2019년부터 앱으로 시작하시나요?
Kotlin 및 코루틴 사용
- Kotlin을 배우고 독점적으로 사용하세요!
- Android에서 코루틴을 사용하는 방법을 알아보세요.
AndroidX에서 Jetpack 구성요소 사용
- 단일 활동 아키텍처용 탐색 구성요소 사용 방법을 배웁니다.
- 지속성을 위한 UI 및 Room용 수명 주기 구성 요소 사용 방법을 배웁니다.
- 자신에게 호의를 베풀고 데이터 바인딩을 사용하십시오!
- 백그라운드 처리를 위해 WorkManager를 사용하는 방법을 알아보세요.
재료 구성요소 사용
- 재료 구성 요소 지침
- 재료 구성요소 Android 문서
쓰기 테스트!
글쎄, 우리는 할 수 없었지만 당신은 확실히해야합니다! 테스트를 건너뛰지 마십시오.
소스 코드 참조
.. 이러한 작업을 수행하는 앱:Sunflower 앱, IO 앱, Dev Summit 앱 또는 물론 Bitotsav '19 앱! (또한 별표 ?)
최신 정보 받기
블로그와 뉴스레터를 구독하여 최신 정보를 받아보세요! 다음은 Android Weekly, ProAndroidDev, AndroidPub, Kotlin Weekly에서 시작할 수 있는 몇 가지입니다. 압도된? Huyen Tue Dao의 멋진 강연을 확인하세요:
Be Like Water:Android 따라잡기
360 AnDev의 강연이 마음에 드셨다면 Patreon을 통해 컨퍼런스를 지원해주세요! 모바일 작업의 한 가지 상수는... academy.realm.io자, 이제 갑니다. 지금은 Android 개발을 위한 좋은 시간입니다. 새 앱을 시작하고 즐겁게 작업하는 것을 잊지 마세요!
배운 것이 있으면 댓글을 남겨주세요. 건설적인 비판 환영?
트위터에서 날 잡아줘? , 링크드인 ? 또는 GitHub ??
다음 시간까지 ??