- Gradle のタスクで aab から apk を生成する
bundletool
が未ダウンロードの場合はダウンロードする
- Universal APK (
.apks
) の拡張子を .zip
にする (配布時の説明を省くため)
- Gradle Download Task で
bundletool-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)
}
}
}