当我们在Android Studio中创建新项目时,会将以下行添加到应用模块gradle文件中。
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
但是添加这个依赖项的目的是什么呢?我认为它允许我们使用Kotlin标准库,但它不是要使Kotlin标准库对我们可用,因为我们可以在没有它的情况下使用Kotlin标准库函数。
b5buobof1#
但是添加这个依赖项的目的是什么呢?它包含Kotlin标准库。我们可以不使用它而使用Kotlin标准库函数您将通过传递依赖项获取Kotlin标准库。例如,在Android Studio 3.5.3中,我创建了一个新的"Empty Activity"项目,然后将dependencies修剪为:
dependencies
dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' }
但是,在资源管理器树的"External Libraries"部分,我仍然可以看到Kotlin标准库,运行dependencies任务显示Kotlin标准库是由core-ktx和kotlin-android-extensions插件拉入的:
core-ktx
kotlin-android-extensions
releaseRuntimeClasspath - Runtime classpath of compilation 'release' (target (androidJvm)). +--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.61 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61 | \--- org.jetbrains:annotations:13.0 +--- androidx.appcompat:appcompat:1.1.0 | +--- androidx.annotation:annotation:1.1.0 | +--- androidx.core:core:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.1.0 | | | +--- androidx.lifecycle:lifecycle-common:2.1.0 | | | | \--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.arch.core:core-common:2.1.0 | | | | \--- androidx.annotation:annotation:1.1.0 | | | \--- androidx.annotation:annotation:1.1.0 | | +--- androidx.versionedparcelable:versionedparcelable:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 | | | \--- androidx.annotation:annotation:1.1.0 | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.cursoradapter:cursoradapter:1.0.0 | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | +--- androidx.fragment:fragment:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.core:core:1.1.0 (*) | | +--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.viewpager:viewpager:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | | \--- androidx.customview:customview:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | \--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | +--- androidx.loader:loader:1.0.0 | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 | | | | +--- androidx.arch.core:core-runtime:2.0.0 | | | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | | | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.0.0 | | | | | +--- androidx.lifecycle:lifecycle-common:2.0.0 -> 2.1.0 (*) | | | | | +--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) | | | | | \--- androidx.arch.core:core-runtime:2.0.0 (*) | | | | \--- androidx.arch.core:core-common:2.0.0 -> 2.1.0 (*) | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.1.0 | | | \--- androidx.annotation:annotation:1.1.0 | | +--- androidx.activity:activity:1.0.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.core:core:1.1.0 (*) | | | +--- androidx.lifecycle:lifecycle-runtime:2.1.0 (*) | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.1.0 (*) | | | \--- androidx.savedstate:savedstate:1.0.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.arch.core:core-common:2.0.1 -> 2.1.0 (*) | | | \--- androidx.lifecycle:lifecycle-common:2.0.0 -> 2.1.0 (*) | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.1.0 (*) | +--- androidx.appcompat:appcompat-resources:1.1.0 | | +--- androidx.annotation:annotation:1.1.0 | | +--- androidx.core:core:1.0.1 -> 1.1.0 (*) | | +--- androidx.vectordrawable:vectordrawable:1.1.0 | | | +--- androidx.annotation:annotation:1.1.0 | | | +--- androidx.core:core:1.1.0 (*) | | | \--- androidx.collection:collection:1.1.0 (*) | | +--- androidx.vectordrawable:vectordrawable-animated:1.1.0 | | | +--- androidx.vectordrawable:vectordrawable:1.1.0 (*) | | | +--- androidx.interpolator:interpolator:1.0.0 | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | | \--- androidx.collection:collection:1.1.0 (*) | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) | +--- androidx.drawerlayout:drawerlayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 | | +--- androidx.core:core:1.0.0 -> 1.1.0 (*) | | \--- androidx.customview:customview:1.0.0 (*) | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +--- androidx.core:core-ktx:1.0.2 | +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.50 -> 1.3.61 (*) | +--- androidx.annotation:annotation:1.0.2 -> 1.1.0 | \--- androidx.core:core:1.0.2 -> 1.1.0 (*) \--- androidx.constraintlayout:constraintlayout:1.1.3 \--- androidx.constraintlayout:constraintlayout-solver:1.1.3
当我删除这两个东西时,现在Kotlin标准库不再作为传递依赖项被拉入......现在我无法访问像listOf()这样的Kotlin标准库。
listOf()
brtdzjyr2#
除了获得Kotlin的stdlib作为一个可传递的依赖项(见CommonsWare的回答),如果你使用Kotlin插件1.4+,你将从插件本身获得它。这是运行dependencies任务且依赖项为空部分所显示的内容:
releaseRuntimeClasspath - Runtime classpath of compilation 'release' (target (androidJvm)). \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0 | \--- org.jetbrains:annotations:13.0 \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0 \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0
此外,从Kotlin1.8开始,kotlin-stdlib-jdkX被合并为kotlin-stdlib,因此如果您需要手动声明依赖关系,您应该使用kotlin-stdlib。(注意:如上所述,1.8版本的插件仍然添加了kotlin-stdlib-jdk8依赖项。这可能会在未来的版本中得到修复)
kotlin-stdlib-jdkX
kotlin-stdlib
kotlin-stdlib-jdk8
2条答案
按热度按时间b5buobof1#
但是添加这个依赖项的目的是什么呢?
它包含Kotlin标准库。
我们可以不使用它而使用Kotlin标准库函数
您将通过传递依赖项获取Kotlin标准库。
例如,在Android Studio 3.5.3中,我创建了一个新的"Empty Activity"项目,然后将
dependencies
修剪为:但是,在资源管理器树的"External Libraries"部分,我仍然可以看到Kotlin标准库,运行
dependencies
任务显示Kotlin标准库是由core-ktx
和kotlin-android-extensions
插件拉入的:当我删除这两个东西时,现在Kotlin标准库不再作为传递依赖项被拉入......现在我无法访问像
listOf()
这样的Kotlin标准库。brtdzjyr2#
除了获得Kotlin的stdlib作为一个可传递的依赖项(见CommonsWare的回答),如果你使用Kotlin插件1.4+,你将从插件本身获得它。
这是运行
dependencies
任务且依赖项为空部分所显示的内容:此外,从Kotlin1.8开始,
kotlin-stdlib-jdkX
被合并为kotlin-stdlib
,因此如果您需要手动声明依赖关系,您应该使用kotlin-stdlib
。(注意:如上所述,1.8版本的插件仍然添加了kotlin-stdlib-jdk8
依赖项。这可能会在未来的版本中得到修复)