从一个库中使用示例数据目录

9

我使用这篇文章中描述的过程为我的Android应用程序创建了示例数据目录。我想在我的多个项目之间共享这组示例数据,因此我创建了一个仅包含示例数据的库。但据我所见,sampledata文件夹没有被编译到库中。是否有一种方法可以在多个Android项目之间共享示例数据?


你创建了哪种类型的库? - Denysole
Android库。 - Vladimir Jovanović
2个回答

6

如前所述,您无法通过库来完成此操作,因为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
        }
    }
}

您可以看到这里有两个功能,第一个是在clean任务之前运行的,它将只删除您的sampledata文件夹。第二个是在每次构建时运行的任务,它不会每次都下载文件,而是仅在目录不存在时才下载。
我知道您可能会复制粘贴names文件,但是使用这种方法,您只需要复制粘贴任务一次,就可以通过上传新文件并进行干净的构建来更改任何项目中的names

2
简短回答是不行,你不能使用sampledata文件夹。基本上,Android Libraries的格式是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库的一部分。

更新

您可以使用预定义的示例资源,而不是自己的数据样本。
例如,@tools:sample/first_names将从一些常见的名字中随机选择,例如Sophia、Jacob、Ivan。

使用示例:

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

你知道有没有其他方法可以在多个项目之间共享它吗? - Vladimir Jovanović
我花了很多时间,但没有达到任何结果。您可以在“布局”中使用任何资源作为样本数据。我知道的唯一限制是无法像您的教程中描述的那样使用JSON。 - Denysole
对我来说,资源的主要问题是在可重复元素(RecyclerView中的项)中会反复显示相同的文本。而且,我也不确定由tools:引用的资源是否会被ProGuard删除。无论如何,感谢您的帮助。我将再开放这个问题几天,如果没有更好的答案,您将得到悬赏。 - Vladimir Jovanović
@VladimirJovanović 我已经更新了我的答案。这将帮助您避免在RecyclerView的每一行中出现相同的数据。 - Denysole
我知道那些,但我喜欢把"Jake"加入到名字列表中。 :) 对我来说,不用复制/粘贴就能够为多个项目提供自定义样本的方法真是太奇怪了。 - Vladimir Jovanović

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接