美文网首页Android爬坑记
AndroidX - Program type already

AndroidX - Program type already

作者: 葛糖糖 | 来源:发表于2019-11-01 14:44 被阅读0次

    最近在将项目迁移到Androidx的时候,通过Refactor - > Migrate to AndroidX,然后选择Do Refactor ,等编译完运行的时候报了下面的错误

    Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: com.android.tools.r8.errors.CompilationError: Program type already present: androidx.annotation.AnimRes
            at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:87)
            at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:128)
            ... 127 more
    

    使用 ./gradlew app:dependencies 发现有好几个library都依赖了androidx.annotation:annotation



    这是项目中依赖的一部分library:

    //Android
    implementation "androidx.constraintlayout:constraintlayout:$constraintLayout"
    implementation "androidx.cardview:cardview:$androidX"
    implementation "androidx.recyclerview:recyclerview:$androidX"
    implementation "androidx.annotation:annotation:1.0.0"
    ​
    //Material
    implementation "com.google.android.material:material:$material"
    ​
    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle"
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle"
    

    发现defaultConfig中在migrate 的时候多加了两行代码:



    试着删除这两行代码发现可以解决Program type already present: androidx.annotation..的问题.

    renderscriptTargetApi - 指定生成的字节码版本。我们建议你设置这个值为能够提供你正在使用的所有功能的最低API级别,同时设置renderscriptSupportModeEnabled为true。这个设置的有效值为11到最近发布的API级别值。如果你的应用程序配置文件里面指定的最小SDK版本设置为不同的值,那这个值将会被忽略,构建文件中的目标版本值用来设置最低SDK版本。
    renderscriptSupportModeEnabled - 如果运行的设备不支持该目标版本,那么可以指定生成的字节码回落到一个兼容的版本。
    buildToolsVersion - Android 构建工具所使用的版本。这个值应该被设置为18.1.0或者更高。如果这个可选的配置没有被指定,那么将会默认使用安装的最高版本的构建工具。你应该总是设置这个值,以确保不同开发设备不同配置之间的一致性。

    或者你可以更暴力一点直接在build.gradle 中添加一下代码也可以解决问题:

    android {
     //bala bala bala
    }
    ​
    configurations {
     compile.exclude group: 'androidx.annotation', module: 'annotation'
    }
    ​
    dependencies {
    // bala bala bala
    }
    

    希望对你有帮助~~

    相关文章

      网友评论

        本文标题:AndroidX - Program type already

        本文链接:https://www.haomeiwen.com/subject/zewfbctx.html