android - p版本 - 安卓api




API 28(P)的Android设计支持库无法正常工作 (10)

重要更新

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

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

所以使用库 AndroidX 。

  • 不要 在项目中 同时 使用 Support 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'
}

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

并且构建失败的错误是:

清单合并失败:来自[androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86的属性应用程序@ appComponentFactory值=(androidx.core.app.CoreComponentFactory)也出现在[com.android] .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”'来覆盖。


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的设计支持库是 implementation 'com.google.android.material:material:1.0.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'
}


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

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

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

android.useAndroidX=true
android.enableJetifier=true

这将基本上与 AndroidX-1 交换 项目依赖项中的 Android支持库依赖项

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

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

添加这个:

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

希望能帮助到你


谷歌推出了新的 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+支持)

通过从菜单栏中选择Refactor> Migrate to AndroidX,将现有项目迁移到使用AndroidX。


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

添加Android的Material Components

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

}

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

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





android-9.0-pie