В моем приложении я использую каталог assets для хранения некоторых файлов XML (некоторые большие). Во время разработки я хочу, чтобы файлы использовали отступы, а также оставил в нем некоторые комментарии. Это увеличивает мои xml-файлы и может увеличить их размер.
Возможно ли добавить задачу в сборку gradle, чтобы удалить все отступы и комментарии для xml-файлов перед упаковкой в apk? Если да, то как?
Это не только сократит мой apk, но и поможет во время выполнения с обработкой XML.
РЕДАКТИРОВАТЬ
ответ fhomovc был правильным, но в нем отсутствовала какая-то часть. Я отмечу это как правильное, но если кому-то еще это понадобится, вот подробности:
В общем, мне нужна задача, которая запустит утилиту minify, и она должна выглядеть следующим образом:
task minifyAssets(type:Exec) {
workingDir dirName // the directory of the merged assets under the build directory
commandLine 'minify', '-r', '-o', '.', '.'
doFirst {
println 'minifyAssets...'
}
}
Эта задача должна выполняться только после выполнения задачи слитых активов и до выполнения задачи пакета.
Основная проблема заключается в том, что для каждого варианта должна быть выделенная задача, поэтому мне нужно было это сделать. динамически:
Сначала создайте задачу exec и сделайте ее зависимой от задачи объединения
applicationVariants.all { variant ->
// dynamically add minify task for specific variant
def dirName = new File("app\\build\\intermediates\\merged_assets\\" + variant.name + "\\out\\levels").getAbsolutePath()
def minifyTaskName = "minifyAssets" + variant.name
def mergeAssetsTaskName = "merge" + variant.name + "Assets"
def myTask = tasks.register(minifyTaskName, Exec) {
workingDir dirName
// require that minify utility will be in the path. Download from https://github.com/tdewolff/minify/tree/master/cmd/minify
commandLine 'minify', '-r', '-o', '.', '.'
doFirst {
println 'minifyAssets...' + workingDir
}
}
// set the minify task dependant on the merge assets task
myTask.get().dependsOn mergeAssetsTaskName
}
Теперь нам нужно, чтобы конкретная задача пакета зависела от задачи minify:
// when the package task is added make it dependant on the minify task
tasks.whenTaskAdded { theTask ->
if (theTask.name.startsWith("package") && (theTask.name.endsWith("Debug") || theTask.name.endsWith("Release"))) {
def minifyTaskName = theTask.name.replace("package", "minifyAssets")
theTask.dependsOn minifyTaskName
}
}