I think that *onVariantProperties* is called only when the variant is actually created. In my previous implementation, I'm using *project.android.applicationVariants.each* which works even after evaluation.
And I need to replace the APK, I cannot put it to a different folder, because I'm not at the end of the chain. There is mostly plugin to publish APK to play store or to the internal maven artifactory. Or just install task which uploads it to device, or connectedDeviceTest which all needs to use properly signed APK in the same way how internal sign mechanism works. Also directly from Android studio must be still possible to run/debug release build directly. So everything must be really transparent. But currently, I stuck that my Task is never called. I trying to find out why examples work and mine not. Dne čtvrtek 25. června 2020 v 17:29:29 UTC+2 uživatel Jerome Dochez napsal: > yes it will not necessarily work if you call from the afterEvaluate > because that's where we hook up the AGP in Gradle and the order matters > (you are coming after us) > > you need to find a way to move your code out. > btw, do NOT use the same folder for input and output, one is to read the > unsigned APK, the other is to write out the signed, you should not use the > same folder. > > On Thu, Jun 25, 2020 at 7:04 AM Tomáš Procházka <tomas.p...@gmail.com> > wrote: > >> But it looks that not understanding this API is smaller problem. >> I found that *android.onVariantProperties* is never called when I call >> it inside of *project.afterEvaluate* >> I'm doing it because I have own configuration extension inside of my >> plugin. >> So setup looks like >> >> apply ..... >> >> myConfigExtension { >> mysetup >> } >> >> And in the time od signing configuration I need to know about values in >> myConfigExtension >> >> Without it it at least run the first println, but it never call >> RemoteSignTask >> >> android.onVariantProperties { ApplicationVariantProperties v >> -> >> >> println 'xxxxx' + "remoteSign" + v.name.capitalize() + >> "Apk" >> >> TaskProvider singingTaskProvider = project.tasks.register( >> "remoteSign" + v.name.capitalize() + "Apk", >> RemoteSignTask) >> >> //def transformationRequest = >> v.artifacts.use(singingTaskProvider) >> .wiredWithDirectories( >> { it.apkFolder }, { it.apkFolder } >> ) >> .toTransformMany(ArtifactType.APK.INSTANCE) >> >> >> >> } >> >> >> Dne čtvrtek 25. června 2020 v 2:23:37 UTC+2 uživatel Jerome Dochez napsal: >> >>> we do not have such a thing as an unsigned APK (even internally because >>> we package and sign simultaneously). >>> what you need to do is disable signing alltogether for your app by >>> turning off v1 and v2 signing through the DSL, then your APK would be >>> unsigned... >>> >>> On Wed, Jun 24, 2020 at 1:35 PM Tomáš Procházka <tomas.p...@gmail.com> >>> wrote: >>> >>>> I'm sorry, but this API doesn't make sense at all for me. >>>> This WorkerEnabledTransformation example just takes the final APK and >>>> copy it somewhere else. >>>> But I need to replace the default sign mechanism provided by the >>>> Android plugin and nobody else (a different plugin) should know about. >>>> So technically I need to tell that my task needs unsigned APK on input >>>> and final APK on output. >>>> If I understand correctly this talk >>>> https://youtu.be/OTANozHzgPc?t=1023 >>>> With new API I should not care about the actual task which is >>>> responsible o signing. I should care just about input and output artifacts. >>>> So I should tell that I have a task that can handle unsigned APK on the >>>> input and can sign it. And I want to replace any other task, which would >>>> like do the same. >>>> The replace mechanism described in the talk at >>>> https://youtu.be/OTANozHzgPc?t=1023 gives much more sense for me. >>>> I would expect something like this: >>>> >>>> artifact.use(signTaskProducer).toCreate(ArtifactType.APK.INSTANCE).from(ArtifactType.UNSIGNED_APK.INSTANCE) >>>> >>>> >>>> Dne středa 24. června 2020 v 21:54:32 UTC+2 uživatel Jerome Dochez >>>> napsal: >>>> >>>>> toCreate API is used to create an artifact from its input, so here >>>>> that would mean creating the APK file from dex, merged manifests, >>>>> resources, etc... >>>>> >>>>> what you want is transform : >>>>> >>>>> val transformationRequest = artifacts.use(singingTaskProvider) >>>>> .wiredWithDirectories( >>>>> SigningTask::inputApkFolder, >>>>> SingingTas::outputAPKFolder) >>>>> .toTransformMany(ArtifactType.APK) >>>>> >>>>> >>>>> look at WorkerEnabledTransformation, it should be very similar except >>>>> you copy and sign the files instead of just copying >>>>> >>>>> you can do AAB but I need to add test APK which right now are not >>>>> available through the public artifact types. >>>>> >>>>> On Wed, Jun 24, 2020 at 8:32 AM Tomáš Procházka <tomas.p...@gmail.com> >>>>> wrote: >>>>> >>>>>> I'm still not sure how to use it exactly, can you help a little bit. >>>>>> Currently, I have this code: >>>>>> >>>>>> android.onVariantProperties { >>>>>> ApplicationVariantProperties v -> >>>>>> TaskProvider signTaskProducer = tasks.register( >>>>>> "remoteSign" + variant.name.capitalize() + >>>>>> "Apk", >>>>>> RemoteSignTask) >>>>>> >>>>>> v.artifacts.use(signTaskProducer) >>>>>> .wiredWith( ? ) >>>>>> .toCreate(ArtifactType.APK.INSTANCE) >>>>>> } >>>>>> >>>>>> But I'm not sure what is responsible for produce unsigned task. >>>>>> And I need to sign APK, AAB and also test APK >>>>>> And inside of RemoteSignTask task I need to get location of all files >>>>>> which should be fixed. >>>>>> >>>>>> My original code working until 4.0.0 was looking like this: >>>>>> >>>>>> project.android.applicationVariants.each { >>>>>> ApplicationVariant variant -> >>>>>> if (!isReleaseBuildType(variant)) { >>>>>> project.logger.info("Skipping signing, '$ >>>>>> variant.name' is not release.") >>>>>> return >>>>>> } >>>>>> >>>>>> variant.outputs.all { ApkVariantOutput output -> >>>>>> // hack to keep proper final name also when >>>>>> assemble task will be skipped >>>>>> output.outputFileName = >>>>>> RemoteSignTask.renameToSignedName(output.outputFileName) >>>>>> } >>>>>> variant.setOutputsAreSigned(true) >>>>>> >>>>>> // Regular APK signing >>>>>> def apk = >>>>>> variant.getFinalArtifact(InternalArtifactType.APK.INSTANCE) >>>>>> InternalArtifactType.APK.INSTANCE >>>>>> def signTask = project.tasks.register( >>>>>> "remoteSign" + variant.name.capitalize() + >>>>>> "Apk", RemoteSignTask, >>>>>> new RemoteSignTask.ConfigAction(variant, apk)) >>>>>> >>>>>> // FIXME: IT should be completely outside this task, >>>>>> but it is not possible now >>>>>> def folderManifestTaskForApk = project.tasks.register( >>>>>> "folderManifest" + variant.name.capitalize() >>>>>> + "Apk", FolderManifestTask, >>>>>> new FolderManifestTask.ConfigAction(variant, >>>>>> apk)) >>>>>> >>>>>> variant.assembleProvider.configure { >>>>>> it.dependsOn(signTask) >>>>>> it.dependsOn(folderManifestTaskForApk) >>>>>> } >>>>>> signTask.configure { >>>>>> folderManifestTaskForApk.get().dependsOn(it) >>>>>> } >>>>>> >>>>>> // App bundle signing >>>>>> def bundle = >>>>>> variant.getFinalArtifact(InternalArtifactType.BUNDLE.INSTANCE) >>>>>> def bundleSignTask = project.tasks.register( >>>>>> "remoteSign" + variant.name.capitalize() + >>>>>> "Bundle", RemoteSignTask, >>>>>> new RemoteSignTask.ConfigAction(variant, >>>>>> bundle)) >>>>>> >>>>>> // FIXME: IT should be completely outside this tak, >>>>>> but it is not possible now >>>>>> def folderManifestTaskForAAB = project.tasks.register( >>>>>> "folderManifest" + variant.name.capitalize() >>>>>> + "Bundle", FolderManifestTask, >>>>>> new FolderManifestTask.ConfigAction(variant, >>>>>> bundle)) >>>>>> >>>>>> >>>>>> variant.getVariantData().getTaskContainer().bundleTask.configure { >>>>>> it.dependsOn(bundleSignTask) >>>>>> it.dependsOn(folderManifestTaskForAAB) >>>>>> } >>>>>> bundleSignTask.configure { >>>>>> folderManifestTaskForAAB.get().dependsOn(it) >>>>>> } >>>>>> >>>>>> if (variant.testVariant != null ) { >>>>>> // Test APK signing >>>>>> def testApk = >>>>>> variant.testVariant.getFinalArtifact(InternalArtifactType.APK.INSTANCE) >>>>>> def testSignTask = project.tasks.register( >>>>>> "remoteSign" + variant.name.capitalize() >>>>>> + "AndroidTest", RemoteSignTask, >>>>>> new >>>>>> RemoteSignTask.ConfigAction(variant.testVariant, testApk)) >>>>>> >>>>>> variant.testVariant.assembleProvider.configure { >>>>>> dependsOn(testSignTask) >>>>>> } >>>>>> >>>>>> >>>>>> variant.testVariant.connectedInstrumentTestProvider.configure { >>>>>> dependsOn(testSignTask) >>>>>> } >>>>>> } >>>>>> >>>>>> } >>>>>> >>>>>> Dne středa 24. června 2020 v 7:00:11 UTC+2 uživatel Jerome Dochez >>>>>> napsal: >>>>>> >>>>>>> yes, just replace the artifact type with APK. >>>>>>> >>>>>>> On Tue, Jun 23, 2020 at 3:12 PM Tomáš Procházka < >>>>>>> tomas.p...@gmail.com> wrote: >>>>>>> >>>>>>>> But it looks that replace Sign mechanism should be done in the same >>>>>>>> way as replace manifest merger which is shown here >>>>>>>> >>>>>>>> https://github.com/android/gradle-recipes/blob/master/Groovy/manifestReplacementTest/app/build.gradle >>>>>>>> >>>>>>>> right? >>>>>>>> >>>>>>>> Dne čtvrtek 11. června 2020 v 20:33:23 UTC+2 uživatel Tomáš >>>>>>>> Procházka napsal: >>>>>>>> >>>>>>>>> This is super useful https://github.com/android/gradle-recipes >>>>>>>>> Would be possible to add there how to >>>>>>>>> >>>>>>>>> - rename output apk/aab to a custom name >>>>>>>>> - write custom apk/aab signer >>>>>>>>> >>>>>>>>> Please. >>>>>>>>> >>>>>>>>> >>>>>>>>> Dne čtvrtek 21. května 2020 8:56:13 UTC+2 Tomáš Procházka >>>>>>>>> napsal(a): >>>>>>>>> >>>>>>>>>> Hi. Thanks. An example would be really great. So in 3.6 is the >>>>>>>>>> only possible way to found last one *task *which produces APK >>>>>>>>>> and do my stuff in the doLast {} closure, right? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Dne pátek 6. března 2020 19:02:36 UTC+1 Jerome Dochez napsal(a): >>>>>>>>>>> >>>>>>>>>>> it's not possible to do this in 3.6. We are hoping to deliver >>>>>>>>>>> most of this during the 4.1 and 4.2 releases. >>>>>>>>>>> >>>>>>>>>>> for your second question, you probably will just need to get the >>>>>>>>>>> PublicArtifactType.APK artifacts and have a task that depend on >>>>>>>>>>> them. >>>>>>>>>>> this should actually already work in 4.0 with relatively (!) >>>>>>>>>>> stable APIs, I can slap an example next week if you are interested >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Fri, Mar 6, 2020 at 8:50 AM Tomáš Procházka < >>>>>>>>>>> tomas.p...@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi. >>>>>>>>>>>> >>>>>>>>>>>> If. Understand it correctly. >>>>>>>>>>>> New variant API is mentioned here >>>>>>>>>>>> https://youtu.be/OTANozHzgPc?t=995 >>>>>>>>>>>> It is currently possible with 3.6.0 ? >>>>>>>>>>>> Is there some more advanced article or video about this API or >>>>>>>>>>>> documentation somewhere? >>>>>>>>>>>> >>>>>>>>>>>> For example, I'm not sure if I should use *replace *or >>>>>>>>>>>> *transform* to replace the default sign mechanism? >>>>>>>>>>>> >>>>>>>>>>>> And I also need one new thing. I would like to count hash of >>>>>>>>>>>> all APK and AAB produced during the build. >>>>>>>>>>>> So I maybe can use *register, *but I don't want to force >>>>>>>>>>>> production of APK or AAB. I want just wait when it happens so when >>>>>>>>>>>> user >>>>>>>>>>>> call bundle or assemble I need to know about every apk or bundle >>>>>>>>>>>> that will >>>>>>>>>>>> be produced. >>>>>>>>>>>> It is possible? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Dne pondělí 21. října 2019 18:15:13 UTC+2 Jerome Dochez >>>>>>>>>>>> napsal(a): >>>>>>>>>>>> >>>>>>>>>>>>> yes there will be : >>>>>>>>>>>>> 1. disable all signing in the DSL (v1 and v2) >>>>>>>>>>>>> 2. obtain the built APK with new variant API >>>>>>>>>>>>> 3. sign them. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Oct 20, 2019 at 12:16 PM Tomáš Procházka < >>>>>>>>>>>>> tomas.p...@gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Jerome. Thanks. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Btw. Best would be if there will be a direct way how to >>>>>>>>>>>>>> replace default sign mechanism, just by implementing some >>>>>>>>>>>>>> interface ;-) >>>>>>>>>>>>>> Without modifying tasks and dependencies between them. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Dne pátek 18. října 2019 19:43:29 UTC+2 Jerome Dochez >>>>>>>>>>>>>> napsal(a): >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Tomas >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> we are getting closer to provide a new API that will be >>>>>>>>>>>>>>> stable so you want have to handle such changes. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Tue, Oct 15, 2019 at 7:26 AM Tomáš Procházka < >>>>>>>>>>>>>>> tomas.p...@gmail.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I will reply myself. The correct form of getFinalArtifact >>>>>>>>>>>>>>>> parameter >>>>>>>>>>>>>>>> is InternalArtifactType.APK.INSTANCE >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Dne neděle 13. října 2019 23:56:14 UTC+2 Tomáš Procházka >>>>>>>>>>>>>>>> napsal(a): >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Please, I need help again. >>>>>>>>>>>>>>>>> My custom sign mechanism is again broken in plugin 4.6.0. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> InstallableVariantImpl.getFinalArtifact now return a >>>>>>>>>>>>>>>>> different value, insead of BuildableArtifact it is there >>>>>>>>>>>>>>>>> now Provider<FileCollection>. >>>>>>>>>>>>>>>>> It is also necessary to call it in this way from Groovy >>>>>>>>>>>>>>>>> now variant.getFinalArtifact(new >>>>>>>>>>>>>>>>> InternalArtifactType.APK()) >>>>>>>>>>>>>>>>> I get Provider instance correctly, but the collection is >>>>>>>>>>>>>>>>> always empty. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> @TaskAction >>>>>>>>>>>>>>>>> void sign() { >>>>>>>>>>>>>>>>> println '>>>>>>>>>>>>>> A2 sign task: ' + >>>>>>>>>>>>>>>>> inputFiles.get().files.size() >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> This is always 0. >>>>>>>>>>>>>>>>> I'm calling get() in my task, which is registered in this >>>>>>>>>>>>>>>>> way >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> variant.assembleProvider.configure { >>>>>>>>>>>>>>>>> dependsOn(signTask) >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Dne čtvrtek 17. ledna 2019 12:40:06 UTC+1 Tomáš Procházka >>>>>>>>>>>>>>>>> napsal(a): >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> So, here is my final solution: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> https://gist.github.com/tprochazka/457c7eebd044c0210dcc8ba49301cda9 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> It's quite complicated. I'm using not public API, but it >>>>>>>>>>>>>>>>>> looks that it works currently. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I created a new feature request to make it possible in >>>>>>>>>>>>>>>>>> some easier way >>>>>>>>>>>>>>>>>> https://issuetracker.google.com/issues/122883577 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>>>>> Google Groups "adt-dev" group. >>>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails >>>>>>>>>>>>>>>> from it, send an email to adt...@googlegroups.com. >>>>>>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>>>>>> https://groups.google.com/d/msgid/adt-dev/55e89d8f-5216-4ff5-b2e0-765f80025438%40googlegroups.com >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> <https://groups.google.com/d/msgid/adt-dev/55e89d8f-5216-4ff5-b2e0-765f80025438%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>>>>>> . >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>>> Google Groups "adt-dev" group. >>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>>>> it, send an email to adt...@googlegroups.com. >>>>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>>>> https://groups.google.com/d/msgid/adt-dev/cae178f3-d127-4803-9062-8bacbeebd250%40googlegroups.com >>>>>>>>>>>>>> >>>>>>>>>>>>>> <https://groups.google.com/d/msgid/adt-dev/cae178f3-d127-4803-9062-8bacbeebd250%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>>>> . >>>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "adt-dev" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to adt...@googlegroups.com. >>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>> https://groups.google.com/d/msgid/adt-dev/76a13511-fa1b-4737-9c20-8f5425867438%40googlegroups.com >>>>>>>>>>>> >>>>>>>>>>>> <https://groups.google.com/d/msgid/adt-dev/76a13511-fa1b-4737-9c20-8f5425867438%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>> . >>>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "adt-dev" group. >>>>>>>> >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to adt-dev+u...@googlegroups.com. >>>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/adt-dev/0d56caca-91f4-40d7-8069-055051881948n%40googlegroups.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/adt-dev/0d56caca-91f4-40d7-8069-055051881948n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "adt-dev" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to adt-dev+u...@googlegroups.com. >>>>>> >>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/adt-dev/2bb989c1-97d1-4d7c-9603-53eaf0ce66dcn%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/adt-dev/2bb989c1-97d1-4d7c-9603-53eaf0ce66dcn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "adt-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to adt-dev+u...@googlegroups.com. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/adt-dev/1d22642d-3d74-456e-af8b-8e17eda0d055n%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/adt-dev/1d22642d-3d74-456e-af8b-8e17eda0d055n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "adt-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to adt-dev+u...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/adt-dev/4113877e-5987-4d9c-bc5e-d008fdc14e6fn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/adt-dev/4113877e-5987-4d9c-bc5e-d008fdc14e6fn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "adt-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to adt-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/adt-dev/2367a793-57b5-40c9-a4c8-590e9726df75n%40googlegroups.com.