深入了解Android遗留代码

发布于:2021-02-05 15:10:27

0

101

0

Android 博客 Java Kotlin

带有遗留代码的新项目-真的吗?

有一天,我得知我将从事一个新的Android项目。我充满了热情,对未来几个月我的工作会是什么样子感到兴奋和好奇!后来,我了解到一些令我失望的事实。

原来,这个项目是由其他开发人员开发的,我不认识他们,而且是用Java编写的。一看代码,我就知道我将要处理一个遗留代码。

首先,我想,哦,不,说真的,我必须要做那件事吗?!

但是喝了一杯平静的茶后,我振作起来改变了主意。我开始把这种情况看作是一种挑战。我告诉自己:来吧,伙计,你可以驯服怪物。这可能是一次很好的冒险!

如果遇到类似情况,请继续阅读。我希望您能找到一些对您有帮助的建议。

看一个Gradle文件

所以,你已经有了Android项目的代码库,你就要开始工作了,但是你还不知道接下来会发生什么。开始发现项目的一个好方法是查看Gradle文件–构建配置脚本,该脚本包含一系列有用的信息,为您提供了良好的项目概述。

✔️ 外部依赖项

有必要查看外部依赖项以及它们使用的版本。他们将告诉您使用了什么技术堆栈并且让您熟悉将要处理的代码中使用的概念。换句话说,它们将帮助您理解为什么代码是这样编写的。

如果你对Android开发相当陌生一些外部依赖性可能会让你感到惊讶或者如果你以前没有机会使用它们,对你来说可能是新的。例如,您可能会遇到RxJava 1,它在今年3月达到了其寿命终止(EOL),事件总线(不久前非常流行),甚至MaterialEditText库自2016年以来就没有维护过。或者被谷歌认定为不推荐使用的GCM(googlecloudmessaging)。在某些情况下,迁移到新技术是必要的。

✔️ API级别要求

Gradle文件也是确保我们满足googleplay的目标API级别要求的好地方。googleplay要求应用程序至少针对android8.0。因此,在下一个应用程序发布之前,您可能需要对项目进行一些更改。

尤其是,您必须确保您的UI流是否提供了授予运行时权限的功能。在可能的情况下,你的应用程序应该准备好处理拒绝权限请求。例如,如果用户拒绝访问设备GPS的请求,您的应用程序应该有另一种方式继续。

✔️支持库

下一个潜在问题来源可能是应用程序中使用的可能过时的支持库。所以,如果你想更新它,如果有些东西不能像你预期的那样工作,不要惊讶。支持库的修订会很有帮助。

检查清单文件

有必要查看清单文件并分析对我们来说很重要的信息。

✔️ 权限

清单文件为您提供有关应用程序中使用的权限的信息。其中,您可以找到自动授予的权限和使用应用程序时需要授予的权限。第二个是运行时权限——如何处理我在上面写的权限。

✔️ 深度链接架构

清单文件还包含深度链接模式。如果在应用程序中有一个极好的机制来处理深度链接并启动与其相关的活动,那么就不必担心了。否则,我们有必要知道哪些活动需要小心。

如果缺少测试,则编写测试

编写代码是我们的报酬,所以让我们深入了解代码的深度。当我们处理遗留代码时,常见的任务之一是重构代码。但是如何确定如果我在一个地方改变了某个东西,它不会在另一个地方崩溃?

测试应该保护您免受不确定性的影响,但是如果项目中没有测试,我们应该在开始进行更改之前编写测试。

在我的例子中,有很多未经测试的代码,而且-更重要的是-不稳定的代码。在本例中,其中一个有用的工具是PowerMock,它为您提供了模拟静态方法、构造函数、最终类和方法、私有方法、删除静态初始值设定项等的机制。他们可以帮你节省一些时间。

使用Kotlin重构代码

当我们对类进行测试时,我们可以进行重构。首先,我认为我的卷土重来,以Java编写将是不明显的。但我犯了愚蠢的错误。例如,在类构造函数之前,我忘记了分号和“new”。我意识到我有多想念Kotlin。

但是即使代码是用Java编写的,我们也不必放弃Kotlin奇特的特性。正如Kotlin语言的创建者所说,该语言可以与Java互操作。所以这意味着,您可以用Kotlin实现新的东西,这比用Java编写的要简洁得多。

在重构的情况下,Kotlin帮助很大。有些东西可能需要花更多的时间以Java风格重写它们。所以考虑将代码提取到新的Kotlin类中,然后将其简化并在Java代码中使用。

为什么理解遗留代码如此重要?

有人可能会说:为什么Gradle和Manifest审查如此重要?我更喜欢在飞行中了解这个项目,而不是盯着那些文件浪费时间。

嗯,我们的工作与业务密切相关,我们的客户想知道提供新功能需要多长时间。有一个良好的项目概述和理解,提供准确的时间估计是至关重要的,这反过来又可以防止将来出现并发症。

结论

处理别人的代码可能会让人沮丧,但是在你开始诅咒它之前,试着理解为什么代码是这样写的。乍一看,有些东西看起来完全不可读,但潜入其中可以帮助你理解代码并避免将来的麻烦。

我不能说使用遗留代码是微不足道的。当然,使用Android Jetpack更好,用Kotlin编写整个代码,不需要支持非常旧的Android系统版本。但是在我看来不能杀死你的东西会让你更强大。

如果你遇到过类似的问题,并有一些建议,请留下评论。