Home > Net >  How can I rewrite build.gradle files when I use Android Studio Chipmunk?
How can I rewrite build.gradle files when I use Android Studio Chipmunk?

Time:09-17

I create an project based the wizard Empty Compose Activity of Android Studio Chipmunk | 2021.2.1 Patch 1, and the wizard generate two build.gradle files, you can see Code A and Code B.

Code C and Code D are two build.gradle files from an old project.

1: What does apply false in id 'com.android.library' version '7.2.0' apply false of Code A mean?

2: I find that the plugins section exist both Code A and Code B which have almost the same code, why?

3: I find there is a dependencies section in Code C, is it obsolete ?

4: Is repositories section in Code C obsolete ?

Code A: Sample build.gradle (Project)

buildscript {
    ext {
        compose_version = '1.1.0-beta01'
    }
}
plugins {
    id 'com.android.application' version '7.2.0' apply false
    id 'com.android.library' version '7.2.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.31' apply false
}

Code B: Sample build.gradle (Module)

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "info.dodata.myapplication"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
    }
    packagingOptions {
        resources {
            excludes  = '/META-INF/{AL2.0,LGPL2.1}'
        }
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    ...
}

Code C: My build.gradle (Project)

buildscript {
    ext {
        compose_version = '1.2.0'
        hilt_version = '2.42'
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
    }
}

Code D: build.gradle (Module)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
    id 'kotlin-parcelize'
}

android {
    compileSdk 32
    flavorDimensions "default"
    namespace 'info.dodata.soundmeter'

    defaultConfig {
        applicationId "info.dodata.soundmeter"
        minSdk 23
        targetSdk 32
        versionCode 3
        versionName "1.03"

        vectorDrawables {
            useSupportLibrary true
        }
    }



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


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
        allWarningsAsErrors = false
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
    }
    packagingOptions {
        resources {
            excludes  = '/META-INF/{AL2.0,LGPL2.1}'
        }
    }
}


dependencies {
    implementation 'androidx.core:core-ktx:1.8.0'
    ...

CodePudding user response:

Android Studio Chipmunk creates a different structure for Gradle files, with a settings.gradle for repositories and a build.gradle (project level) for plugins. In short, this new structure just makes the Gradle files cleaner.
With Gradle is common to see 2 (or more) ways to do the same thing. Comparing code A with code C is the perfect example. Both codes do the same thing but with a different structure in code and file.

Now talking about apply false, it's basically literally. You declare a plugin, with a version, and say to not apply it immediately (in entire project, since it's a build.gradle from project). But you apply what you need only in the module that you are going to use this plugin, for example, in the build.gradle from app module.
You can take a look here for a complete description.

Back to the "new structure" generated by Android Studio with plugins, sometimes you will need to create a dependencies block inside buildscript to use the "old" classpath instead a plugin id because currently not all libraries have the plugin to be used.

  • Related