【问题标题】:How can Variant Outputs be manipulated using the Android Gradle Plugin 3.0.0+?如何使用 Android Gradle 插件 3.0.0+ 操作变体输出?
【发布时间】:2017-08-04 15:25:36
【问题描述】:

Android Plugin for Gradle 的最新版本 (3.0.0) 破坏了其用于操作 Variant Outputs 的 API。此 API 用于操作在构建期间创建的文件(例如 AndroidManifest.xml),已被删除以缩短配置时间。

有哪些新的 API 可用于操作变体输出,它们与 2.X API 有何不同?

【问题讨论】:

  • 您对什么操作特别感兴趣?
  • 我对如何操作输出文件特别感兴趣,因为不再保证这些文件在配置阶段可用于变体任务。如果此 API 有任何其他实质性更改,那么我觉得这值得一个规范的答案
  • 我想不出一个规范的答案,你会对一个工作示例感到满意吗?我正要设置我的 gradle 4 android 项目以生成具有自定义名称的输出 apk,这是你需要的吗?
  • 不,据我所知,仍然可以使用与 2.x 插件相同的语法重命名 APK。本题侧重于对 ouputFiles 的操作(例如 AndroidManifest、mapping.txt)
  • 相关的 Google IssueTracker 票证:issuetracker.google.com/issues/64747519

标签: java android gradle android-gradle-plugin gradle-plugin


【解决方案1】:

对 outputFiles 的更改现已记录在 Android Developer site 上。

本质上,建议不要直接从 gradle API 访问 outputFile,而是访问包含文件的目录。下面的 sn-p 使用清单文件演示了这一点,但也可以应用于其他输出文件。

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        output.processManifest.doLast {

            String manifestPath = "$manifestOutputDirectory/AndroidManifest.xml"
            def manifestContent = file(manifestPath).getText()

            // Manipulate the file as needed
        }
    }
}

【讨论】:

【解决方案2】:

看起来他们又改变了这个界面。 (android gradle plugin 3.3+ or Gradle 5.4+)

我正在使用以下内容来检索 manifestPath:

def manifestPath = "${manifestOutputDirectory.get().asFile}/AndroidManifest.xml"

here想出来

得到java.io.FileNotFoundException,路径中包含以下内容

property(interface org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/me/app/build/intermediates/merged_manifests/debug))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多