@Pavel Dudka
Jack - là một trình biên dịch. Tương tự như javac, nhưng nó có một chút khác biệt:
Như bạn thấy, Jack biên dịch mã nguồn Java thẳng vào tệp Dex! Chúng tôi không có tệp * .class trung gian nữa, vì vậy công cụ dx là không cần thiết!
Nhưng đợi đã! Điều gì sẽ xảy ra nếu tôi bao gồm một thư viện của bên thứ ba trong dự án của mình (đi kèm dưới dạng một bộ sưu tập các tệp .class)?
Và đó là khi Jill vào vai:
Jill có thể xử lý các tệp lớp và chuyển đổi chúng thành định dạng Jayce đặc biệt có thể được sử dụng làm đầu vào cho trình biên dịch Jack.
Vì vậy, bây giờ chúng ta hãy bước sang một bên và suy nghĩ ... Điều gì sẽ xảy ra với tất cả những plugin thú vị mà chúng ta đã rất nghiện? Tất cả đều cần tệp .class và trình biên dịch Jack không có những tệp đó nữa ...
May mắn thay, Jack cung cấp một số tính năng quan trọng đối với chúng tôi:
- Retrolambda - sẽ không cần thiết. Jack có thể xử lý lambdas đúng cách
- Proguard - bây giờ nó đã được đưa vào Jack, vì vậy bạn vẫn có thể sử dụng tính năng làm mờ và thu nhỏ
Ưu điểm:
Jack hỗ trợ ngôn ngữ lập trình Java 1.7 và tích hợp các tính năng bổ sung được mô tả bên dưới.
Lập trước
Khi tạo tệp thư viện JACK, .dex của thư viện được tạo và lưu trữ bên trong tệp thư viện .jack dưới dạng pre-dex. Khi biên dịch, JACK sử dụng lại pre-dex từ mỗi thư viện. Tất cả các thư viện đều được dexed trước.
Biên dịch tăng dần
Biên dịch tăng dần có nghĩa là chỉ các thành phần đã được chạm vào kể từ lần biên dịch cuối cùng và các thành phần phụ thuộc của chúng, được biên dịch lại. Biên dịch tăng dần có thể nhanh hơn đáng kể so với biên dịch đầy đủ khi các thay đổi chỉ được giới hạn ở một nhóm thành phần hạn chế.
Đóng gói lại
JACK sử dụng các tệp cấu hình jarjar để thực hiện việc đóng gói lại.
Hỗ trợ Multidex
Vì tệp dex bị giới hạn ở 65 nghìn phương thức, nên các ứng dụng có hơn 65 nghìn phương thức phải được chia thành nhiều tệp dex. (Xem 'Xây dựng ứng dụng với hơn 65 nghìn phương pháp' để biết thêm thông tin về multidex.)
Nhược điểm:
- API chuyển đổi không được Jack hỗ trợ - không có mã bytecode Java trung gian nào mà bạn có thể sửa đổi, vì vậy một số plugin tôi không đề cập ở đây sẽ ngừng hoạt động
- Jack xử lý chú thích hiện không được hỗ trợ, vì vậy nếu bạn phụ thuộc nhiều vào các thư viện như Dagger, AutoValue, v.v., bạn nên suy nghĩ kỹ trước khi chuyển sang Jack. CHỈNH SỬA: Như đã chỉ ra bởi Jake Wharton, Jack in N Preview có hỗ trợ xử lý chú thích, nhưng nó vẫn chưa được hiển thị thông qua Gradle.
- Không hỗ trợ các trình phát hiện xơ mỡ hoạt động ở mức bytecode của Java.
- Jacoco không được hỗ trợ - tốt, cá nhân tôi thấy Jacoco có vấn đề (nó không thực sự hiển thị những gì bạn muốn xem), vì vậy hoàn toàn có thể sống mà không có nó
- Dexguard - phiên bản doanh nghiệp của Proguard hiện không được hỗ trợ