compile
Từ khóa Gradle không được dùng để ủng hộ api
và implementation
từ khóa để cấu hình các phụ thuộc.
Sử dụng api
là tương đương với việc sử dụng không dùng nữa compile
, vì vậy nếu bạn thay thế tất cả compile
bằng api
mọi thứ sẽ hoạt động như mọi khi.
Để hiểu implementation
từ khóa hãy xem xét ví dụ sau.
THÍ DỤ
Giả sử bạn có một thư viện được gọi là MyLibrary
bên trong sử dụng một thư viện khác được gọi InternalLibrary
. Một cái gì đó như thế này:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Giả sử sử MyLibrary
build.gradle
dụng api
cấu hình dependencies{}
như thế này:
dependencies {
api project(':InternalLibrary')
}
Bạn muốn sử dụng MyLibrary
mã của mình để trong ứng dụng của build.gradle
bạn, bạn thêm phụ thuộc này:
dependencies {
implementation project(':MyLibrary')
}
Sử dụng api
cấu hình (hoặc không dùng nữa compile
), bạn có thể truy cập InternalLibrary
vào mã ứng dụng của mình:
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
Theo cách này, mô-đun MyLibrary
có khả năng "rò rỉ" việc thực hiện nội bộ của một cái gì đó. Bạn không nên (có thể) sử dụng nó vì nó không được bạn nhập trực tiếp.
Các implementation
cấu hình đã được giới thiệu để ngăn chặn điều này. Vì vậy, bây giờ nếu bạn sử dụng implementation
thay vì api
trong MyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
bạn sẽ không thể gọi InternalLibrary.giveMeAString()
mã ứng dụng của mình nữa.
Loại này của chiến lược đấm bốc cho phép Android Gradle plugin để biết rằng nếu bạn chỉnh sửa một cái gì đó trong InternalLibrary
, nó chỉ phải kích hoạt các biên dịch lại của MyLibrary
và không các biên dịch lại toàn bộ ứng dụng của bạn, bởi vì bạn không có quyền truy cập vào InternalLibrary
.
Khi bạn có nhiều phụ thuộc lồng nhau, cơ chế này có thể tăng tốc độ xây dựng lên rất nhiều. (Xem video được liên kết ở cuối để hiểu đầy đủ về điều này)
KẾT LUẬN
Khi bạn chuyển sang plugin Android Gradle 3.XX mới, bạn nên thay thế tất cả compile
bằng implementation
từ khóa (1 *) . Sau đó thử biên dịch và kiểm tra ứng dụng của bạn. Nếu mọi thứ đều ổn, hãy để nguyên mã, nếu bạn gặp vấn đề, có thể bạn đã có vấn đề gì đó với các phụ thuộc của mình hoặc bạn đã sử dụng một cái gì đó là riêng tư và không thể truy cập nhiều hơn. Đề xuất của kỹ sư plugin Android Gradle Jerome Dochez (1 ) * )
Nếu bạn là người quản lý thư viện, bạn nên sử dụng api
cho mọi phụ thuộc cần thiết cho API công khai của thư viện, trong khi sử dụng implementation
cho các phụ thuộc kiểm tra hoặc phụ thuộc mà người dùng cuối không sử dụng.
Bài viết hữu ích Thể hiện sự khác biệt giữa thực hiện và api
TÀI LIỆU THAM KHẢO
(Đây là cùng một video được chia ra để tiết kiệm thời gian)
Google I / O 2017 - Cách tăng tốc độ xây dựng Gradle (VIDEO đầy đủ)
Google I / O 2017 - Cách tăng tốc độ xây dựng Gradle (CHỈ CÓ PHẦN GRADLE PLUGIN 3.0.0 MỚI)
Google I / O 2017 - Cách tăng tốc độ xây dựng Gradle (tham khảo 1 * )
Tài liệu Android