我可以在Androidx项目中使用使用android支持的库吗?


95

我知道,androidx和support依赖会导致multidex错误 我们不能同时使用androidx和android support。所以我完全迁移到了androidx。但是我的依赖库之一使用了android支持“ lottie”。

在上述情况下我们该怎么办?我应该从项目中删除“ lottie”吗?

下面是我的摇篮

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


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

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }

Answers:


130

您可以启用Jetifier您的项目,这将基本上Android Support LibraryAndroidX-ones 交换项目依赖项中的依赖项。(例如,您的Lottie依赖项将从支持更改为AnroidX)

从Android Studio文档(https://developer.android.com/studio/preview/features/):

Android Gradle插件提供了以下全局标志,您可以在gradle.properties文件中进行设置:

  • android.useAndroidX:设置为true时,此标志表示您要从现在开始使用AndroidX。如果不存在该标志,则Android Studio的行为就像该标志被设置为false一样。
  • android.enableJetifier:设置为true时,此标志表示您希望拥有工具支持(来自Android Gradle插件)以自动转换现有的第三方库,就像它们是为AndroidX编写的一样。如果不存在该标志,则Android Studio的行为就像该标志被设置为false一样。

Jetifier的前提条件:

  • 你必须至少使用 Android Studio 3.2

要启用jetifier,请将这两行添加到gradle.properties文件中:

android.useAndroidX=true
android.enableJetifier=true

最后,请检查AndroidX的发行说明,因为jetifier某些库(例如Dagger Android)仍存在一些问题:https : //developer.android.com/topic/libraries/support-library/androidx-rn


我的项目使用多个库,其中一些使用支持库,而另一些使用androidx。如何在项目中使用两个库?
Hiren Dabhi

1
@hiren dabhi如果解决方案建议对您不起作用,是否可以为您的设置创建一个新问题?如果不了解有关设置的更多详细信息,很难找到答案。
克里斯托弗·

54

手动添加android.useAndroidX=trueandroid.enableJetifier=true给我带来困难。因为它引发了一些错误或 Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

要在项目中启用Jet-fire,android Studio中有一个选项

选择您的项目--->右键单击

app ---->重构---->迁移到AndroidX

如下图所示:

在此处输入图片说明

单击“ 迁移到AndroidX”后

它将要求您确认并备份您的项目。

在此处输入图片说明

最后一步,它将要求您进行重构。

在此处输入图片说明

完成重构后,检查gradle.properties中的android.useAndroidX=trueandroid.enableJetifier=true。如果不是,则将这两行添加到gradle.properties文件中:

android.useAndroidX=true
android.enableJetifier=true

注意:-使用Android Studio进行升级,如果您使用的是Android Studio 3.2及更高版本,则此选项有效。检查一下


1
很好的建议,但对于使用Android Studio进行升级的人来说,只是一个注意事项,如果您使用的是Android Studio 3.2及更高版本,则此选项有效。检查此developer.android.com/jetpack/androidx/migrate
AB

21

你不用担心

只需在您的项目中启用Jetifier

  • 将Android Studio更新到3.2.0或更高版本。
  • 打开gradle.properties并添加以下两行。

    android.enableJetifier=true
    android.useAndroidX=true

它将在运行时将您依赖项的所有支持库转换为AndroidX(您可能会遇到编译时错误,但应用会运行)。


3
在我的文件中找不到gradle.properties,创建了我自己
FindOutIslamNow

实际上,传递依赖项+ gradle缓存可能不起作用,即使android.enableJetifier=true发生这种情况,我认为手动使用jetifier-standalone第3方aar也可能有效。
mochadwi




0

如果您的项目不是AndroidX(平均Appcompat)并且出现此错误,请尝试降级触发此错误的依赖项版本,在我的情况下为play-services-location(“ implementation'com.google.android.gms:play-services-location :17.0.0'“),我通过降级为com.google.android.gms:play-services-location:16.0.0'解决了该问题


0

我之前遇到过这样的问题,那是gradle.properties文件不存在,只有gradle.properties.txt,所以我转到项目文件夹,然后复制并粘贴gradle.properties.txt文件,但没有。 txt扩展名,然后终于起作用了。


0

我在gradle.properties文件中添加了以下两行

android.useAndroidX=true
android.enableJetifier=true

然后我得到以下错误

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

我已删除导入并在行下方添加了

import static android.app.AlertDialog.*;

从AppCompactActivity扩展的类添加了以下行。(对于这些错误,您只需要在android studio中按alt + enter即可为您导入正确的库。这样您就可以解决所有错误)

import androidx.appcompat.app.AppCompatActivity;

在xml文件中,如果您使用过

<android.support.v7.widget.Toolbar 

替换为 androidx.appcompat.widget.Toolbar

然后在你的java代码中

import androidx.appcompat.widget.Toolbar;

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.