【问题标题】:Can I use library that used android support with Androidx projects.我可以将使用 android 支持的库与 Androidx 项目一起使用吗?
【发布时间】:2023-03-22 11:08:01
【问题描述】:

我知道,androidx and support dependency causing multidex error 我们不能同时使用 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"
    }

【问题讨论】:

    标签: android android-jetpack


    【解决方案1】:

    您可以在您的项目中启用Jetifier,这将基本上将您的项目依赖项中的Android Support Library 依赖项与AndroidX-ones 交换。 (例如,您的 Lottie 依赖项将从 Support 更改为 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 如果解决方案建议对您不起作用,您能否为您的设置创建一个新问题?如果不了解有关设置的更多详细信息,很难找到答案。
    【解决方案2】:

    手动添加android.useAndroidX=trueandroid.enableJetifier=true 让我很难受。因为它会抛出一些错误或Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

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

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

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

    如下图所示:-

    点击Migrate to AndroidX后。

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

    最后一步它会要求你进行重构。

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

    android.useAndroidX=true
    android.enableJetifier=true
    

    注意:- 使用 Android Studio 升级,如果您有此选项,则此选项有效 安卓工作室 3.2 及更高版本。检查this

    【讨论】:

    【解决方案3】:

    您不必担心

    只需在您的项目中启用Jetifier

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

      android.enableJetifier=true
      android.useAndroidX=true
      

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

    【讨论】:

    • gradle.properties 在我的文件中找不到,我自己创建的
    • 事实上,传递依赖 + gradle 缓存可能不起作用,即使 android.enableJetifier=true,如果发生这种情况,我认为手动使用 jetifier-standalone 到 3rd-party aar,可能会起作用。
    • 我有 android studio 4.1 。我确实启用了 Jetifier。我的应用没有运行。
    • @Khemraj 甚至将 Jetifier 添加到 gradle.properties 中,它开始在项目中到处显示编译时错误,其中使用了 V4 支持库。所以剩下的唯一选择就是手动修复所有代码并将其迁移到 AndroidX 中。这不是我的选择。
    • 我在这里为相同的问题创建了一个问题:stackoverflow.com/questions/64716862/…
    【解决方案4】:

    gradle.properties 文件中添加行

    android.useAndroidX=true
    android.enableJetifier=true
    

    另请参阅 https://developer.android.com/jetpack/androidx

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 但是你有一个庞大的项目,不能仅仅改变一次 androidX 就改变所有的片段和活动。
      【解决方案6】:

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

      这会很好用。

      【讨论】:

        【解决方案7】:

        我在 manifest.xml 中的 application 标签中使用了这两行代码,它工作了。

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

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

        【讨论】:

          【解决方案8】:

          打开 gradle.properties 并添加以下两行。

          android.enableJetifier=true
          android.useAndroidX=true
          

          您将面临一个新问题,这是解决方案。 在 android.intent.category.LAUNCHER Activity

          上添加 android:exported="true" 后我的问题得到了解决
          <activity
                  android:name=".MainActivity"
                  android:exported="true"> // Add this line
                  <intent-filter>
                          <action android:name="android.intent.action.MAIN" />
          
                          <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
          </activity>
          

          【讨论】:

            【解决方案9】:

            如果您的项目不是 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' 解决了这个问题

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:
                1. 在项目文件夹中,在 build.gradle(Module:Application) 中

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

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

                  android.enableJetifier=true
                  android.useAndroidX=true

                【讨论】:

                  【解决方案12】:

                  gradle.properties评论此行

                  android.useAndroidX=true

                  【讨论】:

                  • OP 询问是否可以将 AndroidX 与 Android 支持一起使用。您建议禁用 AndroidX
                  • 转到 gradle.properties 并发表评论
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-04-09
                  • 1970-01-01
                  • 2019-04-19
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多