我可以将使用 android 支持的库与 Androidx 项目一起使用吗?

Posted

技术标签:

【中文标题】我可以将使用 android 支持的库与 Androidx 项目一起使用吗?【英文标题】:Can I use library that used android support with Androidx projects. 【发布时间】:2019-02-01 16:00:39 【问题描述】:

我知道,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"
    

【问题讨论】:

【参考方案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

【讨论】:

很好的建议,但对于使用 Android Studio 升级的人来说只是一个旁注,如果你有 android studio 3.2 及更高版本,此选项有效。检查这个developer.android.com/jetpack/androidx/migrate【参考方案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 中。这不是我的选择。 我在这里为相同的问题创建了一个问题:***.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】:

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

    将 compileSdkVersion 修复为 28 如果定义了 targetSdkVersion,请将其更改为 28 这样修改后,如果点击顶部的立即同步,会出现错误。

    在重构菜单中,单击迁移到 AndroidX 以继续迁移。

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

    android.enableJetifier=true android.useAndroidX=true

【讨论】:

【参考方案12】:

gradle.properties评论此行

android.useAndroidX=true

【讨论】:

OP 询问是否可以将 AndroidX 与 Android 支持一起使用。您建议禁用 AndroidX 转到 gradle.properties 并发表评论

以上是关于我可以将使用 android 支持的库与 Androidx 项目一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

分发独立于 apk 的库

如何将针对 Entity Framework .Net 4.6.1 的库与 .Net Core 应用程序一起使用

[iOS研习记]——谈谈静态库与动态库

我的android学习经历32

jQuery库与内联脚本冲突

如何在 MSVC 中使用使用 MingW 编译的库?