Jetifier là gì? Ví dụ: để tạo một dự án mới bằng cách sử dụng các phụ thuộc đóng gói androidx, dự án mới này cần thêm dòng sau vào tệp gradle.properties :
android.enableJetifier=true
Vậy nó có nghĩa là gì - "enable jetifier"?
Câu trả lời:
Google I / O năm nay (18), Google đã công bố Jetpack được thiết lập / tập hợp các thư viện để giúp cuộc sống của các nhà phát triển dễ dàng hơn.
Jetpack bao gồm các thành phần kiến trúc Android đã giới thiệu trước đây (ViewModel, Room, Paging, LiveData, v.v.) cũng như các thành phần kiến trúc mới được giới thiệu như WorkManager, Navigation. Ngoài Jetpack này còn có bộ thư viện khác như AndroidX, AndroidKTX, v.v.
AndroidX là cấu trúc gói mới dành cho các thư viện hỗ trợ Android như support, databinding, design, v.v.
Ví dụ: bây giờ các nhà phát triển phường sẽ sử dụng androidx.databinding. thay vì android.databinding. trong khi nhập thư viện trong các dự án của chúng tôi
Điều này cho phép Google thêm SemVer hoặc Phiên bản ngữ nghĩa trong các gói thư viện. Đối với các nhà phát triển, điều này có nghĩa là chúng tôi không phải sử dụng cùng một phiên bản thư viện hỗ trợ cho tất cả các thư viện hỗ trợ. Mọi hỗ trợ hay nói cách khác là thư viện AndroidX sẽ duy trì phiên bản của riêng nó.
Một lợi thế khác cho các nhà phát triển là chúng tôi không phải quan tâm đến việc duy trì cùng một phiên bản cho tất cả thư viện hỗ trợ trong dự án của chúng tôi.
Về Jetifier, nó chuyển đổi tất cả các gói hỗ trợ phụ thuộc tại thời điểm xây dựng. Theo tài liệu chính thức của Jetifier
Công cụ Jetifier di chuyển các thư viện hỗ trợ-phụ thuộc vào thư viện để dựa vào các gói AndroidX tương đương. Công cụ này cho phép bạn di chuyển trực tiếp từng thư viện thay vì sử dụng plugin Android gradle đi kèm với Android Studio.
Để sử dụng AndroidX trong một dự án, chúng tôi phải đặt targetSdkVersion cho dự án của mình thành 28 và thêm 2 dòng sau vào tệp gradle.properties .
android.useAndroidX=true
android.enableJetifier=true
Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn.
BIÊN TẬP
Liên kết này có ánh xạ của tất cả thành phần thư viện hỗ trợ với phần bộ đếm AndroidX của chúng.
Ngoài ra, vui lòng tham khảo Blog này để biết giải thích chi tiết về AndroidX
Giả sử rằng bạn đã quen thuộc AndroidX
. Nếu không, vui lòng xem @ bài đăng này .
Jetifier
sẽ chuyển đổisupport libraries
tất cả các phần phụ thuộc của bạn thànhAndroidX
tự động, nếu bạn không đặt nó thànhtrue
thì dự án của bạn sẽ có cả hai, hỗ trợ ( không được dùng nữa sau phiên bản 28.0.0 ) và gói AndroidX , là không cần thiết.
Nếu bạn có PhotoView.java
trong sự phụ thuộc của bạn. Điều đó sử dụng thư viện hỗ trợ AppCompatImageView
.
import android.support.v7.widget.AppCompatImageView;
Bây giờ lớp này được chuyển sang androidx
gói, vậy làm cách nào để PhotoView
lấy androidx AppCompatImageView
? Và ứng dụng vẫn chạy trong thiết bị.
Ai đã thực hiện cuộc chạy này?
Jetifier , chuyển đổi tất cả các gói hỗ trợ phụ thuộc tại thời điểm xây dựng.
Jetifier sẽ chuyển đổi android.support.v7.widget.AppCompatImageView
thành androidx.appcompat.widget.AppCompatImageView
trong khi xây dựng dự án.
Bật Jetifier là điều quan trọng khi bạn chuyển từ Thư viện hỗ trợ sang AndroidX .
Xem bài đăng này để hiểu thêm về AndroidX.
Mã của bạn có thể hiển thị lỗi thời gian biên dịch sau khi bật Jetifier trong khi sử dụng các lớp phụ thuộc. mà bạn có thể loại bỏ bằng cách xóa .idea
, .gradle
và dự án tái đồng bộ.
Jetifier giúp di chuyển một dự án Android sang AndroidX .
Jetifier giúp làm cho thư viện của bên thứ 3 tương thích với dự án AndroidX của bạn.
Nếu bạn không sử dụng bất kỳ thư viện bên thứ 3 nào trong dự án android của mình, thì bạn không cần sử dụng Jetifier vì Jetifier chỉ giúp "tạo thư viện bên thứ 3" tương thích với dự án của bạn trong trường hợp bạn đang di chuyển sang AndroidX. Vì vậy, để làm cho dự án của bạn sử dụng Jetifier, bạn viết mã dưới đây trong gradle.properties .
android.enableJetifier=true
android.useAndroidX=true
Nếu bạn không di chuyển sang AndroidX và sử dụng cách sử dụng thư viện Android trước đây (ví dụ: com.android.support ), thì các thư viện bên thứ 3 này không cần phải tương thích vì các thư viện bên thứ 3 này đã tương thích với cách trước đó của sử dụng thư viện Android. Trong trường hợp đó, bạn không cần phải sử dụng Jetifier, Vì vậy, bây giờ, bạn không cần phải viết các dòng đã cho ở trên hoặc bạn có thể chỉ cần viết như dưới đây để thay đổi các giá trị trong tương lai để chuyển sang androidx: -
android.enableJetifier=false
android.useAndroidX=false
Jetifier
Các jetifier là một công cụ hữu ích mà tự động di chuyển của bạn dependencies
để AndroidX
ở thời gian xây dựng. Nếu không có nó, bạn sẽ cần mọi phụ thuộc bạn sử dụng để có phiên bản AndroidX trước khi có thể di chuyển và điều đó có thể sẽ không xảy ra trong một thời gian.
Có một hạn chế quan trọng cần lưu ý: jetifier chỉ hoạt động trên các đồ tạo tác được đóng gói. Nó không hoạt động trên mã nguồn của bạn, bạn phải tự cập nhật
để bật AndroidX, bạn cần thêm 2 cờ vào gradle.properties
tệp của mình . Cờ đầu tiên cho Plugin Android sử dụng AndroidX
các gói thay vì sử dụng các gói AppCompat
và cờ thứ hai sẽ cho phép Jetifier
:
android.useAndroidX=true
android.enableJetifier=true
Khi cờ này được đặt thành true, plugin Android sẽ tự động di chuyển các thư viện bên thứ ba hiện có để sử dụng các phần phụ thuộc AndroidX bằng cách viết lại các tệp nhị phân của chúng. Cờ là sai theo mặc định nếu nó không được chỉ định.
Nó rất hữu ích cho khả năng tương thích. Khi Người tiêu dùng sử dụng androidX
và Người sản xuất sử dụng support
. Ví dụ: khi dự án của bạn AndroidX
muốn sử dụng phụ thuộc support library
thay vì AndroidX
[Ví dụ]
Thêm hai dòng android.useAndroidX = true
android.enableJetifier = true
trong buid.gradle Nó đã làm việc cho tôi
implementation "com.commonsware.cwac:document:0.3.0"
trong của bạndependencies
. Phiên bản thư viện đó có phụ thuộc bắc cầu vàocom.android.support:support-annotations:27.0.2
. Tuy nhiên, bạn muốn sử dụngandroidx.annotation:annotation
như một phần của việc sử dụng các phụ thuộc AndroidX khác. Jetifier bằng cách nào đó sẽ cập nhậtcom.commonsware.cwac:document
để sử dụngandroidx.annotation:annotation
.