Upload apk on play store instead of uploading the app bundle

This commit is contained in:
MohitMaliFtechiz 2023-05-25 17:18:18 +05:30
parent f9ff02a45e
commit 093384d00f
2 changed files with 27 additions and 39 deletions

View File

@ -16,6 +16,8 @@
package custom package custom
import com.android.build.api.variant.VariantOutput
import com.android.build.gradle.api.ApkVariantOutput
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential import com.google.api.client.googleapis.auth.oauth2.GoogleCredential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.FileContent import com.google.api.client.http.FileContent
@ -79,29 +81,29 @@ class Transaction(
FileContent("application/octet-stream", file) FileContent("application/octet-stream", file)
).execute().prettyPrint() ).execute().prettyPrint()
fun attachExpansionTo(versionCode: Int): ExpansionFile = fun attachExpansionTo(expansionCode: Int, apkVariantOutput: ApkVariantOutput): ExpansionFile =
publisher.edits().expansionfiles().update( publisher.edits().expansionfiles().update(
packageName, packageName,
editId, editId,
versionCode, apkVariantOutput.versionCodeOverride,
"main", "main",
ExpansionFile().apply { referencesVersion = versionCode } ExpansionFile().apply { referencesVersion = expansionCode }
).execute().prettyPrint() ).execute().prettyPrint()
fun uploadBundle(outputFile: File) { fun uploadApk(apkVariantOutput: ApkVariantOutput) {
publisher.edits().bundles().upload( publisher.edits().apks().upload(
packageName, packageName,
editId, editId,
FileContent("application/octet-stream", outputFile) FileContent("application/octet-stream", apkVariantOutput.outputFile)
).execute().prettyPrint() ).execute().prettyPrint()
} }
fun addToTrackInDraft(versionCode: Int, versionName: String?): Track = fun addToTrackInDraft(apkVariants: List<ApkVariantOutput>): Track =
publisher.edits().tracks().update(packageName, editId, "alpha", Track().apply { publisher.edits().tracks().update(packageName, editId, "alpha", Track().apply {
releases = listOf(TrackRelease().apply { releases = listOf(TrackRelease().apply {
status = "draft" status = "draft"
name = versionName name = apkVariants[0].versionNameOverride
versionCodes = listOf(versionCode.toLong()) versionCodes = apkVariants.map { it.versionCodeOverride.toLong() }
}) })
track = "alpha" track = "alpha"
}).execute().prettyPrint() }).execute().prettyPrint()

View File

@ -1,11 +1,10 @@
import com.android.build.gradle.api.ApplicationVariant
import com.android.build.gradle.api.ApkVariantOutput import com.android.build.gradle.api.ApkVariantOutput
import com.android.build.gradle.api.ApplicationVariant
import com.android.build.gradle.internal.dsl.ProductFlavor import com.android.build.gradle.internal.dsl.ProductFlavor
import custom.CustomApps import custom.CustomApps
import custom.createPublisher import custom.createPublisher
import custom.transactionWithCommit import custom.transactionWithCommit
import plugin.KiwixConfigurationPlugin import plugin.KiwixConfigurationPlugin
import java.io.FileNotFoundException
import java.net.URI import java.net.URI
import java.net.URL import java.net.URL
@ -26,16 +25,13 @@ android {
all { all {
File("$projectDir/src", "$name/$name.zim").let { File("$projectDir/src", "$name/$name.zim").let {
createDownloadTask(it) createDownloadTask(it)
createPublishBundleWithExpansionTask(it, applicationVariants) createPublishApkWithExpansionTask(it, applicationVariants)
} }
} }
} }
splits {
bundle { abi {
language { isUniversalApk = false
// This is disabled so that the App Bundle does NOT split the APK for each language.
// We're gonna use the same APK for all languages.
enableSplit = false
} }
} }
} }
@ -65,12 +61,12 @@ fun ProductFlavor.fetchUrl(): String {
} }
} }
fun ProductFlavor.createPublishBundleWithExpansionTask( fun ProductFlavor.createPublishApkWithExpansionTask(
file: File, file: File,
applicationVariants: DomainObjectSet<ApplicationVariant> applicationVariants: DomainObjectSet<ApplicationVariant>
): Task { ): Task {
val capitalizedName = name.capitalize() val capitalizedName = name.capitalize()
return tasks.create("publish${capitalizedName}ReleaseBundleWithExpansionFile") { return tasks.create("publish${capitalizedName}ReleaseApkWithExpansionFile") {
group = "publishing" group = "publishing"
description = "Uploads $capitalizedName to the Play Console with an Expansion file" description = "Uploads $capitalizedName to the Play Console with an Expansion file"
doLast { doLast {
@ -79,20 +75,11 @@ fun ProductFlavor.createPublishBundleWithExpansionTask(
createPublisher(File(rootDir, "playstore.json")) createPublisher(File(rootDir, "playstore.json"))
.transactionWithCommit(packageName) { .transactionWithCommit(packageName) {
val variants = val variants =
applicationVariants.releaseVariantsFor(this@createPublishBundleWithExpansionTask) applicationVariants.releaseVariantsFor(this@createPublishApkWithExpansionTask)
val generatedBundleFile = variants.forEach(::uploadApk)
File( uploadExpansionTo(file, variants[0].versionCodeOverride)
"$buildDir/outputs/bundle/${capitalizedName.toLowerCase()}" + variants.drop(1).forEach { attachExpansionTo(variants[0].versionCodeOverride, it) }
"Release/custom-${capitalizedName.toLowerCase()}-release.aab" addToTrackInDraft(variants)
)
if (generatedBundleFile.exists()) {
uploadBundle(generatedBundleFile)
uploadExpansionTo(file, variants[0].versionCode)
attachExpansionTo(variants[0].versionCode)
addToTrackInDraft(variants[0].versionCode, versionName)
} else {
throw FileNotFoundException("Unable to find generated aab file")
}
} }
} }
} }
@ -100,14 +87,13 @@ fun ProductFlavor.createPublishBundleWithExpansionTask(
fun DomainObjectSet<ApplicationVariant>.releaseVariantsFor(productFlavor: ProductFlavor) = fun DomainObjectSet<ApplicationVariant>.releaseVariantsFor(productFlavor: ProductFlavor) =
find { it.name.equals("${productFlavor.name}Release", true) }!! find { it.name.equals("${productFlavor.name}Release", true) }!!
.outputs.filterIsInstance<ApkVariantOutput>() .outputs.filterIsInstance<ApkVariantOutput>().sortedBy { it.versionCodeOverride }
.filter { it.baseName.contains("universal") }.sortedBy { it.versionCode }
afterEvaluate { afterEvaluate {
tasks.filter { it.name.contains("ReleaseBundleWithExpansionFile") }.forEach { tasks.filter { it.name.contains("ReleaseApkWithExpansionFile") }.forEach {
val flavorName = val flavorName =
it.name.substringAfter("publish").substringBefore("ReleaseBundleWithExpansionFile") it.name.substringAfter("publish").substringBefore("ReleaseApkWithExpansionFile")
it.dependsOn.add(tasks.getByName("download${flavorName}Zim")) it.dependsOn.add(tasks.getByName("download${flavorName}Zim"))
it.dependsOn.add(tasks.getByName("bundle${flavorName}Release")) it.dependsOn.add(tasks.getByName("assemble${flavorName}Release"))
} }
} }