【问题标题】:Use Sample data directory from a library使用库中的示例数据目录
【发布时间】:2018-07-30 04:13:41
【问题描述】:

我使用this 文章中描述的过程为我的 Android 应用创建了示例数据目录。我想在我的项目之间共享这组示例数据,所以我创建了一个内部只有示例数据的库。但据我所知,sampledata 文件夹没有被编译到库中。有没有办法在多个 Android 项目之间共享示例数据?

【问题讨论】:

  • 您创建了哪种类型的库?
  • Android 库。

标签: android android-layout android-studio sample-data


【解决方案1】:

简短的回答是否定的,你不能用sampledata 文件夹来做到这一点。基本上,Android 库的格式是AAR。如果你reference官方文档,上面写着:

文件本身是一个 zip 文件,其中包含以下必填项:

/AndroidManifest.xml

/classes.jar

/res/

/R.txt

/public.txt

此外,AAR 文件可能包含以下一个或多个可选条目:

/assets/

/libs/name.jar

/jni/abi_name/name.so(其中 abi_name 是 Android 支持的 ABI 之一)

/proguard.txt

/lint.jar

所以,sampledata 不能成为 AAR 库的一部分。

更新

您可以使用predefined 样本资源来代替您自己的数据样本。
例如,@tools:sample/first_names 将从一些常见的名字中随机选择,例如,Sophia、Jacob、Ivan。

用法示例:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="@tools:sample/first_names" />

【讨论】:

  • 你知道有没有其他方法可以在多个项目之间共享它?
  • 我花了很多时间但没有得到任何结果。您可以将您的任何资源用作layout 中的示例数据。我知道的唯一限制是,无法按照教程中的说明使用 JSON
  • resources 对我来说的主要问题是,在可重复元素(RecyclerView 中的项目)中,相同的文本会一遍又一遍地显示。我也不确定tools: 引用的资源是否会被 ProGuard 删除。无论如何,感谢您的帮助。我会把这个问题留几天,如果没有更好的答案,你会得到赏金。
  • @VladimirJovanović 我已经更新了我的答案。它将帮助您避免RecyclerView的每一行中的数据相同
  • 我知道这些,但我喜欢在名字列表中包含“Jake”。 :) 对我来说很奇怪,没有复制/粘贴就没有办法为多个项目提供自定义示例。
【解决方案2】:

如前所述,您不能对库执行此操作,因为 sampledata 根本不能成为 Android 库的一部分。

您可以做一件事,将您的 names 文件托管在某处,然后使用 gradle 任务获取它,您可以添加到应用程序的 build.gradle

clean.doFirst {
    println "cleanSamples"
    def samplesDir = new File(projectDir.absolutePath, "sampledata")
    if (samplesDir.exists()) {
        samplesDir.deleteDir()
    }
}

task fetchSamples {
    println "fetchSamples"
    def samplesDir = new File(projectDir.absolutePath, "sampledata")
    if (samplesDir.exists()) {
        println "samples dir already exists"
        return
    }    
    samplesDir.mkdir()

    def names = new File(samplesDir, "names")

    new URL('http://path/to/names').withInputStream { i ->
        names.withOutputStream {
            it << i
        }
    }
}

您可以在那里看到 2 个函数,第一个在 clean 任务之前运行,它只会删除您的 sampledata 文件夹。第二个是在每次构建时运行的任务,它不会每次都下载文件,但前提是目录不存在。

我了解您不妨复制粘贴names 文件,但是,使用此方法您只需复制粘贴一次任务,您只需上传新文件即可在任何项目中更改names进行干净的构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多