Tôi có thể sử dụng thư viện đã sử dụng hỗ trợ Android với các dự án Androidx không.


96

Tôi biết, androidx và sự phụ thuộc hỗ trợ gây ra lỗi multidex Chúng tôi không thể sử dụng androidx và hỗ trợ android cùng một lúc. Vì vậy, tôi hoàn toàn chuyển sang androidx. nhưng một trong những lib phụ thuộc của tôi đã sử dụng hỗ trợ android "lottie".

Chúng ta có thể làm gì trong tình huống trên? Tôi có nên xóa 'lottie' khỏi dự án của mình không.

dưới đây là gradle của tôi

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"
    }

Câu trả lời:


132

Bạn có thể kích hoạt Jetifiertrên dự án của mình, về cơ bản sẽ trao đổi các Android Support Libraryphụ thuộc trong các phụ thuộc dự án của bạn với AndroidX-ones. (ví dụ: các phụ thuộc Lottie của bạn sẽ được thay đổi từ Hỗ trợ thành AnroidX)

Từ Tài liệu Android Studio ( https://developer.android.com/studio/preview/features/ ):

Plugin Android Gradle cung cấp các cờ chung sau đây mà bạn có thể đặt trong tệp gradle.properties của mình:

  • android.useAndroidX: Khi được đặt thành true, cờ này cho biết rằng bạn muốn bắt đầu sử dụng AndroidX từ bây giờ. Nếu cờ không có, Android Studio sẽ hoạt động như thể cờ được đặt thành false.
  • android.enableJetifier: Khi được đặt thành true, cờ này cho biết rằng bạn muốn có công cụ hỗ trợ (từ plugin Android Gradle) để tự động chuyển đổi các thư viện bên thứ ba hiện có như thể chúng được viết cho AndroidX. Nếu cờ không có, Android Studio sẽ hoạt động như thể cờ được đặt thành false.

Điều kiện tiên quyết cho Jetifier:

  • bạn phải sử dụng ít nhất Android Studio 3.2

Để bật jetifier, hãy thêm hai dòng đó vào gradle.propertiestệp của bạn :

android.useAndroidX=true
android.enableJetifier=true

Cuối cùng, vui lòng kiểm tra ghi chú phát hành của AndroidX, vì jetifiervẫn còn một số vấn đề với một số thư viện (ví dụ: Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn


Dự án của tôi sử dụng nhiều thư viện, một số trong số chúng sử dụng thư viện hỗ trợ trong khi một số sử dụng androidx. Làm cách nào để sử dụng cả hai thư viện trong dự án của tôi?
Hiren Dabhi, 27/09/19

1
@hiren dabhi Bạn có thể tạo câu hỏi mới cho thiết lập của mình không, nếu đề xuất giải pháp không phù hợp với bạn? Thật khó để tìm ra câu trả lời nếu không biết thêm chi tiết về thiết lập của bạn.
Christopher

57

Thêm thủ công android.useAndroidX=trueandroid.enableJetifier=truecho tôi thời gian khó khăn. Bởi vì nó tạo ra một số lỗi hoặc Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Để kích hoạt Jet-fire trong dự án, có tùy chọn trong Android Studio

Chọn dự án của bạn ---> Nhấp chuột phải

ứng dụng ----> Refactor ----> Di chuyển sang AndroidX

Được hiển thị trong hình ảnh dưới đây: -

nhập mô tả hình ảnh ở đây

Sau khi nhấp vào Di chuyển sang AndroidX .

Nó sẽ yêu cầu xác nhận và sao lưu cho dự án của bạn.

nhập mô tả hình ảnh ở đây

Và bước cuối cùng nó sẽ yêu cầu bạn thực hiện tái cấu trúc.

nhập mô tả hình ảnh ở đây

Sau khi thực hiện Refactor, hãy kiểm tra gradle.properties của bạn có android.useAndroidX=trueandroid.enableJetifier=true. Nếu không, hãy thêm hai dòng này vào tệp gradle.properties của bạn:

android.useAndroidX=true
android.enableJetifier=true

Lưu ý: - Nâng cấp bằng Android Studio, tùy chọn này hoạt động nếu bạn có android studio 3.2 trở đi. Kiểm tra cái này


1
gợi ý hay, nhưng chỉ là một lưu ý nhỏ cho những người nâng cấp bằng Android Studio, tùy chọn này hoạt động nếu bạn có android studio 3.2 trở đi. Kiểm tra developer.android.com/jetpack/androidx/migrate
AB

21

Bạn không cần phải lo lắng

Chỉ cần kích hoạt Jetifier trong projet của bạn.

  • Cập nhật Android Studio lên 3.2.0 hoặc mới hơn.
  • Mở gradle.propertiesvà thêm bên dưới hai dòng.

    android.enableJetifier=true
    android.useAndroidX=true
    

Nó sẽ chuyển đổi tất cả các thư viện hỗ trợ phụ thuộc của bạn sang AndroidX tại thời điểm chạy (bạn có thể gặp lỗi thời gian biên dịch, nhưng ứng dụng sẽ chạy).


3
gradle.properties không được tìm thấy trong tác phẩm của tôi, tạo ra bản thân mình
FindOutIslamNow

trên thực tế, bộ đệm ẩn phụ thuộc bắc cầu + gradle có thể không hoạt động, ngay cả android.enableJetifier=truekhi điều này xảy ra, tôi nghĩ rằng việc sử dụng thủ công jetifier-standalonevới aar của bên thứ 3, có thể hoạt động.
mochadwi


1

API 29. + sử dụng thư viện AndroidX. Nếu bạn đang sử dụng API 29. +, thì bạn không thể xóa chúng. Nếu bạn muốn xóa AndroidX, thì bạn cần xóa toàn bộ 29. + API khỏi SDK của mình:

Cài đặt SDK

Điều này sẽ hoạt động tốt.



0

Nếu dự án của bạn không phải là AndroidX (nghĩa là Appcompat) và gặp lỗi này, hãy cố gắng hạ cấp các phiên bản phụ thuộc gây ra lỗi này, trong trường hợp của tôi là play-services-location ("implement 'com.google.android.gms: play-services-location : 17.0.0 '"), tôi đã giải quyết vấn đề bằng cách hạ cấp xuống com.google.android.gms: play-services-location: 16.0.0'


0

Tôi đã gặp sự cố như thế này trước đây, đó là tệp gradle.properties không tồn tại, chỉ có gradle.properties.txt, vì vậy tôi đã đi đến thư mục dự án của mình và sao chép & dán tệp gradle.properties.txt nhưng không có. phần mở rộng txt thì cuối cùng nó cũng hoạt động.


0

Tôi đã thêm vào bên dưới hai dòng trong tệp gradle.properties

android.useAndroidX=true
android.enableJetifier=true

sau đó tôi gặp lỗi sau

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

Tôi đã xóa các mục nhập và thêm dòng bên dưới

import static android.app.AlertDialog.*;

Và các lớp được mở rộng từ AppCompactActivity, đã thêm dòng bên dưới. (Đối với những lỗi này, bạn chỉ cần nhấn alt + enter trong android studio sẽ nhập đúng thư viện cho bạn. Như vậy, bạn có thể giải quyết tất cả các lỗi)

import androidx.appcompat.app.AppCompatActivity;

Trong tệp xml của bạn nếu bạn đã sử dụng bất kỳ

<android.support.v7.widget.Toolbar 

thay thế bằng androidx.appcompat.widget.Toolbar

sau đó trong mã java của bạn

import androidx.appcompat.widget.Toolbar;

-1

Bình luận Dòng này trong gradle.properties

android.useAndroidX = true


OP đang hỏi liệu có thể sử dụng AndroidX với Hỗ trợ Android hay không. Bạn đề xuất tắt AndroidX
Raildex

đi tới gradle.properties và nhận xét
Vibhu Vikram Singh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.