关于Android应用程序开发,新开的项目应该选择使用Java还是Kotlin作为其开发语言?关于新开的Android项目,我们到底应该如何去实施?

在今年7月份初我参与了一个新项目的研发工作,在研发过程中遇到了一些问题,我想从下面几个方面和大家分享下:

  1. 新开的项目应该选择使用Java还是Kotlin作为其开发语言?Google官方都已官宣Kotlin为Android应用第一开发语言了,我一定要使用Kotlin语言?
  2. 使用Kotlin作为开发语言 项目中用到的第三方开源库如何选择?
  3. 关于新开的Android项目,我们到底应该如何去实施?
  4. Android项目的整体架构如何选?
  5. 是否要实施组件化?

新开的项目应该选择使用Java还是Kotlin作为其开发语言?Google官方都已官宣Kotlin为Android应用第一开发语言了,我一定要使用Kotlin语言?

这个主要看参与项目开发的人员组成及主程(一般是Android团队的主管、小组长或能力突出者)的能力及其擅长的技能,我们分以下几种情况来看:

  1. Android团队主程技术能力好,有丰富的项目经验(从事Android应用开发工作5年以上) ,Kotlin语言基本掌握,建议使用Java语言或Java主导Kotlin选择性使用。
  2. Android团队主管(小组长)专业技能一般,擅长管理团队,非常认可组内主程的能力,主程技术能力好,从事Android应用开发工作5年以上,建议使用Java语言;
  3. Android团队主管(小组长)和主程是同一个人,使用Kotlin语言2年以上的,可以考虑使用Kotlin,否则使用Java语言。
  4. Android团队主管(小组长)和主程是两个人,在技术选型上若有分歧,建议听主程的。

综上所述,你可能也看出来了,现阶段若开新项目,我建议使用Java语言,Kotlin可先熟悉。除非主程对Kotlin语言有深刻的理解,可以考虑使用Kotlin。Kotlin语言是出来很久了,但是在国内的普及度还不够,很多人能用,但是不知道为什么可以这么用,彻底掌握的人不多。

使用Kotlin作为开发语言,项目中用到的第三方开源库如何选择?

关于在项目中使用到的第三方开源库,有人可能会想我们项目是以Kotlin语言为主的,同一个开源库若有Kotlin版本的,我就采用Kotlin版本的。到底是使用Java版的还是Kotlin版的?取决于开源库的Kotlin版本是否是该库的官方出的,后期是否会继续维护。开源库的选取,有以下几点:

  1. 亲自测评(团队里安排一个人),得出结论看是否满足当前的业务需求?遗留问题多少?可扩展性如何?该开源库的代码质量怎么样?
  2. 开源该库的作者,是否会继续维护,已经多久没维护了
  3. 能满足现有业务需求或稍微改动即可满足,半年内该库的作者是否有更新,遗留的问题不影响我们使用或者我们自己能修复。
  4. 至于是Kotlin版本还是Java版本,这个不重要,这个真的不重要。

关于新开的Android项目,我们到底应该如何去实施?

我们是搭建新的项目框架?还是使用以前成熟的项目框架?我们分一下几个方面讨论:

  1. 使用以前成熟的项目框架,好处:项目中常用的基础设施是完善的,由于项目整体架构导致的问题会比较少,毕竟经过了时间的考验。缺陷:可能该架构的理念陈旧,有些功能实现起来比较费事,对个人成长不利。
  2. 搭建全新的项目框架,好处:可以采用全新项目架构理念,比如使用基于Jetpack中的架构组件搭建MVVM架构,可以学习并在项目中实践最新架构理念,并作出比较判断,利于个人成长,利于项目后面维护扩展。缺点:需要在项目进行过程中填各种坑,不断完善打磨新的框架,需要团队成员学习新的知识,前期增加了项目的研发时间,增加了前期投入成本。
  3. 对于小团队,想要快速、低成本试错,建议使用以前成熟的项目框架;对于项目进度不是很赶的团队,可以考虑搭建新的项目架构。

综上所述,关于新开Android项目,我的建议是使用以前成熟的项目框架(能主导Android客户端开发的人,肯定是项目经验丰富的,手上一定有成熟的现成框架)。基于新的架构理念出现的新架构,可以在后面版本迭代过程中,那个版本时间充足的情况下引入,先拿小模块试错、填坑,成熟后后面新开的模块使用。

项目的整体架构如何选?

目前Android应用开发常用的架构有:MVC(默认)、MVP、MVVM和基于Jetpack中的 架构组件(AAC) 搭建MVVM架构,主要取决于主程(搭建项目基础设施的、解决疑难问题的、推动整个团队技术建设的)擅长的是那种架构 。不管是那种架构,掌握的熟练程度其实是最重要的。熟练就意味着项目整体框架中出现的问题,他能快速定位解决。

若前期时间相对充足的话,我建议试试使用基于Jetpack中的 架构组件(AAC) 搭建MVVM架构,或者学习官方提供的架构组件改善现有的项目框架。

是否要实施组件化?

需要先搞清楚组件化解决的问题是什么?

我们来看一个实际的业务场景,公司有一个3年以上的项目,这几年不断的增加各种功能,满足老板的需求。随着时间的流逝,项目越来越大,每次改动下重新编译一次需要几分钟,每次增加一个功能模块,测试团队都需要重新测试整个项目的功能(这是多大的测试工作量啊)。

今年我们公司又开了一个新项目,发现App版本升级、支付模块、分享模块都是一样的,把原来项目中的这几个模块Copy过来?

从上面的业务场景描述中,我们发现需要解决以下几个问题:

  1. 提升项目编译速度(开发工具已提供热更新,但是还是不能解决问题)
  2. 增加新的功能模块,其它功能模块不需要重新进行测试
  3. 现有功能模块的复用
  4. 现有功能模块的维护、扩展

组件化就是在出现超级App的情况下出现的解决方案,单一组件满足以下条件:

  1. 可单独开发、调试、维护、扩展
  2. 对外以接口形式提供其具备的功能,其他组件通过接口可以访问其提供的功能。

弄清楚了组件化解决的问题,对于是否要实施组件化开发,从以下几点我们分析:

  1. 从一开始团队成员就知道,将要研发的是一个大型项目,团队成员3人以上,建议从一开始就考虑引入组件话,有利于后面功能扩展、维护、增加人手等。
  2. 试错型或者中小型项目,团队1~2人,这种情况下是没必要引入组件化的。
  3. 想快速出版本,前期时间不是很充足,建议不要引入组件化。

一般情况下,不建议项目一开始就引入组件化。增加项目开发时间,属于吃力不讨好型,建议在需要时再引入比较合适。

Android应用开发用Kotlin还是Java 好?相关推荐

  1. 用于 Android 开发的 Kotlin 与 Java

    Android 应用程序已成为我们日常生活中不可或缺的一部分:例如,许多企业使用 Android 应用程序与客户交流.然而,为 Android 开发选择最佳编程语言可能是一项艰巨的任务. 在 Kotl ...

  2. 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )

    文章目录 I . Native 调用 Java 方法 II . JNIEnv *env 与 jobject instance III . JavaVM *vm IV . 局部引用 与 全局引用 分析 ...

  3. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

  4. Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)

    Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一 ...

  5. 入门 Kotlin 和 Java 混合开发

    一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比 ...

  6. Kotlin 与 Java有什么区别(最全最新的)

    目录 什么是Kotlin? 什么是Java? 主要区别: Kotlin 的特点 Java的特点 Kotlin 的历史 JAVA的历史 Kotlin 和 Java 的区别 Kotlin 的优势 Java ...

  7. android应用开发_2020年排名前五的Android应用开发公司

    android应用开发 The mobile app industry is at its peak of success and keeps evolving with the latest mob ...

  8. “你们程序员不就是修电脑的吗,你牛什么牛(1),android移动开发

    自己当初也是如此,天真的以为计算机专业就是开发游戏,倒腾电脑的专业,所以自己就成了计算机学院的一员.上大学后,才发现和自己想象的完全不一样,依然要学习好多的数学专业课和语言专业课,只是这个语言不再局限 ...

  9. Android App 开发的三种姿势 ~

    点击上方"码农的后花园",选择"星标" 公众号 精选文章,第一时间送达 现在市场上各式各样的App越来越多,其实设计一个App也没有那么难,这期就讲解一下安卓开 ...

最新文章

  1. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.
  2. jQuery Mobile发展新闻阅读器,适应iphone和android打电话
  3. Infortrend推出超大容量存储解决方案
  4. tankwar java,TankWar 單機(JAVA版) 版本0.4~版本0.6 讓坦克動起來
  5. 接口练习题(书信接口)
  6. Deis发布1.4版本,支持Microsoft Azure
  7. [转]Android的Handler总结
  8. python人口普查数据数据分析_7、Python 数据分析-Pandas人口分析案例
  9. 阿昌教你Linux密码忘记后如何重置
  10. hive对字段去除空格trim()函数
  11. 中奖名单模板_获奖名单公布模板速来选择
  12. 通过IP获取地理位置的开放接口汇总
  13. 如何看待加多宝与王老吉商标案发回重审?
  14. 小白也能看懂,30 分钟搭建个人博客!
  15. 量子力学第十一弹——变分法
  16. 云原生发展趋势-2022
  17. 成为一个大数据开发工程师的学习步骤--文字版
  18. win7系统突然变慢的解决方法
  19. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  20. 全国各大学精品课程网站

热门文章

  1. C51(蓝牙,红外)智能遥控小车
  2. Unity绿背景抠图插件
  3. 瑞萨RL78系列单片机划分ROM、RAM区域进行合作开发
  4. 健身房管理系统一站式智能化健身管理体验
  5. 第 4 章 容器 - 023 - 两种进入容器的方法
  6. 第五章: 用角色合成可重用Ansible内容
  7. typora符号-纯手打可复制
  8. PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
  9. 安装和设置vAG服务器虚拟机的过程,CDSM-5 桌面云安装部署
  10. 测试 WebRTC 应用在浏览器的兼容性