gpt4 book ai didi

android - 如何在 Android Studio 中管理和删除未使用的 Gradle Task?

转载 作者:行者123 更新时间:2023-11-29 19:01:17 27 4
gpt4 key购买 nike

几个月前,我使用 Android Studio 开发了一个 Android 项目。我使用不同的产品口味创建了两个不同版本的应用程序:

  • MyApp:提供一些应用内购买的免费增值版本
  • MyAppFree:显示广告的免费版本

在应用程序 Gradle 文件中创建/配置的风格。在几个月没有从事这个项目之后,我现在开始研究一个新版本。将 Android Studio 更新到最新版本(3.0.1,之前是 2.x)并打开项目后,我只能构建并运行具有 MyAppMyAppFree 版本> 特点...

Gradle 任务和配置似乎以某种方式搞砸了。我该如何解决这个问题并创建干净正确的任务?

项目 Gradle

buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}

allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}

应用 Gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.MyApp"
minSdkVersion 14
targetSdkVersion 26
versionCode 42
versionName "2.0.1"
}

buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

flavorDimensions "freemium", "free"
productFlavors {
MyApp {
dimension "freemium"
}
MyAppFree {
dimension "free"
applicationId 'com.example.MyApp.Free'
}
}
}

Android Studio 中的 Gradle projects 窗口列出了许多我没有手动配置的 Gradle 任务。至少我不记得做过这个......

MyApp 风格和MyAppFree 风格都有任务。有线的是,还有 MyAppMyAppFree 任务:

app
Tasks
build
assembleMyApp
assembleMyAppFree
assembleMyAppMyAppFree /* what is this MyAppMyAppFreeStuff? */
compileMyAppMyAppFreeDebugAndroidTestSources
compileMyAppMyAppFreeDebugSources
...
Run Configurations
Projekt:app [assembleMyAppFree]
/* Why is this set to MyAppFree instead of MyApp? How to change? */
...

由于我已经好几个月没有参与这个项目了,所以我不记得我是如何准确地设置这两种风格和 Gradle 任务的。任务是自动创建的还是需要手动完成?

  • 我如何创建一个配置来创建和运行 MyApp 风格而不是 MyAppFree 风格?
  • 我是否必须将所有 Gradle 任务和配置保留在我不知道它们是什么以及它们做什么的地方,还是保存以清理它并删除未使用的配置和任务?
  • 管理所有这些任务和配置的最佳/正确方法是什么?

最佳答案

Gradle 遵循一种称为约定优于配置 的模式。您不需要自己配置每个任务,相反,您可以声明性地描述您想要什么,Gradle(分别是插件)将设置任务。

此模式的另一个示例是 Gradle maven-publish plugin .您可以简单地配置项目的发布和目标存储库。插件...

  • Establishes a rule to automatically create a GenerateMavenPom task for each MavenPublication added (see the section called “Publications”).
  • Establishes a rule to automatically create a PublishToMavenRepository task for the combination of each MavenPublication added (see the section called “Publications”), with each MavenArtifactRepository added (see the section called “Repositories”).
  • Establishes a rule to automatically create a PublishToMavenLocal task for each MavenPublication added (seethe section called “Publications”).

所有 Publish[...] 任务都将 bundle 在 publish 生命周期任务下。

您没有必要知道每个任务的重要性,因为插件可能会创建中间任务和 bundle 任务,这些任务只能从内部插件逻辑中获得重要性。

此外,许多插件只记录了它们配置 DSL 的重要性(例如 android 闭包中的所有内容),而不是每个任务(类型)。简单地使用 Gradle 及其插件,足以修改 DSL 并坚持生命周期任务(例如 buildpublish,...)。

关于android - 如何在 Android Studio 中管理和删除未使用的 Gradle Task?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49003573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com