当前位置: 首页 > 知识库问答 >
问题:

Kotlin Multiplatform-从目录中获取文件列表

范承志
2023-03-14

我们在KMM shared/commonMain项目中包含一个assets文件夹。该资产文件夹基本上包含许多JSON文件,这些文件在不同的子文件夹中结构化。

内置。gradle,资产文件夹被添加为android资源,因此它包含在构建AAR的根目录中。

android {
    compileSdkVersion(29)
    sourceSets["main"].resources.srcDirs("src/commonMain/assets")
    ...

在共享模块中,文件在通用Android中按需读取

val file = this::class.java.classLoader!!.getResource(folder1/file1.json)

这很好用。

现在到问题,读取文件夹:

val folder= this::class.java.classLoader!!.getResource(folder1)

当代码通过单元测试执行时,它会工作,然后返回文件夹。一旦AAR被构建并包含在android应用程序中,此行总是返回null。

请记住,文件已正确添加到AAR中,并且可以在指定文件路径时读取它们。它只是不适用于文件夹路径。

有没有办法从AAR模块的目录中,从KMM项目中获取所有文件?

iOS解决方案正在工作,所以它真的只是关于Android。

编辑1:澄清一下,目标不是向外部用户提供对文件夹/文件的访问,而是使用KMM公共模块本身内的文件。

我正在寻找任何方法来处理文件和文件夹,一旦该项目作为AAR分发并用作第三方库,也可以使用。

编辑2:目前似乎没有访问AAR中JARS中文件夹的解决方案。

因此,我们切换到一种解决方法,在构建时生成文件夹中所有文件的索引文件,并在运行时使用此信息从特定文件夹中获取所有文件,使用this::class.java.classLoader!!。getResource(路径)(因为getResource适用于文件,而不是文件夹)

共有1个答案

厍浩广
2023-03-14

我认为这是proguard的问题。

将json文件夹从assets文件夹移动到raw文件夹,并更改保留。xml文件。

keep.xml:

 <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/*,@raw/*"/>

参考:https://developer.android.com/studio/build/shrink-code#keep-resources

 类似资料:
  • 问题内容: 假设我有一个URL:我想获得目录下所有文件/目录的列表。 我正在使用Java 5。 我可以使用此程序http://www.httrack.com/获得dir的列表,但是使用Java我不知道是否可行。 有谁知道如何用Java获得它?或者,如果Java无法执行,该程序将如何完成工作? 问题答案: 有一些条件: 服务器必须已启用目录列表,以便您查看其内容。 我没有办法(没有API或HTTP动

  • 我有一个简单的图形用户界面,很少有用户放置配置文件信息的JTextArea组件。 单击“保存”按钮后,所有信息将转换为数组并另存为。txt使用 您可以创建多个配置文件。 在: 我希望所有保存的配置文件都显示在JComboBox中,这样用户就可以选择他的配置文件并编辑他的输入。 所以假设我有一个文件夹与配置文件: 如何让这些文件显示在组合框中?

  • 问题内容: 如何使用PHP获取目录内的文件名? 我找不到使用Google的相关命令,所以希望这个问题能对那些类似的问题有所帮助。 问题答案: 有很多方法。较旧的方法是但 可能是最好的方法。 还有(与一起使用)和。 以下是一些有关如何使用每个示例打印当前目录中所有文件的示例: 用法:(推荐) 用法: 和用法: 用法: 如评论中所述,这是很好的,因为我在那里使用的星号实际上可以用于对文件进行匹配,因此

  • 问题内容: 因此,我试图使用文件handle.list()方法获取目录中的文件列表,但是即使目录中有文件,它也会返回一个空列表。在我看来,奇怪的是它可以在设备上运行,但不能在桌面上运行。我想我知道问题出在哪里,但是我却不知道如何解决。在方法描述中,它说“在桌面上,类路径上目录的FileType.Internal句柄将返回长度为零的数组。”,但是除此之外没有其他方法,所以你们认为我能做什么? 问题答

  • 我有以下数据: 获取密钥列表的最佳方法是什么(好像它是一个dict而不是一个数组)?目前我正在做: 但这感觉有点老土

  • 问题内容: 我正在寻找一种从给定的classpath目录中获取所有资源名称的列表的方法,例如。 例如,给定一个路径目录包含文件和子目录应该返回一个List 包含下列字符串: 。 它应该同时适用于文件系统和jar中的资源。 我知道我可以用Files,JarFiles和URLs编写一个简短的代码段,但是我不想重新发明轮子。我的问题是,鉴于现有的公共可用库,最快的实现方法是getResourceName