我可以将使用 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=true
和android.enableJetifier=true
让我很难受。因为它会抛出一些错误或Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>
要在项目中启用 Jet-fire,android Studio 中有选项
选择您的项目 ---> 右键单击
app----> 重构 ----> 迁移到 AndroidX
如下图所示:-
点击Migrate to AndroidX后。
它将要求您确认并备份您的项目。
最后一步它会要求你进行重构。
在进行重构后检查你的 gradle.properties 有 android.useAndroidX=true
和 android.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 项目一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章