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