2

我正在开发一个包含大量类的大型 android 项目。到目前为止,我们正在使用 Android 3.2 进行编译并支持 Android 2.3。

现在我正在测试用 Android 5.1.1 编译,但仍然支持 Android 2.3。令我惊讶的是,现在很多代码都被弃用了......(getWith(), getDrawable(), setBackgroundDrawable(), HttpRequest, ActivityGroup等......)。那些不推荐使用的函数不会给出编译错误,但会给出不推荐使用的警告。

我知道如果 SDK_INT 低于 XX,我可以复制代码并对不推荐使用的方法进行特殊调用,如果 SDK_INT 比 XX 新,我可以调用新方法,但这是一个巨大的补丁,需要大量重复代码大量的类和包中的函数,所以,如果可能的话,我们宁愿等到我们不需要支持最旧版本的 android。这意味着继续使用不推荐使用的方法,直到例如我们只需要从 4.4 提供支持,这意味着将需要更少的重复代码和函数。

问题是:如果我用 Android 5.1.1 编译但仍然使用那些已弃用的功能,这个庞大的项目将继续在所有设备上运行(从 2.3 到 5.1.1)?现在它正在使用 Android 3.2 进行编译。

我了解已弃用意味着它们可能会在平台的未来版本中被删除,因此您应该开始考虑在您的代码中替换它们的使用,但如果它仍然受支持并且没有给出编译错误,它将起作用直到现在。这就是我对弃用的理解。这是正确的?

谢谢。

4

4 回答 4

1

弃用意味着两件事:

  1. 还有另一种(也许更好)的解决方案
  2. 不再完全支持

这意味着您的代码could可以正常运行。但谷歌/安卓不保证这一点。

根据Java文档@Deprecated注释说:

@Deprecated 注解表示标记的元素已被弃用,不应再使用。每当程序使用带有 @Deprecated 注释的方法、类或字段时,编译器都会生成警告。[...]

所以请停止使用已弃用的方法。:)

您是否看过或知道有支持库来帮助您实现向后兼容性?

于 2015-07-17T06:46:47.690 回答
0

是的,它应该可以正常工作。但是您确实应该使用最新的方法而不是弃用的方法,并使用支持库使其与以前的版本兼容。我使用过的所有不推荐使用的方法都运行良好,但 Google 不保证它们会。

于 2015-07-17T06:53:10.707 回答
0

它可能会停止使用新版本。

示例:LocationManager.addNmeaListener(GpsStatus.NmeaListener listener)

从 API 24 中弃用。

停止使用 API 29 (Android 10)。内部没有实现(返回 false)。

在文档中:保持向后兼容性的无操作方法。

很难找到旧代码停止工作的原因。

于 2020-11-05T18:26:22.453 回答
0

您可以继续使用已弃用的方法,它们仍应按预期工作。但是您必须小心,因为它们可能会在未来的版本中被删除。

如developer.android.com上的文档中所述

@Deprecated 注释的程序元素是不鼓励程序员使用的程序元素,通常是因为它很危险,或者因为存在更好的替代方案。当在非弃用代码中使用或覆盖弃用的程序元素时,编译器会发出警告。

于 2018-11-30T09:57:27.017 回答