项目的主要功能是使用 NFC 通过 APDU 指令对智能卡进行通信和读取资料, 然后通过 Restful API 发往后端进行核验并返回结果, 功能就这样比较单一, 顶多再加上 User Agreement 和 About Us 的静态页面,不涉及到复杂和华丽的 UI ,但要求 app 要尽可能考虑适配不同机型, 特别是大部分老年人使用的低端机。
本人 Andriod 零基础,这几年主要写后端(java)和 web 前端(vue):
1.应该使用 kotlin 还是 java? 我看官网上是主推 kotlin, 但未知入门是否困难, 坑是否多
2.界面应该用传统的 view 还是 compose? 查了一下 compose 好像在低端机会有些问题, 是不是用 view 比较稳
3.为应对上线后排查问题, 客户端日志收集, 崩溃上报一般是怎么做的
4.考虑到一些图片或文字资源,后续如果有变更就在线更新,避免重新打包上架。此类有没有一些通用的做法, 现在想到是 app 启动就调用后端一个 API 把资源拉下来做对比, 有更新就替换
首先我非常建议用 kotlin ,而且是 full kotlin ,本身 kotlin 经过优化已经和 Java 原生没啥性能差别了,而且 full kotlin 还可以不用考虑 Java 的空安全问题了。Java 你如果用了某些高版本特性或者函数必须 desuger 。而且某些机型魔改 ART ,未实现 JVM 中的某些函数(此处指某国产自研品牌),你用 kotlin stblib 中自己实现的同功能函数就不会遇到这个坑。
至于框架的话,考虑到设备兼容性和性能较低,首先排除 flutter ,在老低端机上性能较差,而且新版本用的 vulkan 和 Impeller 对老设备兼容性很差。uniapp 性能较差,uniapp-x 虽然是编译到原生,但其可用的插件很少,需要根据业务慎重考虑。所以基本就是 compose 和 view 里选。
你提到的 compose 性能问题,在多个版本的优化后,基本是早期才有的问题了。目前最多就是在长列表加载复杂数据这种场景,可能在某些极端场景下不如 recycleview 了,毕竟 recycleview 是优化了很多年的东西了。而且 compose 的一个好处就在于和原生 view 无缝兼容,具体使用中可以和原生 view 混合编写。原生那堆东西写起来非常折磨人,不如 compose 写起来舒服多了,你是前端的话应该更有体会。但是 compose 也不是说没有别的问题了,比如最新版本 1.8.x 我记得在某些 Android p 设备上会闪退,需要一点魔法,太旧的版本性能又太差,我个人建议图稳定先 1.5.x-1.6.x ,等熟悉了再升级。还有就是 compose 最低兼容到 Android 5 ,你要是需要兼容 Android 4.x 这种极老的设备的话,那就只能选择原生 view 了。
1:语言无所谓,Java 和 Kotlin 本来就是兼容的
2:页面绘制建议用 View ,因为要兼容老安卓机型,新手遇到兼容性问题是很头疼的,别给自己上强度,没苦硬吃
3:第三方 SDK
4:6 楼的建议足够了
最后,别用 uniapp
2. 你的页面比较简单,View 和 Compose 都差不多,但是你的前端经验是 Vue ,而不是老式的 Jquery ,可能用 Compose 更加适合你。官方后续也只可能推 Compsoe 。
3. 集成第三方的 SDK ,例如腾讯的 Bugly ,这个还是挺好用的。
4. 这个就是你 App 的架构设计问题了,和 Android 没关系。通常比较简单的做法是先拉取一个配置文件。然后直接用配置文件里面的资源。你把资源拉下来做对比, 有更新就替换,这个步骤听起来很扯,你都拉下来了,直接用最新的不就行了?这里一定要注意,图片资源一般你都是使用第三方库加载的,因为缓存问题,你最好不要使用同一个 URL 。更新了的图片要使用不同的 URL 。
bug 上报的话 bugly 或者其他 APM 平台,搜一搜就有了。
2 因为界面不多,要考虑兼容性和性能,直接用原生的 View 实现
3 日志收集和崩溃上报集成个第三方的框架
你还没考虑到这里最大的坑,就是不同安卓版本机型的 NFC 可能会有各种兼容性的问题,尽量找个别人封装好的 star 最多的库吧