【问题标题】:Can I mark a resource in my android project as deprecated?我可以将我的 android 项目中的资源标记为已弃用吗?
【发布时间】:2014-12-28 07:28:42
【问题描述】:

我有一个 android 库,我想将一些资源标记为已弃用。 可绘制对象、尺寸、持续时间...我在某处读到可以将 deprecated="deprecated" 添加到资源定义中,但它似乎没有做任何事情。

在 Android R 中你可以看到诸如

@java.lang.Deprecated
public static final int autoText = 16843114;

我试图通过编辑 durations.xml、values.xml 甚至 public.xml 来产生类似的东西......

谢谢!

【问题讨论】:

  • 我认为这是一个有趣的问题,但如果不可能,我也不会感到惊讶。我唯一能想到的就是在目录名称中添加一个限定符,但似乎没有任何限定符,至少在文档中没有。

标签: android xml android-resources android-library


【解决方案1】:

简答:不可能。

@deprecated 标签被 cmets 中的 Android 源代码使用,如在 fw/base core/res/values/attrs.xml(参见原始帖子中提到的自动文本的第 3427 行)、fw/base core/res/values/public.xml 和整个项目的其他地方中可以看到,但用于构建应用程序的构建工具似乎只是跳过了所有 cmets,这意味着在此方法失败的过程中也会跳过注释标签。

基于Android源码的弃用注解使用示例:

<!-- {@deprecated Use foobar instead.} -->
<string name="foo">abc</string>
<string name="foobar">abcd</string>

【讨论】:

  • 啊,谢谢!你有它工作的经验吗?因为到目前为止它似乎对我有所不同,我想知道它是否应该不仅仅是评论......
  • 我自己不需要使用它 - 就像 Android 源代码那样。现在研究一下,似乎它也不适合我......
  • 谢谢。很不幸,我现在感觉它不受支持。
  • Android 源代码构建工具似乎解析了 cmets,应用程序构建工具似乎只是跳过了所有这些。实际上,使用默认工具似乎不可能对资源进行弃用注释。将更新答案以代表这些发现。
  • code.google.com 上有一个问题,但显然自 2015 年 8 月以来没有更新。code.google.com/p/android/issues/detail?id=145663
【解决方案2】:

我所做的只是添加一个 TODO 语句。它不会标记资源,但 doc 关键字 TODO 确实出现在 Git 中并作为标记出现在排水沟中。希望这些警告足以阻止您和其他人使用它。

但并非总是如此。正如我们所知,@Deprecated 本质上是一个权宜之计,直到某些东西真正被永久删除并且代码被正确清理。

这是一个我不再使用的 shape.xml 文件示例(并且想要@Deprecate)。

<?xml version="1.0" encoding="utf-8"?>
<!--
    Border around card elements.  For now this is used only within the
    cards of the Questionnaire RecyclerView.

    TODO:  This file is obsolete. Use CardView instead.
-->
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <stroke
        android:width="@dimen/tiny_card_margin"
        android:color="@color/colorPrimaryDark" />
    <solid
        android:color="@android:color/white" />
    <corners
        android:radius="4dp" />
</shape>

【讨论】:

  • 这行得通,但它有点像 hack,并且会阻止你真正正确地管理你的 TODO...只要你在其他地方管理一个弃用过程并且会删除这个代码和 TODO在下一次 API 重大更改中,这是可以接受的...
  • @jesses.co.tt 是的,它确实将 TODO 的正常定义扩展到了比我们通常想象的更大的时间线。我很好奇您是如何管理其他地方的弃用流程的。
  • 在这种情况下,我可能只是在文件或资源的名称前面加上“已弃用”。但是,如果其他项目依赖于您的库,这可能不是一个好主意。
猜你喜欢
  • 2023-04-05
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多