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

时间:2018-08-27 06:42:37

标签: android android-jetpack

我知道,androidx and support dependency causing multidex error 我们不能同时使用androidx和android支持。所以我完全迁移到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"
    }

11 个答案:

答案 0 :(得分:38)

您可以在项目上启用Jetifier,这实际上将与Android Support Library-one交换项目依赖项中的AndroidX依赖项。 (例如,您的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

答案 1 :(得分:8)

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

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

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

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

如下图所示:-

enter image description here

点击迁移到AndroidX

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

enter image description here

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

enter image description here

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

android.useAndroidX=true
android.enableJetifier=true

答案 2 :(得分:7)

您不必担心

只需在您的项目中启用Jetifier

  • Update Android Studio到3.2.0或更高版本。
  • 打开gradle.properties并在两行下面添加。

    android.enableJetifier=true
    android.useAndroidX=true
    

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

答案 3 :(得分:5)

gradle.properties 文件中添加行

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, minimal-ui" />

enter image description here enter image description here 另请参阅 https://developer.android.com/jetpack/androidx

答案 4 :(得分:2)

我在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;

答案 5 :(得分:1)

API 29. +用法AndroidX库。如果您使用的是API 29. +,则无法删除它们。如果要删除AndroidX,则需要从SDK中删除整个29. + API:

SDK Settings

这可以正常工作。

答案 6 :(得分:0)

  

我在manifest.xml的application标记中使用了这两行代码,并且有效。

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

来源:https://github.com/android/android-ktx/issues/576#issuecomment-437145192

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

解决了该问题

答案 8 :(得分:0)

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

答案 9 :(得分:0)

  1. 在项目文件夹中,在 build.gradle(Module:Application)

    • 将 compileSdkVersion 修正为 28
    • 如果定义了 targetSdkVersion,请将其更改为 28
    • 这样修改后,如果点击顶部的立即同步,就会出现错误。
  2. 在 Refactor 菜单中,单击 Migration to AndroidX 以继续迁移。

  3. 之后,如果你打开Project文件夹中的gradle.properties,你会看到如下定义

    android.enableJetifier=true
    android.useAndroidX=true

答案 10 :(得分:-2)

gradle.properties

中注释此行

android.useAndroidX = true