compileคำหลักGradle ถูกคัดค้านapiและimplementationคำหลักเพื่อกำหนดค่าการอ้างอิง
การใช้apiจะเทียบเท่ากับการใช้ที่เลิกใช้แล้วcompileดังนั้นหากคุณแทนที่ทั้งหมดcompileด้วยapiทุกอย่างจะทำงานเหมือนเคย
เพื่อให้เข้าใจถึงimplementationคำสำคัญให้พิจารณาตัวอย่างต่อไปนี้
ตัวอย่าง
สมมติว่าคุณมีไลบรารีที่เรียกMyLibraryว่าภายในใช้ไลบรารีอื่นที่เรียกว่าInternalLibraryภายใน บางสิ่งเช่นนี้
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
สมมติว่าการกำหนดค่าการMyLibrary build.gradleใช้งานapiในdependencies{}ลักษณะนี้:
dependencies {
api project(':InternalLibrary')
}
คุณต้องการใช้MyLibraryในรหัสของคุณดังนั้นในแอปของbuild.gradleคุณคุณเพิ่มการพึ่งพานี้:
dependencies {
implementation project(':MyLibrary')
}
การใช้การapiกำหนดค่า (หรือเลิกใช้compile) คุณสามารถเข้าถึงInternalLibraryในรหัสแอปพลิเคชันของคุณ:
// 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());
ด้วยวิธีนี้โมดูลMyLibraryอาจ "รั่ว" การใช้งานภายในบางสิ่งบางอย่าง คุณไม่ควร (สามารถ) ใช้สิ่งนี้เพราะคุณไม่ได้นำเข้าโดยตรง
การimplementationกำหนดค่าได้รับการแนะนำเพื่อป้องกันสิ่งนี้ ดังนั้นตอนนี้ถ้าคุณใช้implementationแทนapiในMyLibrary:
dependencies {
implementation project(':InternalLibrary')
}
คุณจะไม่สามารถโทรInternalLibrary.giveMeAString()ในรหัสแอพของคุณอีกต่อไป
การจัดเรียงของกลยุทธ์นี้จะช่วยให้มวย Android Gradle ปลั๊กอินที่จะรู้ว่าถ้าคุณแก้ไขในบางสิ่งบางอย่างInternalLibraryก็ต้องเรียก recompilation ของMyLibraryและไม่ recompilation ของ app InternalLibraryทั้งหมดของคุณเพราะคุณไม่ได้มีการเข้าถึง
เมื่อคุณมีการพึ่งพาที่ซ้อนกันจำนวนมากกลไกนี้สามารถเร่งการสร้างได้มาก (ดูวิดีโอที่เชื่อมโยงในตอนท้ายเพื่อความเข้าใจอย่างสมบูรณ์)
สรุป
เมื่อคุณสลับไปใหม่ Android Gradle ปลั๊กอิน 3.XX คุณควรแทนที่ทั้งหมดของคุณcompileกับimplementationคำหลัก(1 *) จากนั้นลองรวบรวมและทดสอบแอปของคุณ หากทุกอย่างไม่เป็นไรปล่อยให้รหัสเป็นอยู่ถ้าคุณมีปัญหาคุณอาจมีบางสิ่งผิดปกติกับการอ้างอิงของคุณหรือคุณใช้สิ่งที่ตอนนี้เป็นส่วนตัวและไม่สามารถเข้าถึงได้มากขึ้น คำแนะนำโดยวิศวกรปลั๊กอินของ Android Gradle Jerome Dochez (1 ) * )
หากคุณเป็นผู้ดูแลห้องสมุดคุณควรใช้apiสำหรับการอ้างอิงทุกครั้งที่จำเป็นสำหรับ API สาธารณะของห้องสมุดของคุณในขณะที่ใช้implementationสำหรับการทดสอบอ้างอิงหรือการอ้างอิงที่ผู้ใช้ขั้นสุดท้ายจะต้องไม่ใช้
บทความที่มีประโยชน์แสดงให้เห็นถึงความแตกต่างระหว่างการใช้งานและAPI
ข้อมูลอ้างอิง
(วิดีโอนี้แบ่งออกเป็นวิดีโอชุดเดียวกันเพื่อประหยัดเวลา)
Google I / O 2017 - วิธีสร้าง Gradle ให้เร็วขึ้น (วิดีโอเต็ม)
Google I / O 2017 - Gradle สร้างความเร็วได้อย่างไร (ปลั๊กอิน GRADLE ใหม่ 3.0.0 ส่วนเท่านั้น)
Google I / O 2017 - วิธีสร้าง Gradle ให้เร็วขึ้น (อ้างอิง1 * )
เอกสารประกอบ Android