API 28(P)的Android设计支持库无效

时间:2018-06-10 09:47:40

标签: android android-studio android-design-library android-9.0-pie

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

构建失败的错误是:

  

清单合并失败:属性应用程序@ appComponentFactory   value =(androidx.core.app.CoreComponentFactory)来自   [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86是   也出现在[com.android.support:support-compat:28.0.0-alpha3]   AndroidManifest.xml中:22:18-91   值=(android.support.v4.app.CoreComponentFactory)。建议:添加   '工具:替换="机器人:appComponentFactory"'元素   在AndroidManifest.xml:6:5-40:19覆盖。

18 个答案:

答案 0 :(得分:48)

您可以使用以前的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'
}

答案 1 :(得分:39)

重要更新

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

  

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

因此,请使用库migrate to AndroidX 1.0.0

  • 请勿在项目中同时使用 AndroidX
  • 您的库模块或依赖项仍然可以具有支持库。 AndroidX
  • 使用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'
}

答案 2 :(得分:19)

添加此内容:

'''
c = Consumer(**conf)
c.subscribe(topics)

c.assign([TopicPartition(<topic-name>, 0)])
c.seek(TopicPartition(<topic-name>, 0, 100))
'''

到清单应用程序

c.seek(TopicPartition(<topic-name>, 0, 100))
cimpl.KafkaException: KafkaError{code=_STATE,val=-172,str="Failed to seek 
to offset 100: Local: Erroneous state"}

希望它会帮助

答案 3 :(得分:14)

我使用了该选项:

  

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

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

答案 4 :(得分:5)

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的回答: Android design support library for API 28 (P) not working

答案 5 :(得分:4)

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

android.useAndroidX=true
android.enableJetifier=true

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

因此,一个androidx依赖示例:

implementation 'androidx.cardview:cardview:1.0.0'

但是要小心,因为并非所有内容都以 androidx 开头 卡片视图依赖性。例如,旧的 design 依赖项是:

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

但是新的设计 依赖项是:

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

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

@canerkaseler

答案 6 :(得分: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'

注意

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

答案 7 :(得分:1)

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

添加Android的材料组件

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。 / p>

答案 8 :(得分:1)

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

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

  

旧设计依赖项

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

新的AndroidX设计依赖项

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

您可以在https://developer.android.com/jetpack/androidx/migrate

中找到AndroidX依赖项


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

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

答案 9 :(得分:1)

androidX的设计支持库为implementation 'com.google.android.material:material:1.0.0'

答案 10 :(得分: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'
}

答案 11 :(得分:0)

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

android.useAndroidX = true
android.enableJetifier = true

清理并构建

答案 12 :(得分:0)

Android文档清晰可见。转到下一页。在下面,有两列名称分别为“ OLD BUILD ARTIFACT” “ AndroidX build artifact” < / p>

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会在编译时显示所有此类可能的错误。

答案 13 :(得分:0)

正确的解决方法如this答案中所述。

您必须通过将这两行添加到jetifier文件中来启用gradle.properties

android.useAndroidX=true
android.enableJetifier=true

这基本上会在项目依赖项中与 AndroidX-ones 交换 Android支持库依赖项

如果gradle.properties不存在,只需在根项目中创建一个名为gradle.properties的文件,并向其中添加上述行:

root
|--gradle.properties
|--build.gradle
|--settings.gradle
|--app
|----build.gradle

答案 14 :(得分:0)

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

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

答案 15 :(得分:0)

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

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

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

我正在使用Google或Firebase

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

我必须将其降低至15.0.1,以用于支持库。

答案 16 :(得分:0)

添加androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'对我有用。

答案 17 :(得分:-1)

尝试一下:

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