【问题标题】:Gradle Copy APK file using publish task in Android Studio 3.0Gradle 使用 Android Studio 3.0 中的发布任务复制 APK 文件
【发布时间】:2017-06-16 18:52:12
【问题描述】:

在 Android 插件版本 3.0.0-alpha4 之前,我一直在使用以下内容将我的 APK 的不同变体发布到特定文件路径:

def publish = project.tasks.create("publishAll")
android.applicationVariants.all { variant ->
  def task = project.tasks.create("publish${variant.name}Apk", Copy)
  task.from(variant.outputs[0].outputFile)
  task.into(buildDir)

  task.dependsOn variant.assemble
  publish.dependsOn task
}

我最初是从 Xavier Ducrohet 的这个回答中得到的:Copying APK file in Android Gradle project

随着使用 3.0.0-alpha4 版本的 Android Studio Preview 的新更新,variant.outputFile 已被弃用。实现此类目标的新建议方法是什么?

编辑: 看起来目前无法访问此处指出的变体输出文件:https://developer.android.com/studio/preview/features/new-android-plugin-migration.html#variant_api

看来我们得等到他们推出这些 api 之后

【问题讨论】:

  • 好像和新版本没有关系。你检查过这个stackoverflow.com/questions/25997866/… 吗?
  • 您为什么认为 variant.outputFile 已被弃用?我正在使用相同的设置,但没有发现任何问题。

标签: android android-studio gradle android-studio-3.0


【解决方案1】:

如果你不使用 abi 拆分下一个 sn-p 工作

project.afterEvaluate {
    android.applicationVariants.all { variant ->
        // create file where to copy 
        def backupFolder = rootProject.file("backup")
        def backupFile = new File(backupFolder, String.format("%s_v%s.%d.apk", variant.flavorName, variant.versionName, variant.versionCode))

        variant.outputs.all { output ->
            Task copyAndRenameAPKTask = project.task("copyAndRename${variant.name.capitalize()}APK", type: Copy) {
                from output.outputFile.getParent()
                into backupFolder
                include output.outputFileName
                rename(output.outputFileName, backupFile.getName())
            }

            // if copyAndRenameAPKTask needs to automatically execute assemble before
            copyAndRenameAPKTask.dependsOn(variant.assemble)
            copyAndRenameAPKTask.mustRunAfter(variant.assemble)

            // if assemble needs to automatically execute copyAndRenameAPKTask after
            variant.assemble.finalizedBy(copyAndRenameAPKTask)
        }
    }
}

【讨论】:

  • 刚试过,对我有用,谢谢!我想主要的收获是将所有这些逻辑放在 project.afterEvaluate 块中,以便输出文件可用
  • 我在 AS 2.3.3 上,但使用此代码时出现错误:“错误:(51, 0) 没有方法签名:java.util.ArrayList.all() 适用于参数类型:(build_e5fu7jxf39bbzgzwdximl8s6$_run_closure3$_closure8$_closure9) 值:[build_e5fu7jxf39bbzgzwdximl8s6$_run_closure3$_closure8$_closure9@4cce4d64] 可能的解决方案:any()、tail()、tail()、last()、last()、add( java.lang.Object)"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2020-10-06
相关资源
最近更新 更多