API 28(P)的Android设计支持库不起作用


106

我已经成功配置了android-P SDK环境。当我尝试使用android设计支持库时,我遇到了项目构建错误。项目配置为:

IDE:3.2 Canary 17目标API:28编译API:28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        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 fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

而构建失败的错误是:

清单合并失败:[com.android]中还存在[androidx.core:core:1.0.0-alpha3]中的属性application @ appComponentFactory value =(androidx.core.app.CoreComponentFactory) .support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91 value =(android.support.v4.app.CoreComponentFactory)。建议:在AndroidManifest.xml:6:5-40:19的元素上添加'tools:replace =“ android:appComponentFactory”'以进行覆盖。


您是否检查过以下答案:stackoverflow.com/a/54825603/1318946
Pratik Butani,

Answers:


88

您既可以使用工件的先前API软件包版本,也可以使用新的Androidx,而不能两者都使用。

如果要使用以前的版本,请使用

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    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:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

如果您想使用Androidx:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
这个答案应该是公认的。关于更多信息medium.com/mindorks/...
拉瓦

为什么它com没有被替换materialimplementation
RoCk RoCk

58

重要更新

之后,Android将不会更新支持库28.0.0

这将是android.support包装下的最后一个功能版本,鼓励开发人员迁移到AndroidX 1.0.0

因此,请使用AndroidX库。

  • 不要使用这两种 支持AndroidX项目。
  • 您的库模块或依赖项仍然可以具有支持库。 Androidx Jetifier将处理它。
  • 使用androidx或任何库的稳定版本,因为alpha,beta,rc可能存在您不希望随应用程序一起提供的错误。

就你而言

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

奇怪的是,我的项目已经有很长时间了,但是今天在我构建时就开始出现支持库错误。我在这里想念什么吗?
塔哈

我们所有人现在都面临着一个常见的错误,我在运行项目时每隔几天就会遇到一次。只需使缓存无效并重新启动即可。
Khemraj

@Talha尝试从菜单Build> Clear Project,然后先Build> Make Project,有时这就足够了,如果不足够,请执行Invalidate cache and restart,因为使缓存无效并重新启动花费大量时间并清除所有项目的缓存。
约翰,

43

添加:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

到清单应用程序

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

希望能帮助到你


你有@string/action_settings什么?
Aliton Oliveira,

我遇到一个问题:使用操作系统独立路径'META-INF / androidx.core_core.version找到了多个文件
Aliton Oliveira,

添加2行后出现错误: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363 '19

2
您是否在AndroidManifest.xml标头中添加了xmlns:tools =“ schemas.android.com/tools ”?
卡洛斯·圣地亚哥

2
android / src / debug /下的清单具有类似的标头:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363 '19


9

Google引入了新的AndroidX依赖项。您需要迁移到AndroidX,这很简单。

我将所有依赖项替换为AndroidX依赖项

旧设计依赖

implementation 'com.android.support:design:28.0.0'

新的AndroidX设计依赖项

implementation 'com.google.android.material:material:1.0.0-rc01'

您可以在这里找到AndroidX依赖项 https://developer.android.com/jetpack/androidx/migrate


自动AndroidX迁移选项(在Android Studio 3.3及更高版本中受支持)

通过从菜单栏中选择“重构”>“迁移到AndroidX”,可以迁移现有项目以使用AndroidX。


1
实现'com.google.android.material:material:1.1.0-alpha05',这是新版本
Hitesh Tarbundiya

代替“ import android.support.design.widget.TabLayout;”放置什么 ?
temirbek

6

1.将以下代码添加到您的app / build.gradle中:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2,将SDK和工具版本修改为28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.在您的AndroidManifest.xml文件中,应添加两行:

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

感谢您的回答@Carlos Santiago: API 28(P)的Android设计支持库不起作用


该解决方案不符合将来的要求,因为您现在应该使用AndroidX。已发布的旧应用程序应立即升级。如果有很多返工,则仍应进行那些更改。
Abhinav Saxena

@Abhinav Saxena是的,我们应该将项目更新到28,而不是使用旧的SDK版本解决此问题。:)
Codios

这是一个可以接受的答案,经过很多建议,没有任何帮助,但这作为configuration.all {}帮助了我。您保存了我的一天,谢谢。
Noor Hossain


4

打开文件gradle.properties并添加以下两行:

android.useAndroidX = true
android.enableJetifier = true

清洁和建造


1
useAndroidX告诉编译器用户androidx。文件而不是旧的android支持包
Lena Bru

这指示Studio 3.2及更高版本迁移到AndroidX。已迁移到AndroidX的所有库均应在依赖项中更正。
Abhinav Saxena

3

注意:您不应同时在应用程序中使用com.android.support和com.google.android.material依赖项。

在build.gradle(app)文件中添加适用于Android的Material Components

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

如果您的应用当前依赖于原始的设计支持库,则可以使用Android Studio提供的“重构为AndroidX…”选项。这样做将更新您应用的依赖关系和代码,以使用新打包的androidx和com.google.android.material库。

如果您还不想切换到新的androidx和com.google.android.material软件包,则可以通过com.android.support:design:28.0.0-alpha3依赖项来使用Material Components。


3

首先,您应该查看gradle.properties,并且这些值必须为true。如果看不到它们,则必须写。

android.useAndroidX=true
android.enableJetifier=true

之后,您可以在build.gradle(模块:app)中使用AndroidX依赖项。另外,您还必须检查compileSDKVersiontargetVersion。它们应至少为28。例如,我使用的是29。

因此,一个androidx依赖示例:

implementation 'androidx.cardview:cardview:1.0.0'

但是要小心,因为一切都没有下手androidxcardview依赖。例如,旧的设计 依赖项是:

implementation 'com.android.support:design:27.1.1'

但是新的设计 依赖性是:

implementation 'com.google.android.material:material:1.1.0'

因此,您必须仔细搜索和阅读。快乐的代码。

@canerkaseler


2

我将全部替换androidx.*为来克服这种情况appropiate package name

改变你的路线

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

注意

  • tools:replace="android:appComponentFactory"从AndroidManifest中删除

0

下面的代码与我完美地工作:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}

0

试试这个:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

0

Android文档对此很明确。转到下一页。下面有两列,名称分别为“ OLD BUILD ARTIFACT”“ AndroidX build artifact”

https://developer.android.com/jetpack/androidx/migrate

现在您在gradle中有很多依赖关系,只需将它们与Androidx构建工件相匹配并在gradle中进行替换即可。

那还不够。

转到您的MainActivity(对所有活动重复此操作),并在“公共类MainActivity扩展AppCompatActivity”语句中删除AppCompact Activity一词,然后再次写入相同的单词。但这一次是androidx库被导入。直到现在appcompact支持文件被导入并使用(也删除该appcompact import语句)。

另外,转到您的布局文件。假设您有一个约束布局,那么您会注意到xml文件中的第一行约束布局与appcompact有关。因此,只需删除它并再次写约束布局即可。但是现在添加了与androidx相关的约束布局。

对许多活动和许多xml布局文件重复此步骤。

但请放心:Android Studio会在编译时显示所有此类可能的错误。


0

有类似的问题。在build.gradle中添加了它,它对我有用。

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

如果您想解决此问题而不迁移到AndroidX(我不推荐)

此清单合并问题与您使用androidX的依赖项有关。

您需要降低此依赖项的发行版本。就我而言:

我正在使用Google或Firebase

api 'com.google.android.gms:play-services-base:17.1.0'

我必须降低它以在支持库中使用15.0.1。


0

正在androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'为我添加作品。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.