我创建了一个基于2021.2.1修补程序1的向导空组合活动的项目,该向导生成两个build.gradle文件,您可以看到代码A和代码B。
代码C和代码D是一个旧项目的两个build.gradle文件。
1:apply false在代码A的id 'com.android.library' version '7.2.0' apply false中意味着什么?
2:我发现插件部分同时存在代码A和代码B,它们的代码几乎相同,为什么?
他说:我发现代码C中有一个依赖项部分,它过时了吗?
代码C中的存储库部分是否过时?
代码A:示例build.gradle (项目)
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
}代码B:示例build.gradle (模块)
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"
...
}代码C:我的build.gradle (项目)
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"
}
}代码D: build.gradle (模块)
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'
...发布于 2022-09-15 04:55:44
Android为Gradle文件创建了一个不同的结构,存储库为settings.gradle,插件为build.gradle (项目级)。简而言之,这种新的结构只会使Gradle files变得更干净。
对于Gradle,常见的是看到2种(或更多)的方法来做同样的事情。比较code A和code C是最好的例子。这两种代码所做的事情是相同的,但代码和文件的结构不同。
现在谈到apply false,它基本上是字面上的。您可以声明一个带有版本的插件,并说不立即应用它(在整个项目中,因为它是来自项目的build.gradle )。但是您只在将要使用这个插件的模块中应用所需的内容,例如,在来自build.gradle的app module中。
您可以查看这里以获得完整的描述。
回到由带有插件的Android生成的“新结构”,有时需要在buildscript中创建一个buildscript块来使用“旧”classpath而不是plugin id,因为目前并不是所有的库都有要使用的插件。
https://stackoverflow.com/questions/73724526
复制相似问题