android - 如何使用 Gradle 创建 OBB 文件

标签 android gradle apk-expansion-files

如何使用带有 android 插件的 Gradle 为我的应用程序创建 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()
    }
}

也许这是最好的解决方案?可能吧。如果是这样,并且没有人推荐更好,我会添加它作为答案。

最佳答案

除了按照您现在尝试的方式进行操作外,我还发现:

Gradle :

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 传递参数或生成任务:

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
    }
}

关于android - 如何使用 Gradle 创建 OBB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424901/

相关文章:

java - 设置JUnit 5 workingDir进行测试

android - 禁用自动下载 APK 扩展文件

java - twitter 应用程序仅认证 java android 与 twitter4j

Android 实现一个类似于主屏幕上的页面计数器

android - jitpack.io - 无法解决

spring - Spring BootRun在Eclipse Gradle中不可用

android - 可以挂载未加密的obb但加密错误21

android - 如何挂载加密的APK扩展文件?

android - RecyclerView 中的 ListView

java - 无法尝试实现从查询中获取随机结果到 Firestore