Skip to content

Instantly share code, notes, and snippets.

@hikobae
Last active June 21, 2021 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hikobae/ed60800c3a41ccf73347d2039de36a67 to your computer and use it in GitHub Desktop.
Save hikobae/ed60800c3a41ccf73347d2039de36a67 to your computer and use it in GitHub Desktop.
aab から apk を生成するタスク

aab から apk を生成するタスク

やりたいこと

  • Gradle のタスクで aab から apk を生成する
  • bundletool が未ダウンロードの場合はダウンロードする
  • Universal APK (.apks) の拡張子を .zip にする (配布時の説明を省くため)

コード

  • Gradle Download Taskbundletool-all-1.6.1.jar をダウンロードする
  • $buildDir/outputs/bundle/**/*.aab を Universal APK に変換する
plugins {
    id 'de.undercouch.download'
}

def bundletool = new File("$buildDir/tools", 'bundletool.jar')

task downloadBundleTool(type: Download) {
    src 'https://github.com/google/bundletool/releases/download/1.6.1/bundletool-all-1.6.1.jar'
    dest bundletool
    overwrite false
}

task bundleApks(dependsOn: ['bundle', 'downloadBundleTool']) {
    mustRunAfter 'bundle'
    mustRunAfter 'downloadBundleTool'

    doLast {
        FileTree tree = fileTree(dir: "$buildDir/outputs/bundle/", include: "**/*.aab")
        tree.each {
            def aab = it.path
            def apks = new File(aab.take(aab.lastIndexOf('.')) + '.apks')
            if (apks.exists()) {
                apks.delete()
            }
            def zip = new File(apks.path + '.zip')
            if (zip.exists()) {
                zip.delete()
            }

            project.javaexec { JavaExecSpec javaExecSpec ->
                javaExecSpec.main '-jar'
                javaExecSpec.args = [
                    bundletool,
                    'build-apks',
                    "--bundle=$aab",
                    "--output=$apks",
                    "--ks=${android.signingConfigs.release.storeFile}",
                    "--ks-pass=pass:${android.signingConfigs.release.storePassword}",
                    "--ks-key-alias=${android.signingConfigs.release.keyAlias}",
                    "--key-pass=pass:${android.signingConfigs.release.keyPassword}",
                    '--mode=universal'
                ]
            }

            apks.renameTo(zip)
        }
    }
}

使い方

> gradlew bundleApks

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment