我有许多不同的字符串资源文件是使用我们的构建系统使用我的Android应用程序构建的。这些字符串文件可以随时以增量方式添加,我们的构建系统将从其单独的目录中选择它们。我想枚举所有字符串文件或能够在其中获取单个字符串,而不必知道其中的字符串资源的名称或ID。我也不希望添加这些的人必须编辑我的包中的主字符串文件,其中包含列出不同文件的数组。有没有办法实现这个目标?
示例:
SoccerStrings.xml
id="SoccerDetails" value="soccer"
CricketStrings.xml
id="CricketDetails" value="cricket"
如果不知道存在这些文件,我怎样才能提供包含两个项目的列表视图:Cricket和Soccer以及自动支持可能出现的任何其他文件。
我认为最好的方法是让构建系统在assets文件夹下提取单个文件,然后使用getAssets()。list(“”)功能以及XMLResourceParser类来访问字符串值。这会工作,并允许我有ID冲突(例如:id =“name”)?有更简单的方法吗?
答案 0 :(得分: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
解析出字符串类。您可以将其存储在可加载文件中,或生成您自己的源文件以添加到构建中。
答案 1 :(得分:0)
我不会告诉你该怎么做。我正在回答这个问题,提出反对意见。
您计划做的事情与资源文件不相符。这些文件基本上都是代码。你想要做的是关于数据。您应该将数据放在assets目录中。然后,这些文件将不会像您的资源文件一样在您的构建中进行预编译。您可以按照自己的方式处理这些文件。然后会有相当多的编码将所有这些转换为业务逻辑,但这是编写良好,可维护的代码所需的代价。
以您建议的方式播放资源文件类似于Java反射。您只想使用它,因为您拥有与此功能相关的功能,而不是因为它是最简单的方法。
话虽如此,您可能正好处于必须按照您所说的方式处理资源文件的情况。在这种情况下,请接受我的道歉。