如何在Android Studio中管理和删除未使用的Gradle任务?

时间:2018-02-27 07:44:37

标签: android android-studio gradle

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

  • MyApp:提供一些In App Purchase的免费增值版
  • MyAppFree:展示广告的免费版

在应用Gradle文件中创建/配置的风格。在这个项目没有工作几个月后,我现在开始研究新版本。将Android Studio更新到最新版本(3.0.1,之前为2.x)并打开项目后,我只能构建并运行 MyAppFree 版本,其中包含 MyApp 功能......

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

Project 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'
        }
    }
}

App 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项目窗口列出了许多我未手动配置的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任务和配置,我不知道它们是什么以及它们做了​​什么或者是否保存以清除它并删除未使用的配置和任务?
  • 管理所有这些任务和配置的最佳/正确方法是什么?

1 个答案:

答案 0 :(得分:2)

Gradle遵循名为约定优于配置的模式。您不需要自己配置每个任务,而是可以声明性地描述您想要的内容,Gradle(分别是插件)将设置任务。

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

  
      
  • 建立规则,为添加的每个MavenPublication自动创建GenerateMavenPom任务(请参阅“出版物”一节)。
  •   
  • 建立一个规则,为添加的每个MavenPublication(参见“Publications”部分)的组合自动创建PublishToMavenRepository任务,并添加每个MavenArtifactRepository(请参阅“存储库”一节)。
  •   
  • 建立一个规则,为每个添加的MavenPublication自动创建PublishToMavenLocal任务(参见“出版物”部分)。
  •   

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

您无需了解每个单一任务的重要性,因为插件可能会创建中间任务和捆绑任务,这些任务只会从内部插件逻辑中获得重要性。

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