0

我有许多不同的字符串资源文件,它们是使用我们的构建系统通过我的 Android 应用程序构建的。这些字符串文件可以随时增量添加,我们的构建系统将从它们单独的目录中获取它们。我想枚举所有字符串文件或能够在其中获取单个字符串,而不必知道其中的字符串资源的名称或 ID。我也不希望添加这些的人必须在我的包中编辑一个主字符串文件,其中包括一个列出不同文件的数组。有没有办法做到这一点?

例子:

SoccerStrings.xml
   id="SoccerDetails" value="soccer"
CricketStrings.xml
   id="CricketDetails" value="cricket"

在不知道这些文件存在的情况下,我如何提供包含两个项目的列表视图:Cricket 和 Soccer,此外还自动支持可能出现的任何其他文件。

我在想最好的方法是让构建系统将单个文件拉到 assets 文件夹下,然后使用 getAssets().list("") 功能以及 XMLResourceParser 类来访问字符串值。这会起作用并允许我发生 id 冲突(例如:id="name")吗?有没有更简单的方法?

4

2 回答 2

0

我会看aapt。我知道您可以使用以下命令从 .apk 中获取资源——

aapt d --values resources app.apk

可以使用 aapt 在构建过程的早期获取资源。它有以下看起来很有前途的选项,但 aapt 文档有点薄。

--output-text-symbols
   Generates a text file containing the resource symbols of the R class in the
   specified folder.

作为另一种选择,您可以修改构建过程并在字符串类gen/<package>/R.java file生成之后直接解析它。您可以将其存储在可加载文件中,或生成您自己的源文件以添加到构建中。

于 2012-12-19T04:38:44.170 回答
0

我不会告诉你怎么做。我正在回答这个问题以反对它。

您计划做的事情与资源文件不符。这些文件基本上是代码。你想做的是关于数据的。您应该将数据放在资产目录中。然后这些文件不会像资源文件一样在您的构建中预编译。您可以以任何您想要的方式处理这些文件。然后将涉及相当多的编码来将所有这些转换为业务逻辑,但这将是编写好的、可维护的代码所付出的代价。

以您建议的方式使用资源文件类似于 Java 反射。您想使用它只是因为您拥有与此类功能相关的功能,而不是因为它是最简单的出路。

话虽如此,您可能正处于必须按照您所说的方式处理资源文件的情况。在这种情况下,请接受我的道歉。

于 2013-02-28T17:58:22.120 回答