如何使用Gradle和android插件为我的应用程序创建OBB文件?截至目前,我必须压缩或使用jobb工具来创建我的OBB文件。如果有一种完全通过Gradle创建OBB文件的方法,它将简化我的构建过程和我的生活。
我当前的流程涉及创建一个启动shell脚本的Gradle任务。不完全可取,但它的工作原理。我想知道Gradle中的zip支持。
task buildOBBOSX(type:Exec) {
workingDir '.'
//note: according to the docs, the version code used is that of the "first"
// apk with which the expansion is associated with
commandLine './buildOBB.sh'
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
也许这是最好的解决方案?有可能。如果是这样,并且没有人建议更好,我会将其添加为答案。
答案 0 :(得分:2)
除了按照你现在尝试的方式做,我发现了这个:
all{currentFlavor ->
task ("create"+ currentFlavor.name.substring(0, 1).toUpperCase() + currentFlavor.name.substring(1)+"Obb", type:Zip){
archiveName = "main.${defaultConfig.versionCode}.${currentFlavor.applicationId}.obb"
ext.destDir = new File(buildDir, "obb/${currentFlavor.name}")
ext.destFile = new File(destDir, archiveName)
duplicatesStrategy DuplicatesStrategy.EXCLUDE
doFirst {
destDir.mkdirs()
}
description = "Creates expansion file for APK flavour ${currentFlavor.name}"
destinationDir = new File(buildDir, "obb/${currentFlavor.name}");
entryCompression = ZipEntryCompression.STORED
from "flavors/${currentFlavor.name}/obb", "obb"
tasks.createObb.dependsOn("create"+ currentFlavor.name.substring(0, 1).toUpperCase() + currentFlavor.name.substring(1)+"Obb")
}
}
来源:https://gitlab.labs.nic.cz/labs/tablexia/blob/devel/build.gradle#L154
示例,通过命令行:
jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
来源:http://developer.android.com/tools/help/jobb.html
我建议您为任务添加更多内容,类似于此exec
方法的工作方式。这样,您可以使用packageName传递params或生成任务:
def createOBB(def assetsFolder, def obbFile, def secretKey, def packageName) {
def stdout = new ByteArrayOutputStream(), stderr = new ByteArrayOutputStream()
exec {
// jobb -d /temp/assets/ -o my-app-assets.obb -k secret-key -pn com.my.app.package -pv 11
commandLine 'jobb', '-d', assetsFolder, '-o', obbFile, '-k', secretKey, '-pn', packageName, '-pv', '11'
standardOutput = stdout
errorOutput = stderr
ignoreExitValue true // remove this if you want to crash if fail
}
}