Advertisement
dsvoronin

copyApk.init.gradle

Jul 18th, 2021 (edited)
2,335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 2.38 KB | None | 0 0
  1. import com.android.build.VariantOutput
  2.  
  3. initscript {
  4.     repositories {
  5.         google()
  6.         mavenCentral()
  7.     }
  8.     dependencies {
  9.         classpath 'com.android.tools.build:gradle:4.2.2'
  10.     }
  11. }
  12.  
  13. gradle.allprojects { project ->
  14.     project.plugins.withId("com.android.application") {
  15.         android {
  16.             applicationVariants.all { variant ->
  17.  
  18.                 def variantSlug = variant.name.capitalize()
  19.  
  20.                 // использую deprecated апи, т.к. вижу что ты используешь его в оригинальной пасте, для совместимости
  21.                 // в 7.0 AGP такое уже не прокатит и надо будет писать по-новому
  22.                 variant.outputs.all { output ->
  23.                     if (output.outputType == VariantOutput.MAIN) {
  24.  
  25.                         def copyTask = tasks.register("copy${variantSlug}Apks", Copy) {
  26.                             from(output.getOutputFile())
  27.  
  28.                             // здесь можно еще дополнительно применить какой нужно ренейм
  29.                             // https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html
  30.  
  31.                             // подставь сюда любой путь. который тебе удобно
  32.                             into(project.rootDir)
  33.  
  34.                             // так связываем с таской, которая продюсит apk
  35.                             // это не совсем правильный (legacy way)
  36.                             // правильно будет сразу в from() передать нужный artifactProvider,
  37.                             // но этот API сейчас между 4.1 4.2 7.0 AGP сильно шатают
  38.                             // см https://android-developers.googleblog.com/2020/12/announcing-android-gradle-plugin.html
  39.                             dependsOn(variant.getPackageApplicationProvider())
  40.                         }
  41.  
  42.                         // вот так ассембл таска узнает что нужно перед окончанием еще выполнить copy
  43.                         variant.getAssembleProvider().configure {
  44.                             dependsOn(copyTask)
  45.                         }
  46.                     }
  47.                 }
  48.             }
  49.         }
  50.     }
  51. }
  52.  
  53. // я для тестов положил в ~/.gradle/init.d/copyApks.gradle
  54. // проверяется запуском любой assemble таски на проекте
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement