迁移到androidX后出现清单错误

时间:2018-09-30 08:21:05

标签: android android-jetpack android-architecture-navigation

最近,我开始研究包括Android Architecture Components在内的新的andoirdX人工制品。

在阅读了官方文档和google代码示例之后,我已经在我的项目和应用程序级别的Gradle文件中成功添加了必要的依赖项。 它们如下

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

apply plugin: 'androidx.navigation.safeargs'

android {
compileSdkVersion 28
defaultConfig {
    applicationId "_ _ _ _ _ _"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
implementation 'com.google.android.material:material:1.0.0-rc01'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'


def lifecycle_version = "2.0.0-beta01"
def room_version = "2.0.0-beta01"
def navigationVersion = '1.0.0-alpha06'
kapt "androidx.room:room-compiler:$room_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

implementation 'androidx.core:core-ktx:1.0.0-alpha1'
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
implementation "android.arch.navigation:navigation-fragment-ktx:$navigationVersion"
implementation "android.arch.navigation:navigation-ui-ktx:$navigationVersion"

implementation "androidx.room:room-runtime:$room_version"
 }

在给Gradle同步后,一切正常,但是,它显示一条错误,提示“清单合并错误,请参阅日志以获取更多信息”

我对an app from google存储库进行了仔细检查,一切似乎都很正常。

请提前接受我的谦虚感谢

1 个答案:

答案 0 :(得分:2)

最近,我遇到了同样的问题,在向您提供解决方案之前,我想告诉您,由于Google提供的快节奏开发工具,最近几天我们的开发技术已经发生了重大变化。

以jetpack为例,它是AndroidX的一部分,并将其添加到您的项目中需要一些必要的步骤。此外,如果像我一样使用Android Studio对话框创建应用程序的人,那么您可能会遇到这类问题,包括您提到的问题。

原因是android studio仍然使用Appcompat-v7,而androidX使用

androidx.appcompat:appcompat:1.0.0

see the full artifacts listing

首先,在添加负责的依赖项之后,您需要在gradle.properties文件中添加这两行

android.useAndroidX=true
android.enableJetifier=true

不幸的是,如果走了这么远,您可能仍然会面临

  

清单损坏错误

这是因为您的自动布局文件仍然具有旧的类路径,例如

android.support.design.widget.CoordinatorLayout

应该像这样的androidx.constraintlayout.widget.ConstraintLayout

这个android.support.design.widget.AppBarLayout应该是com.google.android.material.appbar.AppBarLayout,依此类推。

重新检查每个类路径后,将重新生成您的项目,并且一切都会正常。