Android design support library for API 28 (P) not working

我已经成功地配置了 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'
}

构建失败的错误是:

清单合并失败: Attribute application@appComponent entFactory value=(androidx.core.app.CoreComponentFactory) from [ androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22:18-86 is 也出现在[ com.android.support: support-compat: 28.0.0-alpha3] Xml: 22:18-91 Value = (android.support. v4.app. CoreComponent entFactory) ‘ tools: place = “ android: appComponent entFactory”到元素 at AndroidManifest.xml:6:5-40:19 to override.

253778 次浏览

我通过将所有的 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'

to

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'

知道了

  • 从 Android 舱单中删除 tools:replace="android:appComponentFactory"

您可以使用以前的工件 API 包版本或者新的 Android,但绝不能同时使用两者。

如果要使用以前的版本,请将依赖项替换为

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'
}

if you want to use 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'
}

下面的代码非常适合我:

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'
}

Add this:

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">

hope it helps

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

在 build.gradle (app)文件中为 Android 添加材料组件

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

如果您的应用程序目前依赖于原始的设计支持库,您可以使用 Android Studio 提供的 Refactor to AndroidX... 选项。这样做将更新应用程序的依赖项和代码,以使用新打包的 androidx 和 com.google.android.Materials 库。

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

Important Update

Android 不会在 28.0.0之后更新支持库。

这将是 android.support 下的最后一个特性版本 打包,并鼓励开发人员 迁移到 AndroidX1.0.0

因此使用库 安卓

  • 不要在项目中使用 both 支持安卓
  • 您的库模块或依赖项仍然可以有支持库。 Androidx Jetifier 将处理它。
  • 使用稳定版本的 androidx或任何库,因为 alpha,beta,rc 可能有错误,你不想与您的应用程序发布。

In your case

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'
}

试试这个:

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

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

在 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">

Thanks for the answer @Carlos Santiago : 针对 API 28(P)的 Android 设计支持库不工作

打开文件 gradle.properties 再加上这两行:

android.useAndroidX = true
android.enableJetifier = true

清洁和建造

I've used that option:

使用 Android Studio 3.2或更高版本,您可以快速迁移 通过选择 Refactor > Migrate to 来使用 AndroidX 的现有项目 从菜单栏的 AndroidX。

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

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

我替换了对 AndroidX 依赖项的所有依赖项

旧的设计依赖

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

New AndroidX design dependency

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

你可以在这里找到 AndroidX 的依赖关系 https://developer.android.com/jetpack/androidx/migrate


自动 AndroidX 迁移选项(在 android Studio 3.3 + 上支持)

通过从菜单栏选择 Refactor > Migrate to AndroidX 来迁移一个现有的项目以使用 AndroidX。

Design support library for androidX is implementation 'com.google.android.material:material:1.0.0'

Android 的文档对此很清楚。转到下面的页面。下面有两列,名字分别是 “古老的建筑艺术品”“ AndroidX 制造神器”

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

现在你有很多的依赖关系,只要匹配那些与 Androidx 构建工件,并替换他们在渐变。

That won't be enough.

转到 MainActivity (对所有活动重复此操作) ,删除“ public class MainActivity 扩展 AppCompatActivity”语句中的单词 AppCompactActivity,然后再次编写相同的单词。但是这一次,androidx 库被导入。到目前为止,已经导入并使用了 appcompactsupport 文件(还要删除 appcompactimport 语句)。

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

对于尽可能多的活动和尽可能多的 xml 布局文件重复此操作。

但是不用担心: Android Studio 在编译时会显示所有这些可能的错误。

有过类似的问题。 在 build.gradle 中加入,对我很有效。

 compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

如果你想在不迁移到 AndroidX 的情况下解决这个问题(我不建议这样做)

这个清单合并问题与您使用 androidX 的依赖关系之一有关。

您需要减少此依赖项的发布版本。 对我来说:

我在用 google 或者 firebase

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

我必须把它降低到15.0.1才能在支持库中使用。

首先,您应该查看 等级. 属性 ,这些值必须是 真实。如果你看不到他们,你必须写。

android.useAndroidX = true
android.enableJetifier = true

之后,您可以在 < strong > build.gradle (Module: app) 中使用 AndroidX 依赖项。此外,你必须检查 编译 SDKVersionTargetVersion。他们至少得有28个人。例如,我使用29。

那么,一个 androidx 依赖的例子:

implementation 'androidx.cardview:cardview:1.0.0'

不过要小心,因为一切都不是从 Androidx开始的好吗 例如,旧的 设计 依赖性是:

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

但新的 design dependency是:

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

回收观点是:

implementation 'androidx.recyclerview:recyclerview:1.1.0'

因此,你必须仔细搜索和阅读。

添加 androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'对我来说是可行的。

  1. 去 Gradle.properties
  2. 写作

UseAndroidX = true

还有

AbleleJetifier = true

  1. 将依赖关系从

实现‘ com.androidx.support: design: 28.0.0’

实现‘ com.androidx.support: design: 28.0.0’