我使用这篇文章中描述的过程为我的Android应用程序创建了示例数据目录。我想在我的多个项目之间共享这组示例数据,因此我创建了一个仅包含示例数据的库。但据我所见,sampledata
文件夹没有被编译到库中。是否有一种方法可以在多个Android项目之间共享示例数据?
我使用这篇文章中描述的过程为我的Android应用程序创建了示例数据目录。我想在我的多个项目之间共享这组示例数据,因此我创建了一个仅包含示例数据的库。但据我所见,sampledata
文件夹没有被编译到库中。是否有一种方法可以在多个Android项目之间共享示例数据?
如前所述,您无法通过库来完成此操作,因为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
。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" />
资源
的主要问题是在可重复元素(RecyclerView
中的项)中会反复显示相同的文本。而且,我也不确定由tools:
引用的资源是否会被ProGuard删除。无论如何,感谢您的帮助。我将再开放这个问题几天,如果没有更好的答案,您将得到悬赏。 - Vladimir JovanovićRecyclerView
的每一行中出现相同的数据。 - Denysole