使用库中的示例数据目录
Use Sample data directory from a library
我使用 this 文章中描述的过程为我的 Android 应用程序创建了示例数据目录。我想在我的项目之间共享这组样本数据,所以我创建了一个库,里面只有样本数据。但据我所知,sampledata
文件夹没有被编译到库中。有没有办法在多个 Android 项目之间共享示例数据?
简短的回答是否定的,您不能对 sampledata
文件夹执行此操作。基本上,Android 库的格式是 AAR
。如果你 reference 官方文档,它说:
The file itself is a zip file containing the following mandatory entries:
/AndroidManifest.xml
/classes.jar
/res/
/R.txt
/public.txt
Additionally, an AAR file may include one or more of the following optional entries:
/assets/
/libs/name.jar
/jni/abi_name/name.so (where abi_name is one of the Android supported ABIs)
/proguard.txt
/lint.jar
因此,sampledata
不能成为 AAR
库的一部分。
更新
您可以使用 predefined 样本资源来代替您自己的数据样本。
例如 @tools:sample/first_names
将从一些常见的名字中随机 select,例如 Sophia、Jacob、Ivan。
用法示例:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="@tools:sample/first_names" />
如前所述,您不能对库执行此操作,因为 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
通过上传新文件并进行干净构建。
我使用 this 文章中描述的过程为我的 Android 应用程序创建了示例数据目录。我想在我的项目之间共享这组样本数据,所以我创建了一个库,里面只有样本数据。但据我所知,sampledata
文件夹没有被编译到库中。有没有办法在多个 Android 项目之间共享示例数据?
简短的回答是否定的,您不能对 sampledata
文件夹执行此操作。基本上,Android 库的格式是 AAR
。如果你 reference 官方文档,它说:
The file itself is a zip file containing the following mandatory entries:
/AndroidManifest.xml
/classes.jar
/res/
/R.txt
/public.txtAdditionally, an AAR file may include one or more of the following optional entries:
/assets/
/libs/name.jar
/jni/abi_name/name.so (where abi_name is one of the Android supported ABIs)
/proguard.txt
/lint.jar
因此,sampledata
不能成为 AAR
库的一部分。
更新
您可以使用 predefined 样本资源来代替您自己的数据样本。
例如 @tools:sample/first_names
将从一些常见的名字中随机 select,例如 Sophia、Jacob、Ivan。
用法示例:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="@tools:sample/first_names" />
如前所述,您不能对库执行此操作,因为 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
通过上传新文件并进行干净构建。