gpt4 book ai didi

gradle - build.gradle中 'implementation'的优势

转载 作者:行者123 更新时间:2023-12-03 03:57:48 25 4
gpt4 key购买 nike

假设我有一个项目 ProjectA,其中包含我构建到 .aar 中的 ClassInProjectA。
我还有一个项目 ProjectB,它在内部使用 ClassInProjectA。

public class ClassInProjectB {
public ClassInProjectB() {
new ClassInProjectA();
}
}

ProjectB的build.gradle如下:
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation(name:'projA', ext:'aar')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

我使用实现是因为 ClassInProjectA 仅在 ProjectB 内部使用。

然后我有一个主应用程序并希望使用 ClassInProjectB。
主app的build.gradle如下:
apply plugin: 'com.android.application'

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.project.projectc"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation(name:'projB', ext:'aar')
implementation(name:'projA', ext:'aar')

implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

projB 需要显式导入,否则我无法构造 ClassInProjectB,因为需要 ClassInProjectA。

一切都很好,所有编译和 ClassInProjectB 都可以构建。

如果 ProjectB 的 build.gradle 发生更改,使得 projA 成为 api 要求:
api(name:'projA', ext:'aar')

主应用程序的 build.gradle 没有任何变化。

在这种情况下实现关键字的优势是什么?纯粹是因为它允许我在主应用程序中替换 ProjectB 并避免触发项目 A 的重新编译吗?

我也对 this post 有点困惑, 和 this one ,每一个都暗示如果 ProjectB 通过 api 关键字依赖于 ProjectA,则主项目实际上根本不需要隐式导入 ProjectA。我误解了什么吗?编辑:只有当依赖项是通过同一项目中的子模块而不是导出的 .aar 时,才会出现这种情况。

最佳答案

What is the advantage of the implementation keyword in this context? Is it purely that it allows me to replace ProjectB in the main app and avoid triggering a recompilation of Project A?



implementation 关键字的唯一优点,也是引入它的原因,是它可以避免完整的项目重建。 This blogpost 在解释细节方面做得很好。总而言之,如果 :projectA 对 :projectB 有实现依赖,那么 :projectA 只需要在 :projectB 的接口(interface)发生变化时重新编译。

关于gradle - build.gradle中 'implementation'的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987124/

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