查看原文
其他

参加Google Compose挑战赛的趣事

小虾米君 TechMerger 2021-10-12
最近工作比较忙,再加上参加了Google的Compose挑战赛,Jetpack框架的学习进度放缓了些。

前言

上个月底Google发布了Jetpack Compose的beta版,预示着Compose框架趋于稳定亟待正式公开。同时为了让开发者们尽早上手和测试这个框架,Google搞了个大动作,宣布启动历时4周,每周提交一个Compose作品的设计大赛。
目前大赛已经进入第2周。Google官推显示首周全球有近1000位开发者提交了作品。可以感受到开发者们对于Compose的热情,第一波气氛看来是“躁”起来了。


接下来我将回顾下参加第1周挑战赛发生的趣事。

缘起

我很早就在Google的官方公众号里收到了大赛的消息。
Android 开发挑战赛: Jetpack Compose 助您起飞!
第1周的设计任务是提交一个 宠物领养应用,包含宠物列表和宠物详情两个页面即可。看起来开发难度不大,再加上前五百个完成挑战的人便可获得Google和乐高联名的 Jetpack喷气人积木,我瞬间就产生了兴趣,下班到家就开干。

开干

依照规则采用Compose项目模板创建了我的作品LovePet。可能是英文还不够好亦或是急于求成,对于部分参赛规则的描述的没有看明白就开始敲代码了。这也为后面发生的故事埋下了伏笔。
https://github.com/android/android-dev-challenge-compose
应用的要求比较简单,涉及到主题,布局和跳转这三块知识。但因为是第一次使用Compose这种声明式的UI框架,学习是免不了的,Google友好的开发文档着实帮上了忙。
https://developer.android.google.cn/jetpack/compose/themes
https://developer.android.google.cn/jetpack/compose/layout
https://developer.android.google.cn/jetpack/compose/navigation
一番探索下来应用的基本思路就定下来了。
  • LazyColumn实现列表

  • Row实现列表item

  • Navigation实现画面跳转

  • Card实现详情页面

料想到简单的开发需求必将导致提交的设计大同小异。所以在基本要求以外加了些自己的设计想法。

  • 找了可爱的小狗的图标精心设计了应用的logo
  • 将列表item错位布局,而不都是顶格排布,显得有层次感
  • 在详情card里添加like图标和adopt的按钮,以完善UI交互
  • 整体采用亮黄色填充背景,紫绀色展示内容的风格
展示一下最终效果。


感兴趣的朋友可以参考和star。
https://github.com/ellisonchan/LovePet

提交

可是代码提交之后Github上的check徽章始终显示failing,这时候我才意识到什么地方有问题,转而逐字逐句地查看模板上的详细说明。
其中这条说明,我在第一次看到的时候就没能完全理解并未重视,看来大概率是这个地方不合规范。


查阅了Workflow的资料之后终于明白,Github项目支持设置Workflow,每次代码变动后将自动执行预设的Workflow,项目的Actions视图也可查看其执行的日志方便回溯。
Compose的项目模板预设的Workflow则是Spotless检查和编译测试。
https://github.com/android/android-dev-challenge-compose/blob/main/.github/workflows/Check.yaml
Spotless工具可以检查和调整代码的格式,像通配符*的粗暴import是不被允许的。执行了格式检查后check workflow便可以通过了,项目的徽章如愿显示了passing


对于Spotless这类工具是否有存在的必要难以做出公允的评价。一方面它确实高效;另一方面自动调整格式甚至可能改变代码顺序则会留下隐患。尤其对于大型项目,未知地方的代码被改动是件很恐怖的事情,因为谁也无法保证代码的逻辑和布局的结构不受其影响。
所以面对demo级程序或不熟悉的语言,可以采用这类工具协助学习和适应代码规范。而对于熟知的语言或成熟的项目,最好在编码阶段就按语法规范去coding。

插曲

workflow passing之后,我以为万事大吉,便把这事给忘了。两天后(距离第1场大赛截止还有不到两天)我在网上搜索Croutines资料的时候,无意看到了有篇在讲Compose大赛的文章。
本想着大赛我都搞定了还看个啥,但技术人严重的好奇心和良好的学习态度还是促使我点了进去。(2分钟后我将会无比佩服这个决定,相反如果没有点进去的话事后我也将无比后悔。)
这篇文章非常详尽地阐述了大赛的各项细节,尤其提到了我当时因为科学上网的小麻烦而忽略的一个重要规则:将应用的截图发推,并提交项目地址和推文链接。
https://blog.csdn.net/vitaviva/article/details/114195481
好不容易写好代码了可最后没提交,等于Google人家压根不知道你参赛了,岂不太冤。。。(说实在的必须吐槽一下,Google记载这次比赛规则的地方很散,公众号,github和官网都有记载,还都只说了一部分规则。我相信并不只有我一个人会疏忽某个规则)
火急火燎地发完推文提交好信息后已是凌晨一点了。那会已处于大赛的后半段,想要闯进前五百明显有点悬了,毕竟这是在和全球开发者PK。
就在犯嘀咕的时候我无意中瞥见了文章作者的ID,有点眼熟。仔细一回想,和我以前组长的微信ID好像是一样的。(他的ID是一个英文单词,不认识,有点像Coldplay乐队的名曲viva la vida,但又不完全一样,所以记得比较清楚。)
求证后得知那果然是他的博客,真的很巧,时隔多年又以这种方式帮助了我。 我翻阅了他的其他文章,意外发现早前就已经看过他好几篇文章却没能认出来,哈哈。
我在此隆重推荐他的博客,内容新颖、诚意满满,别的领域不说在android领域那是真的能够帮到你。
https://blog.csdn.net/vitaviva

收获

参赛的过程就那么几天,编码的时间也不长,但Compose框架的优势让我印象深刻。
  • 简洁的代码
  • 便捷的视图预览等AS功能的支持
  • 专注于界面的声明式UI编程方式
  • 构建高性能的原生界面
  • 与Material design和Jetpack框架的完美搭配
每个android开发者都需要尽早了解并使用下这个框架,日后它将是你无法回避的重要技术。

感触

应用的推文发布几天后突然收到一个外国小哥的点赞。


他的个人描述略长,但我注意到了几个关键字:engineer,google,compose。细看发现来头不小,他原来是Google公司Compose框架的发起人,能够收到他的点赞倍感荣幸。
点进他的主页我意外发现了Compose框架背后的故事。早在2017年他便开始提议并着手Compose的开发工作,耗时四年时至近期才熬到beta版的发布。


我不禁地佩服Google这类大公司,为了一项新技术所愿意付出的时间,努力,财力和决心。
也由衷地为这位技术大牛感到开心。毕竟看到自己耗费四年心血从零开始设计的框架,能够在全球开枝散叶,诞生出成千上万个有趣app,这是一种怎样的感受,怎样的一种成就。

结语

有人可能会说你参赛总共写了几百行代码,搞了这么多幺蛾子。确实事挺多(捂脸),但我始终觉得这段经历很有意思,就唠叨了这么多。也打心底里跟大家分享几个体会,建议也好,鸡汤也罢。
  • 遇到新事物勇敢地迈出第一步,很多疑虑会在尝试中迎刃而解,很多自认做不到的事情竟能水道渠成。
  • 如果你真的想做成一件事情,那就尽最大努力研究透这件事情相关的所有细节。不要因为一些小困难小麻烦就想着回避想着无视,后面真的会暴雷,间隔或长或久。
  • 塞温失马焉知非福,如果没有走错路那有机会发生后面的故事。
另外提醒下大家,如果你在注册或登录推特的时候收不到验证码。试着将系统语言改为英文,之后就能收到了。原因就不得而知了。
LovePet app现在的功能尚不完善,存在很多可以扩展的点,后面将继续使用Compose框架充实壮大这个app。相关技术也将发布到Compose开发篇章里,尽请期待。

推荐阅读

除了SQLite你一定要试试Room

为什么推荐使用CameraX?

AppCompat发布两年了,还没了解?

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存