Jetifier là gì?


97

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


29
IIRC, Jetifier là một bit không có tài liệu của công nghệ Googly được cho là tự động chuyển đổi các phụ thuộc bắc cầu để sử dụng các thư viện AndroidX. Ví dụ, giả sử rằng bạn có implementation "com.commonsware.cwac:document:0.3.0"trong của bạn dependencies. Phiên bản thư viện đó có phụ thuộc bắc cầu vào com.android.support:support-annotations:27.0.2. Tuy nhiên, bạn muốn sử dụng androidx.annotation:annotationnhư 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ật com.commonsware.cwac:documentđể sử dụng androidx.annotation:annotation.
CommonsWare

Câu trả lời:


68

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


34
Bạn không thực sự trả lời câu hỏi "Jetifier là gì?", Mà chỉ nói về AndroidX và Jetpack.
David Miguel

2
@DavidMiguel Tôi đã cung cấp câu trả lời cho câu hỏi chính được hỏi là nó có nghĩa là gì - "enable jetifier" ?. Mặc dù nếu bạn cho rằng câu trả lời của tôi là một phần, tôi sẽ cập nhật câu trả lời của mình cho phù hợp.
silwar

72

Giả sử rằng bạn đã quen thuộc AndroidX. Nếu không, vui lòng xem @ bài đăng này .

Jetifiersẽ chuyển đổi support librariestất cả các phần phụ thuộc của bạn thành AndroidXtự động, nếu bạn không đặt nó thành truethì 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.

Ví dụ

Nếu bạn có PhotoView.javatrong 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 androidxgói, vậy làm cách nào để PhotoViewlấ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.AppCompatImageViewthành androidx.appcompat.widget.AppCompatImageViewtrong khi xây dựng dự án.

Phần kết luậ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.

Thông tin

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, .gradlevà dự án tái đồng bộ.

image2

image1


10
Bạn có thể loại bỏ lỗi thời gian biên dịch bằng cách xóa .idea / thư viện và đồng bộ hóa lại Gradle.
Clo Knibbe

1
Tôi nghĩ rằng Jetifier hoạt động tại thời điểm xây dựng chứ không phải thời gian chạy như đã đề cập ở đây. Bạn có thể sử dụng android.enableJetifier = true trên gradle hoặc sử dụng công cụ jetifier độc lập developer.android.com/studio/command-line/jetifier để chuyển sang androidx. Cả hai tùy chọn này đều thay thế tên gói tại thời điểm xây dựng nên các thư viện hỗ trợ cũ thậm chí không phải là một phần của gói.
Nishanth

6

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

4

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.propertiestệp của mình . Cờ đầu tiên cho Plugin Android sử dụng AndroidXcác gói thay vì sử dụng các gói AppCompatvà cờ thứ hai sẽ cho phép Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Xem này , bài đăng này để hiểu thêm về AndroidX


3

Từ tài liệu chính thức

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 androidXvà Người sản xuất sử dụng support. Ví dụ: khi dự án của bạn AndroidXmuốn sử dụng phụ thuộc support librarythay vì AndroidX[Ví dụ]


0

Thêm hai dòng android.useAndroidX = true

android.enableJetifier = true

trong buid.gradle Nó đã làm việc cho tôi

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.