我的应用程序显示了从APK中包含的静态XML文件创建的项目列表。为了加快速度,我的应用在首次加载时会缓存数据的二进制版本。该应用程序在读取缓存的二进制数据而不是XML时,启动速度提高了约300毫秒。
您可以猜到这是怎么回事:构建应用程序时,我想预先计算二进制版本并将其粘贴到assets
目录中。我想保留XML加载器,因为用户可以选择其他XML文件并在应用程序中显示它们。因此,我不想将加载程序移到buildSrc
中,也不想通过构建单独的项目来依赖构建脚本和应用程序的工作。
我已经成功地将缓存代码作为一个单独的目标运行,但是我不知道在哪个Android生成任务上声明doLast
才能使其在常规生成期间发生。
我应该声明哪个任务依赖项,以便在运行构建时就生成依赖项?我已经尝试过preBuild
,packageDebug
和packageRelease
。
task writeBinary() {
doFirst {
print("Writing binary file")
javaexec {
classpath += files("build/intermediates/classes/debug")
classpath += files("build_libs/xpp3-1.1.4c.jar")
main = "ehues.tome.loader.BinaryReaderWriter"
args = ['src/main/assets/standard/my.xml', 'src/main/assets/standard/my.bin']
}
}
}
答案 0 :(得分:0)
这通常是一个有问题的方法;只是不要使用assets
或res/raw
并由AAPT2自动处理您的资源-而不是尝试重新发明轮子。
重点是assets
和res/raw
未被处理,仅被复制。
如果您真的想创建二进制格式,可以通过运行aapt2
或aapt2.exe
来完成。 Gradle Exec
任务可以运行终端命令-然后可以将该任务添加到图形中:
aapt2 compile path-to-input-files [options] -o output-directory/
但是,提供适当的资源XML格式会使它自己处理所有这些事情。