2020年Android开发的未来发展方向该如何走?

android应用程序开发---总结 Android 应用程序开发是一种基于 Android 操作系统的软件开发技术,它允许开发者使用 Java 编程语言和 Android SDK(软件开发工具包)来创建 Android 应用程序。Android 应用程序可以运行在 Android 智能手机、平板电脑、智能手表等设备上,通过 Play 商店等应用商店进行发布和分发。 阅读详情

作为一名资深的Android 开发者。从2017年下半年开始,就听到各种言论,例如“Android 开发凉凉”、“移动端开发没出路了赶紧转行”、“要被XXX 替代了” 等等,充分反映了大家焦虑的心态。

移动端开发真的要凉凉了吗?也经常有粉丝私信我,在群里聊起这个话题,今天我决定写下自己的一些看法,供大家参考。

移动端开发的现状

移动端开发的现状是什么?我们可以从自己写的代码中寻找线索。以Android 为例,很多大公司的移动端开发者写的最多的代码是这样的:

LinearLayout layout = new LinearLayout;
 
layout.addView(xxxx);
 

或者也许是这样的:

public class XXXView extends RelativeLayout {
 
public XXXView(Context context) {
 
this(context, null);
 
}
 
public XXXView(Context context,
 
@Nullable AttributeSet attrs) {
 
this(context, attrs, 0);
 
}
 
public XXXView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
 
super(context, attrs, defStyleAttr);
 
initView;
 
}
 
private void initView {
 
LayoutInflater.from(getContext).inflate(R.layout.xxxlayout, this, true);
...
 
}
 
public void setData(XXX xxx) {
 
...
 
}

又或者是对着xml 标签做出各种骚操作——UI 开发。

没错,如今移动端技术栈已经愈发趋于成熟完善,对业务来说,就连大公司的工程师也是在做UI 的展示逻辑。大公司产品相对比较完善,后端管控了大部分业务逻辑,客户端做的就是取到后端的数据,然后通过setText(xxx)展示出来,然后通过接口返回的Boolean 值来判断View 显示还是隐藏。

我听到很多人说,工作几年感觉自己没什么提升,天天都在堆代码,随便找个刚毕业的学生也能分分钟替代自己,于是就很焦虑。那对于工作几年的人来说,要想尽可能不让自己过早的被替代、被淘汰,就需要选一个有潜力的有前景的领域深挖。

那么2020移动端开发的需要关注的技术有哪些?

1. Kotlin

Kotlin 通常被视为下一个 Java,它是由谷歌和 JetBrains(Android Studio 开发者)赞助的。Java 从一开始就一直是 Android 应用的首选开发语言,但近年来 Kotlin 迅速普及,如今在 10,000 种 Google Play 应用中有近 60%使用了 Kotlin 。虽说在少数需要访问底层原生代码的情况下,仍会继续使用 C++;但在其他情况下,Kotlin 都可以代替 Java。

Kotlin 的主要优势是与 Java 的完全互操作性,这意味着开发人员可以尽可能迁移旧代码,而不用完全重写整个应用程序。这两种语言兼容得很好,Android Studio 甚至可以自动从 Java 转换为 Kotlin。

这种兼容性,加上更简洁的语法和数百项细小改进,使 Kotlin 在 StackOverflow 的 2019 年开发人员调查中成为第四大“最受欢迎”和第五大“想要”的编程语言,在所有移动编程语言中排名最高。

迁移现有应用有一个好方法,就是在修改现有 Java 文件时将其转换为 Kotlin。虽然这意味着你要把经常编辑的文件转换过去,会增加代码审查的复杂度(比如会面临潜在的冲突),但由于转换后的区域能得到审查,因此可以确保任何问题都能被发现。

目前 Candyspace 中使用的 Kotlin 代码占 86%(并且一直在增长),其余的 14%是实用工具 / 转换代码,这些代码已经有些年头没改动过了。

2. Jetpack

谷歌的 AndroidX/Jetpack 库是一组实用工具,旨在简化常见的应用需求。例如用于设备上数据库的 Room ,或用来在底层数据更改时更新显示内容的 LiveData 。

有了 Jetpack 库,新项目就省掉了重新发明轮子的麻烦,也不必等待其他开发人员来开源他们的实现方式,现在每位开发者都能获取到那些基础要素了。这些库更新非常频繁,新功能不断推出,错误修复也会及时发布。由于这些库是为了协同工作而构建的,因此多使用 AndroidX 库有助于最大程度地减少应用中出现意外。

从开发工作起步开始就使用 Jetpack 库可以节省数百小时的时间,但我们也可以将已有的应用迁移到 Jetpack 库上面。虽然看起来很麻烦,但由于这些库非常流行,针对迁移工作的指南也很容易找到。至少,底层 Android 元素(视图、片段等)可以自动转换。

在 Candyspace,我们使用了 Data Binding 和 ViewModel,并可能很快加入 Room 和 Navigation。

3. 模块化设计

一直以来,应用都被构建为一个巨大的“应用”模块,其中包含整个应用所需的一切。尽管这样做确实能让资源共享起来更容易,但也意味着这个应用的某些部分无法为其他应用 / 开源项目所重用;更重要的是,对应用做出更改时必须重新编译整个代码库。

相反,如果应用由许多较小的模块组成,则只需重新编译做出更改的代码即可,从而大大缩短了构建时间。此外,模块化设计还为高级 Android 特性(例如即时应用——用户无需安装任何内容即可使用你的应用的部分功能,和动态特性——按需安装应用的各个部分)的应用打开了大门。

将一款现有应用拆分为多个模块可能会是一个很复杂的工作,因为会因此而发现之前隐藏的问题(“DateUtility 是什么东西?为什么每个类都需要它!?”);但是一旦改造完成,代码库就会进入一种更加健康的状态。另外,如果一款新的应用需要类似的功能,则可以快速重用已有模块,从而大大节省时间!

模块化应用架构的一个示例(来源:本文作者创建!)

虽然设计一个模块化架构可能是很复杂的任务,但我之前已经写过一些指导性原则,这些原则受到了 Nikits Kozlov 关于模块化和构建时间的文章的启发。Plaid 也写了一篇介绍他们向模块化设计迁移经验的文章。

在 Candyspace,我们的应用设计都是完全模块化的,以尽量减少构建时间对开发工作的中断影响。

4. App Bundle

使用传统的 APK 将应用分发到用户的设备时,必须安装针对所有设备准备的所有资源。这意味着每张位图图像可能会有 5 个副本(用于不同的屏幕精度),还要安装针对不同设备架构的多个库版本,甚至还得安装多组边距和填充值。

使用 App Bundle 分发一款应用时,用户下载的 APK 只包含他们实际所需要的资源。这样一来,平均的应用大小就会减少 20%,而未经优化的应用改换格式后应用大小将会得到更显著的缩减。

缩减应用大小的示例(资料来源: https://events.google.com/io2018/)

App Bundles 是 18 个月前刚刚诞生的,但已经有超过 25%的应用安装时使用了这种格式!这是谷歌推荐使用的格式,并且大多数应用几乎无需改动就能使用这种格式,只需在 Play 商店上处理一下 App Bundle 的签名即可。

在 Candyspace,我们正在迁移到 App Bundles 上,同时尽量避免破坏我们现有的工作流程(Slack、QAing 构建、非 Google Play 安装)。Alistair Sykes 的文章是一份很棒的迁移参考资料,文章考虑到了 CI 服务器、Slack 和 Google Play 内部应用共享等事项。

5. 测试

是的,测试。当然,测试并不是什么闪亮的新特性,也不是用户能看到的内容,但想要确保一款已有一定用户基础的应用的可靠性,就必须要彻底测试你的应用程序才行。由于崩溃率会直接影响你的 Play 商店评分(并且肯定会拖累评分!),因此应该设法将其保持在较低水平上。

测试金字塔(来源:developer.android.com)

Android 的三种最常见的测试类型分别是(降序排列):

  • 单元测试,例如:我的平方根函数会返回平方根吗?

这些测试将构成你测试流程的大部分内容,它们用来确保特定的代码段(例如一个函数)能按预期正常运行。当你对一个部件建立起信心后,就可以将其用于…

  • 集成测试。例如:我的数学模块可以与位置模块协同工作吗?

这些测试可确保你的各个代码区域(模块或层)可以正常协同工作。知道应用的组件可以正确相互通信后,你就可以添加…

  • 自动化的 UI 测试,例如:用户可以在应用上标记一个位置吗?

在设备或仿真器上只会运行这些测试,它们能确保应用按预期提供完整的用户体验。这些测试通常比其他类型的测试要慢得多(并且运行起来更加不便)。

谷歌建议将测试的分布定为 70%的单元测试、20%的集成测试和 10%的大型测试,占比较小的部分需要更长的执行时间、维护时间和实施时间。

最好的测试资源是官方文档,因为它提供了所有测试类型的介绍,以及如何将其实现到项目中的教程。

在 Candyspace,我们将重点放在单元测试上,其占比要比谷歌建议的比例更大,以确保所有新类的行为都是可预测的。我们目前还在改进自动 UI 测试,以减少对手动测试的依赖。

在编程的任何领域,关于解决问题的最佳方法都会有一百种不同的意见;但 Android 有绝对优势:Android 拥有一个庞大的开发者社区,这意味着一个十分优秀的新技术会迅速在开发者中普及。当你在互联网上向陌生人寻求帮助时,如果你找的是“Jetpack LiveData”而不是“之前的开发人员从 Web 开发者朋友那里复制并转换的库”,成功获得答案的可能性就会大得多!

维持一个健康的代码库的关键,就是能够适应这些不断变化的标准并重构现有项目。为了了解最新的 Android 开发实践和最佳做法,我推荐大家关注 Android 开发者博客、 /r/AndroidDev subreddit 和 Fragmented 播客。

推荐阅读:2020年中最佳盘点!nanchen大神比心整理Android面试真题集锦(附答案解析)

Android开发的未来发展方向,难道android真的凉了吗? 01 现状 从2010年开始Android市场开始需要大量的Android开发人员,招聘市场上也开始大量招Android开发人员,大量java开发者开始学习Android开发,招聘市场面试要求上只要有一定java语法基础,都很容易应聘上Android开发的岗位,因为那时候国内Android开发的需求刚刚起步,从事Android开发的人员很少。 到2011-2012年,只要有一年左右的Android... 阅读详情

相关推荐

2024现代Android开发趋势

在当今的Android开发领域,我们看到了许多令人兴奋的技术和趋势,这些技术和趋势正在改变着应用程序的开发方式和用户体验。让我们一起深入探讨2024年现代Android开发的主要方向和关键技术。

虎哥LoveDroid 2308

Android开发基础入门

Android基础一 什么是android     android是专为移动设备定制的包括操作系统,中间件,和核心应用程序的软件集。Android SDK提供了用Java语言开发android应用程序所需要的一些工具和API。二 Feartures    Application Frame 可被重用    Dalvik virtual machine 特为移动设备优化的java虚拟机    Integrated browser 基于开源的webkit引擎    Optimized graphics 2d图形

我的程序世界 2万+

2024是时候进军Android Framework开发,解锁黑科技了

Android Framework核心源码笔记》是一份由资深Android开发者所编写的资料,其中包含了很多他在多年Android Framework开发中积累的经验与技巧。这份资料不仅涵盖了Init、Zygote、SystemServer、Binder、Handler、AMS、PMS、Launcher等关键知识点的记录,还提供了丰富的案例和代码示例,方便读者更好地理解并运用所学知识。该资料的作者是一位前三星项目经理,拥有十年以上的Android底层框架经验。

虎哥LoveDroid 1405

android应用开发从入门到精通

Android Studio是一款由谷歌公司开发的为Android平台开发应用程序的集成开发环境(IDE),它是构建在IntelliJ IDEA上的定制版。它为开发者提供了一系列有用的工具和库,用于快速创建高质量的Android应用程序。Android Studio具有以下特点与其他谷歌开发者工具集成,如Android SDK、Gradle构建系统、JUnit测试框架和GitHub代码托管平台。提供了一个可视化的布局编辑器,可用于设计和排列Android应用程序的用户界面。

b523606163的博客 9588

几何非线性-屈曲分析

结构系统的破坏分为两种,一类是因材料软化而引起的强度破坏,另一类是几何软化使得结构的几何形状发生极大变化,从而使结构丧失承载能力。在材料力学中是这样定义压杆失稳的:中心受压直杆(理想模型)在直线状态下平衡,由稳定平衡转化为不稳定平衡时所受的轴向压力的界限值,称为临界压力。中心受压直杆在临界压力的作用下,其直线形态的平衡开始丧失稳定性,简称为失稳。显然,这个定义只使用于理想的压杆模型,那么关于失稳和屈曲是否存在一般性定义呢?

YORU_NO_KUNI的博客 1万+

gerrit 配置 ----Gitweb集成

此外,为了让用户能够查看任何关于 gitweb 的信息 项目中,用户必须能够阅读所有引用(包括 refs/meta/config,refs/meta/dashboards/*等)。或者,如果Gerrit通过反向代理送达,它可以 为gitweb的链接生成不同的URL(需要的) 在网页服务器上重写为)。Gerrit 代码审查可以管理和生成指向 gitweb 的超链接, 允许用户从Gerrit内容跳转到相同信息, 但由 gitweb 显示。默认为,这是 Linux 发行版上“gitweb”包的常见安装路径。

QuanQuanYuanXin的博客 1406

2020年Android开发的未来发展方向该如何走?,kotlinmap函数

移动端开发的现状是什么?我们可以从自己写的代码中寻找线索。以Android 为例,很多大公司的移动端开发者写的最多的代码是这样的: LinearLayout layout = new LinearLayout; layout.addView(xxxx); 或者也许是这样的: public class XXXView extends RelativeLayout { public XXXView(Context context) { this(context, null); } public XXXView.

m0_66144992的博客 260

Oracle恢复学习实战小结

     学习oracle10g 043课程有段时间了,前一两个星期学习了backup/restore相关的内容,刚好公司有要求要为host服务器做一个备用机以防止数据意外丢失。于是,实战开始了。     首先介绍host服务器架构。host以oracle数据库作为底层数据存储,以公司总部开发的Santorin作为应用,主要提供给测试台架数据存储、数据访问、数据导入导出、用户权限管理和数据自动备份

kseawolfk的专栏 1035

股市大跌对于IT行业的我们应该如何应对!2020年Android开发的未来发展方向该如何走?

又或者是对着xml 标签做出各种骚操作——UI 开发。没错,如今移动端技术栈已经愈发趋于成熟完善,对业务来说,就连大公司的工程师也是在做UI 的展示逻辑。大公司产品相对比较完善,后端管控了大部分业务逻辑,客户端做的就是取到后端的数据,然后通过setText(xxx)展示出来,然后通过接口返回的Boolean 值来判断View 显示还是隐藏。我听到很多人说,工作几年感觉自己没什么提升,天天都在堆代码,随便找个刚毕业的学生也能分分钟替代自己,于是就很焦虑。

2401_84048832的博客 669

Jetson平台XDMA PCIe驱动安装与测试全指南

本文提供了一份在NVIDIA Jetson平台上安装与测试Xilinx FPGA XDMA PCIe驱动的完整指南。详细阐述了驱动作为高速DMA引擎的核心作用,并逐步讲解了从环境准备、驱动编译、内核模块加载到实际数据传输测试的全过程。内容涵盖常见问题排查与性能优化建议,帮助开发者实现Jetson与FPGA间的高速数据通信,适用于自动驾驶、工业视觉等需要异构计算的应用场景。

weixin_29196315的博客 528

28377D Bootloader

架构

a6100309120的博客 6013

2020年疫情下的Android跳槽之路

写在前面的话 我是14年毕业的,毕业一直做Android相关方面的开发,14年到18年经历了几家小公司,前后都倒闭了,可谓是一直颠簸流离,漂泊不定。在18年来到上海寻求发展,以前一直呆的是小公司,这次就想找个大公司,想稳定一点,同时大公司技术底蕴也比较强,想多学习学习,提升自己。可参考我以前的求职面试经历:《杭州找Android工作的点点滴滴》,《2018年6月份Android上海找工作经历》,前...

ostracod 2万+

【3DSlicer】基于心脏ct影像重建3d模型及导出

软件:3DSlicer4.11 基于心脏ct影像重建3d模型

Liuees的博客 1万+

2024年Android开发的未来发展方向该如何走?

此外,模块化设计还为高级 Android 特性(例如即时应用——用户无需安装任何内容即可使用你的应用的部分功能,和动态特性——按需安装应用的各个部分)的应用打开了大门。当然,测试并不是什么闪亮的新特性,也不是用户能看到的内容,但想要确保一款已有一定用户基础的应用的可靠性,就必须要彻底测试你的应用程序才行。虽然这意味着你要把经常编辑的文件转换过去,会增加代码审查的复杂度(比如会面临潜在的冲突),但由于转换后的区域能得到审查,因此可以确保任何问题都能被发现。更重要的是,对应用做出更改时必须重新编译整个代码库。

2401_87029260的博客 999

heygem本地部署报错:SQLite3 can only bind numbers, strings, bigints, buffers, and null...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位大厂资深架构师和一线开发多年实战经验沉淀,

**My Coding Family** 3248

自动化测试与AI的结合应用

自动化测试,人工智能,机器学习,深度学习,测试用例生成,缺陷预测,测试优化 1. 背景介绍 在软件开发领域,自动化测试已成为不可或缺的一部分,它可以提高测试效率、降低测试成本,并确保软件质量。然而,传统的自动化测试方法往往依赖于人工编写的测试用例,这不仅耗时费力,而且难以应对复杂软件

AI架构师小马 2248

Android 开发凉了?2020年,Android开发者的前行方向

记得2013年的时候,安卓崛起,一夜之间遍地谈论安卓这个奇怪的机器人。 安卓受宠的原因 1 应用商城,给与每个开发者足够的诱惑,是公司员工可以业余一展技能的时刻。 百花齐放的开发应用,以及如饥似渴的市场,给与了安卓足够的动力。很多人通过上架应用,挂足广告,赚的盆满钵满。这里面比较有名的是反编译加广告,以及rom定制,以cm包为核心。 2 Java 语言,让手机开发的门槛,一下子拉到了人人可以触...

weixin_45258969的博客 1433

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

2020年热门编程语言的发展方向

2020年编程语言将如何发展,是很多人关心的问题。下面看看六大热门编程语言的现状与未来发展。 Python了解更多 今年 Python 最大的新闻是, Guido van Rossum 退休了,将 Python 交给了 Python 指导委员会。到目前为止,权力转移还算顺利,正如《Python 编程从入门到实践》的作者 Eric Matthes 所认为的那样,这并不足以为奇,因为Guido 一直都能在自己和在社区中的角色之间保持平衡。2020 年也将终止对Python 2.7 的支持,这很可能会让其反对者感

Dou_Hua_Hua的博客 719

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

腾讯移动客户端开发(安卓方向)2020暑期实习一面面经

腾讯移动客户端开发(安卓方向)2020暑期实习一面面经 废话不多说,直接上问题 问题 1.自我介绍 2.项目相关 3.Java的基本数据类型(8种) 4.Java语言的特性(继承,多态,封装) 5.面向对象编程和面向过程编程各自是什么,有哪些区别 6.==和equals有什么区别? 7.学过设计模式吗(我坦言还没有学过,正准备学习) 8.http和https有什么区别? 9.TCP连接建立过程是几...

qq_45254908的博客 2810

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2020 年热门编程语言的发展方向

时间行至 2020 年,对于编程语言的未来发展,很多人会更多的期待。因此,我们向多位编程专家征询了他们对热门编程语言的看法。Python今年 Python 最大的新闻是,其创造者和“终身...

HollisChuang's Blog 1708

android未来背景_2020年Android的未来将是什么?

android未来背景Source: Google Images 资料来源:Google图片 But before you took the plunge in exploring and riding on the waves of changes or hire an android app developer to develop an app, it is important to ...

cullen2012的博客 750

2020 年 iOS 移动开发最新发展趋势

作者 | Twinkle 来源 | Mobile App Daily 就像不时出现的移动技术趋势一样,了解 iOS 移动开发趋势也有重大的意义。随着 iOS 应用程序总数接近 200 万大关,与最新的iOS应用程序开发趋势保持同步已成为社区的常态。 根据最新数据,大约有400万个应用程序可供用户使用。对于用户来说,这意味着他们几乎所有需求都能找到一系列应用程序。 从开发人员的角度来看,应用程序商店中的应用程序数量越多,他们越需要与最新动态保持同步。 我们的博客面向所有希望了解最新移动应用程序开...

GSNICE 7446
上一篇: 爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去、现在和将来
下一篇: 父亲节:程序员硬核示爱,“爸”气告白!
Python_林一
博客等级 码龄7年 888粉丝 510原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值