我正在开发一个包含大量课程的庞大的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进行编译。
我知道Deprecated意味着它们可能会在未来版本的平台中删除,因此您应该开始考虑替换它们在代码中的使用,但是如果它仍然受支持且不会产生编译错误,到现在为止它会很好用。这是我对弃用的理解。 这是对吗?
感谢。
答案 0 :(得分:0)
弃用意味着两件事:
这意味着您的代码could
可以正常运行。但Google / Android并不能保证这一点。
根据Java documentation,@Deprecated
注释说:
@Deprecated注释表示已弃用标记的元素,不再使用 。只要程序使用带有@Deprecated注释的方法,类或字段,编译器就会生成警告。 [...]
所以请停止使用弃用的方法。 :)
你看过或者你知道有support-libraries来帮助你向后兼容吗?
答案 1 :(得分:0)
是的它应该可以正常工作。但是你真的应该使用最新的方法而不是弃用的方法,并使用支持库使它与以前的版本兼容。 我使用过的所有已弃用的方法都运行良好,但Google并不保证会这样做。
答案 2 :(得分:0)
您可以继续使用不推荐使用的方法,它们仍然可以按预期工作。但是您必须小心,因为它们可能会在将来的版本中删除。
如developer.android.com上的文档中所述
注释为@Deprecated的程序元素是程序员所需要的 不鼓励使用,通常是因为这样做很危险,或者是因为 存在更好的选择。编译器在不推荐使用的程序时发出警告 元素已在不推荐使用的代码中使用或覆盖。
答案 3 :(得分:0)
它可能会停止使用新版本。
示例:LocationManager.addNmeaListener(GpsStatus.NmeaListener监听器)
API 24中已弃用。
停止在API 29(Android 10)中工作。内部没有实现(返回false)。
在文档中:保持向后兼容性的无操作方法。
很难找到旧代码为何停止工作。