Jetpack Navigation - 添加 nav_graph.xml 时如何处理依赖警告?
Jetpack Navigation - How to handle dependency warning when adding nav_graph.xml?
我想使用 android jetpack 的新导航库。当我想向我的项目添加导航 XML 时,我收到一条错误消息:
This operation requires the libraries
android.arch.navigation:navigation-fragment:+,
android.arch.navigation:navigation-ui:+.
Problem: Inconsistencies in the existing project dependencies found.
Version incompatibility between:
- android.arch.persistence.room:runtime:1.1.1 and:
- com.android.support:appcompat-v7:27.1.1
With the dependency:
- com.android.support:support-annotations:26.1.0 versus:
- com.android.support:support-annotations:27.1.1
The project may not compile after adding these libraries. Would you
like to add them anyway?
我点击了 "cancel",因为我不知道我的小项目会有什么后果。为什么会这样? room 与导航库不兼容?添加这些后,我的项目是否存在无法编译的风险?我应该保存 gradle 文件然后试试吗?
非常感谢您的澄清。谢谢:)
我的 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "de.test"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
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'
implementation 'com.android.support:recyclerview-v7:27.1.1'
// Room components
implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"
// Lifecycle components
implementation "android.arch.lifecycle:extensions:$rootProject.archLifecycleVersion"
annotationProcessor "android.arch.lifecycle:compiler:$rootProject.archLifecycleVersion"
}
这有两个部分:
1)对话框不正确。当前的 Android Studio 着眼于测试依赖项,这些依赖项包含在 POM 文件中,但不会影响您的应用程序(测试依赖项仅在内部用于测试库本身的测试)。这已在 Android Studio 3.5 Beta 1 中部分修复。
2) 添加导航依赖项时您的应用程序无法编译,因为您使用 compileSdkVersion 27
并且 android.arch.navigation
依赖项依赖于支持库的版本 28.0.0,这需要您编译API 28.
如果您修复您的应用以使用 compileSdkVersion 28
,那么您可以安全地忽略对话框的警告并将导航添加到您的项目。当然,您可以在添加 Navigation 之前将 Support Library 升级到 28.0.0,这将确保不会因从 27.1.1 升级到 28.0.0 而导致其他与 Navigation 行为无关的变化。
我想使用 android jetpack 的新导航库。当我想向我的项目添加导航 XML 时,我收到一条错误消息:
This operation requires the libraries android.arch.navigation:navigation-fragment:+, android.arch.navigation:navigation-ui:+.
Problem: Inconsistencies in the existing project dependencies found. Version incompatibility between: - android.arch.persistence.room:runtime:1.1.1 and: - com.android.support:appcompat-v7:27.1.1
With the dependency: - com.android.support:support-annotations:26.1.0 versus: - com.android.support:support-annotations:27.1.1
The project may not compile after adding these libraries. Would you like to add them anyway?
我点击了 "cancel",因为我不知道我的小项目会有什么后果。为什么会这样? room 与导航库不兼容?添加这些后,我的项目是否存在无法编译的风险?我应该保存 gradle 文件然后试试吗?
非常感谢您的澄清。谢谢:)
我的 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "de.test"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
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'
implementation 'com.android.support:recyclerview-v7:27.1.1'
// Room components
implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"
// Lifecycle components
implementation "android.arch.lifecycle:extensions:$rootProject.archLifecycleVersion"
annotationProcessor "android.arch.lifecycle:compiler:$rootProject.archLifecycleVersion"
}
这有两个部分:
1)对话框不正确。当前的 Android Studio 着眼于测试依赖项,这些依赖项包含在 POM 文件中,但不会影响您的应用程序(测试依赖项仅在内部用于测试库本身的测试)。这已在 Android Studio 3.5 Beta 1 中部分修复。
2) 添加导航依赖项时您的应用程序无法编译,因为您使用 compileSdkVersion 27
并且 android.arch.navigation
依赖项依赖于支持库的版本 28.0.0,这需要您编译API 28.
如果您修复您的应用以使用 compileSdkVersion 28
,那么您可以安全地忽略对话框的警告并将导航添加到您的项目。当然,您可以在添加 Navigation 之前将 Support Library 升级到 28.0.0,这将确保不会因从 27.1.1 升级到 28.0.0 而导致其他与 Navigation 行为无关的变化。