Closed tprochazka closed 3 years ago
Do you have defaultToAppBundle
enabled? Either way, it should work if you run ./gradlew publishDefaultBackendProdBundle --artifact-dir bundle
as opposed to the task that runs everything. Though if you have defaultToAppBundle
set to true, the task that runs everything should work.
Yes. I have defaultToAppBundles.set(true)
. But I'm now a little bit confused by your reply if it is good or bad :-)
But I tried to change it to false and it still does a full build.
Btw. I'm using plugin 3.1.0 with AGP 4.1.1.
Oops, sorry. It's good if you set it to true and want to publish a bundle (so true is good).
Did you try the command I suggested? I'd be curious to see if that works. You might also want to check that you didn't accidentally add a dependsOn("bundleRelease") to the publish task.
Sorry. I miss that you added Bundle
to the end of the task. But it looks that it is the same it still starts the full build chain.
But I just tried to do the same on testapp
which is part of your plugin code and it looks that it really doesn't trigger build of everything. So it is really a mystery for me. I will investigate what is going here.
I found a possible source for this issue
For some unknown reason the publish task has dependency on :app:uploadCrashlyticsMappingFileDefaultAvastBackendProdRelease
which basically trigger evething.
I'm using plugin id("com.google.firebase.crashlytics")
Maybe this firebase plugin itself declares a dependency on publish
task.
Ohhhhh, shoot. I added that because of https://github.com/Triple-T/gradle-play-publisher/issues/859
Yes. I just found this
maybeAddDependency("uploadCrashlyticsMappingFile$variantName")
So, I think that this should not happen when --artifact-dir
is used. Only without it.
Hmmmm, I'll have to think about this some more and see if I can ignore it when --artifact-dir
is used like you said. Otherwise I wasn't a fan of adding deps on third-party libs anyway, so I might just kill the feature and add docs telling people how to do this for themselves.
I personally think that the Crashlytics plugin automatically runs its task after the assemble
and bundle
tasks.
So if I run publishReleaseBundle
It depends on bundleRelease
task which will trigger uploadCrashlytics
task.
So I'm actually not sure what is the reason for #859.
Maybe using of this new (and old in the same time) API android.onVariants
which is not used by the Crashlytics plugin?
Yeah, since v3.0 we don't depend on bundleRelease
which is what the crashlytics plugin assumes you'll use. That means it doesn't run by default when you call publish bundle/apk
Just in case you want the technical background, Gradle is moving away from depending on tasks directly. Instead, you depend on a property (in this case a RegularFileProperty that will contain our app bundle) and Gradle knows that's it's an output of a task and can add the implicit dependency on the task for us. bundleRelease
is a global task meaning it doesn't actually do anything and instead just adds a dependency on the real task that builds stuff (which can change without you having to care).
Thanks!
I know about it. It is probably a good way. But I feel that it is even more mysterious than now. They should at least keep the actual effective task name to keep compatibility with the older plugin. I mean that if your task needs bundle
as input it will still run bundle release task as before.
Hmmmm, I'll have to think about this some more and see if I can ignore it when
--artifact-dir
is used like you said. Otherwise I wasn't a fan of adding deps on third-party libs anyway, so I might just kill the feature and add docs telling people how to do this for themselves.
would you mind point us a references to which docs for this? is related to runs the mapping task ourselves in #859?
I'm using two separated jobs on TeamCity, one for build aab and the second for deploy to Play. So build job, just transfer result aab files to deploy job.
Until now, with plugin 2.8.0 I was using this way:
./gradle -x bundleDefaultBackendProdRelease publishDefaultBackendProdRelease
But It stops working with 3+ version of the build plugin because of using a new API for handling dependencies. Your publish job now has no direct dependency on bundleDefaultBackendProdRelease, but has a dependency on the artifact itself.
So. I started using this way:
./gradlew --stacktrace publishDefaultBackendProdRelease --artifact-dir bundle
It works correctly. I mean publish aab inside of
bundle
folder to Play, but big issue is that it build whole app again, simply because publishDefaultBackendProdRelease has still dependency on aab. I asked mz colleagues which using also this way, but still with 2.8.0 and it works for them without rebuilding whole app.It is bug or I'm doing something wrong? Whould be possible to not setup dependency on aab when --artifact-dir is used? Or use different task name without this dependency?