Android应用开发用Kotlin还是Java 好?
关于Android应用程序开发,新开的项目应该选择使用Java还是Kotlin作为其开发语言?关于新开的Android项目,我们到底应该如何去实施?
在今年7月份初我参与了一个新项目的研发工作,在研发过程中遇到了一些问题,我想从下面几个方面和大家分享下:
- 新开的项目应该选择使用Java还是Kotlin作为其开发语言?Google官方都已官宣Kotlin为Android应用第一开发语言了,我一定要使用Kotlin语言?
- 使用Kotlin作为开发语言 项目中用到的第三方开源库如何选择?
- 关于新开的Android项目,我们到底应该如何去实施?
- Android项目的整体架构如何选?
- 是否要实施组件化?
新开的项目应该选择使用Java还是Kotlin作为其开发语言?Google官方都已官宣Kotlin为Android应用第一开发语言了,我一定要使用Kotlin语言?
这个主要看参与项目开发的人员组成及主程(一般是Android团队的主管、小组长或能力突出者)的能力及其擅长的技能,我们分以下几种情况来看:
- Android团队主程技术能力好,有丰富的项目经验(从事Android应用开发工作5年以上) ,Kotlin语言基本掌握,建议使用Java语言或Java主导Kotlin选择性使用。
- Android团队主管(小组长)专业技能一般,擅长管理团队,非常认可组内主程的能力,主程技术能力好,从事Android应用开发工作5年以上,建议使用Java语言;
- Android团队主管(小组长)和主程是同一个人,使用Kotlin语言2年以上的,可以考虑使用Kotlin,否则使用Java语言。
- Android团队主管(小组长)和主程是两个人,在技术选型上若有分歧,建议听主程的。
综上所述,你可能也看出来了,现阶段若开新项目,我建议使用Java语言,Kotlin可先熟悉。除非主程对Kotlin语言有深刻的理解,可以考虑使用Kotlin。Kotlin语言是出来很久了,但是在国内的普及度还不够,很多人能用,但是不知道为什么可以这么用,彻底掌握的人不多。
使用Kotlin作为开发语言,项目中用到的第三方开源库如何选择?
关于在项目中使用到的第三方开源库,有人可能会想我们项目是以Kotlin语言为主的,同一个开源库若有Kotlin版本的,我就采用Kotlin版本的。到底是使用Java版的还是Kotlin版的?取决于开源库的Kotlin版本是否是该库的官方出的,后期是否会继续维护。开源库的选取,有以下几点:
- 亲自测评(团队里安排一个人),得出结论看是否满足当前的业务需求?遗留问题多少?可扩展性如何?该开源库的代码质量怎么样?
- 开源该库的作者,是否会继续维护,已经多久没维护了
- 能满足现有业务需求或稍微改动即可满足,半年内该库的作者是否有更新,遗留的问题不影响我们使用或者我们自己能修复。
- 至于是Kotlin版本还是Java版本,这个不重要,这个真的不重要。
关于新开的Android项目,我们到底应该如何去实施?
我们是搭建新的项目框架?还是使用以前成熟的项目框架?我们分一下几个方面讨论:
- 使用以前成熟的项目框架,好处:项目中常用的基础设施是完善的,由于项目整体架构导致的问题会比较少,毕竟经过了时间的考验。缺陷:可能该架构的理念陈旧,有些功能实现起来比较费事,对个人成长不利。
- 搭建全新的项目框架,好处:可以采用全新项目架构理念,比如使用基于Jetpack中的架构组件搭建MVVM架构,可以学习并在项目中实践最新架构理念,并作出比较判断,利于个人成长,利于项目后面维护扩展。缺点:需要在项目进行过程中填各种坑,不断完善打磨新的框架,需要团队成员学习新的知识,前期增加了项目的研发时间,增加了前期投入成本。
- 对于小团队,想要快速、低成本试错,建议使用以前成熟的项目框架;对于项目进度不是很赶的团队,可以考虑搭建新的项目架构。
综上所述,关于新开Android项目,我的建议是使用以前成熟的项目框架(能主导Android客户端开发的人,肯定是项目经验丰富的,手上一定有成熟的现成框架)。基于新的架构理念出现的新架构,可以在后面版本迭代过程中,那个版本时间充足的情况下引入,先拿小模块试错、填坑,成熟后后面新开的模块使用。
项目的整体架构如何选?
目前Android应用开发常用的架构有:MVC(默认)、MVP、MVVM和基于Jetpack中的 架构组件(AAC) 搭建MVVM架构,主要取决于主程(搭建项目基础设施的、解决疑难问题的、推动整个团队技术建设的)擅长的是那种架构 。不管是那种架构,掌握的熟练程度其实是最重要的。熟练就意味着项目整体框架中出现的问题,他能快速定位解决。
若前期时间相对充足的话,我建议试试使用基于Jetpack中的 架构组件(AAC) 搭建MVVM架构,或者学习官方提供的架构组件改善现有的项目框架。
是否要实施组件化?
需要先搞清楚组件化解决的问题是什么?
我们来看一个实际的业务场景,公司有一个3年以上的项目,这几年不断的增加各种功能,满足老板的需求。随着时间的流逝,项目越来越大,每次改动下重新编译一次需要几分钟,每次增加一个功能模块,测试团队都需要重新测试整个项目的功能(这是多大的测试工作量啊)。
今年我们公司又开了一个新项目,发现App版本升级、支付模块、分享模块都是一样的,把原来项目中的这几个模块Copy过来?
从上面的业务场景描述中,我们发现需要解决以下几个问题:
- 提升项目编译速度(开发工具已提供热更新,但是还是不能解决问题)
- 增加新的功能模块,其它功能模块不需要重新进行测试
- 现有功能模块的复用
- 现有功能模块的维护、扩展
组件化就是在出现超级App的情况下出现的解决方案,单一组件满足以下条件:
- 可单独开发、调试、维护、扩展
- 对外以接口形式提供其具备的功能,其他组件通过接口可以访问其提供的功能。
弄清楚了组件化解决的问题,对于是否要实施组件化开发,从以下几点我们分析:
- 从一开始团队成员就知道,将要研发的是一个大型项目,团队成员3人以上,建议从一开始就考虑引入组件话,有利于后面功能扩展、维护、增加人手等。
- 试错型或者中小型项目,团队1~2人,这种情况下是没必要引入组件化的。
- 想快速出版本,前期时间不是很充足,建议不要引入组件化。
一般情况下,不建议项目一开始就引入组件化。增加项目开发时间,属于吃力不讨好型,建议在需要时再引入比较合适。
Android应用开发用Kotlin还是Java 好?相关推荐
- 用于 Android 开发的 Kotlin 与 Java
Android 应用程序已成为我们日常生活中不可或缺的一部分:例如,许多企业使用 Android 应用程序与客户交流.然而,为 Android 开发选择最佳编程语言可能是一项艰巨的任务. 在 Kotl ...
- 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
文章目录 I . Native 调用 Java 方法 II . JNIEnv *env 与 jobject instance III . JavaVM *vm IV . 局部引用 与 全局引用 分析 ...
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一 ...
- 入门 Kotlin 和 Java 混合开发
一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比 ...
- Kotlin 与 Java有什么区别(最全最新的)
目录 什么是Kotlin? 什么是Java? 主要区别: Kotlin 的特点 Java的特点 Kotlin 的历史 JAVA的历史 Kotlin 和 Java 的区别 Kotlin 的优势 Java ...
- android应用开发_2020年排名前五的Android应用开发公司
android应用开发 The mobile app industry is at its peak of success and keeps evolving with the latest mob ...
- “你们程序员不就是修电脑的吗,你牛什么牛(1),android移动开发
自己当初也是如此,天真的以为计算机专业就是开发游戏,倒腾电脑的专业,所以自己就成了计算机学院的一员.上大学后,才发现和自己想象的完全不一样,依然要学习好多的数学专业课和语言专业课,只是这个语言不再局限 ...
- Android App 开发的三种姿势 ~
点击上方"码农的后花园",选择"星标" 公众号 精选文章,第一时间送达 现在市场上各式各样的App越来越多,其实设计一个App也没有那么难,这期就讲解一下安卓开 ...
最新文章
- 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.
- jQuery Mobile发展新闻阅读器,适应iphone和android打电话
- Infortrend推出超大容量存储解决方案
- tankwar java,TankWar 單機(JAVA版) 版本0.4~版本0.6 讓坦克動起來
- 接口练习题(书信接口)
- Deis发布1.4版本,支持Microsoft Azure
- [转]Android的Handler总结
- python人口普查数据数据分析_7、Python 数据分析-Pandas人口分析案例
- 阿昌教你Linux密码忘记后如何重置
- hive对字段去除空格trim()函数
- 中奖名单模板_获奖名单公布模板速来选择
- 通过IP获取地理位置的开放接口汇总
- 如何看待加多宝与王老吉商标案发回重审?
- 小白也能看懂,30 分钟搭建个人博客!
- 量子力学第十一弹——变分法
- 云原生发展趋势-2022
- 成为一个大数据开发工程师的学习步骤--文字版
- win7系统突然变慢的解决方法
- c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
- 全国各大学精品课程网站