ปลั๊กอิน Android Gradle 3.0.0 (ตุลาคม 2017)
ปลั๊กอิน Android Gradle 3.0.0 มีการเปลี่ยนแปลงหลายอย่าง แก้ปัญหาด้านประสิทธิภาพของโครงการขนาดใหญ่
ตัวอย่างเช่น ใน โครงสร้างตัวอย่าง โปรเจ็กต์ที่มีโมดูลประมาณ 130 รายการและทรัพยากร Dependency ภายนอกจำนวนมาก (แต่ไม่มีโค้ดหรือทรัพยากร) คุณจะได้เห็นการปรับปรุงประสิทธิภาพ ที่คล้ายกับข้อความต่อไปนี้
เวอร์ชันปลั๊กอิน Android + เวอร์ชัน Gradle | ปลั๊กอิน Android 2.2.0 + Gradle 2.14.1 | ปลั๊กอิน Android 2.3.0 + Gradle 3.3 | ปลั๊กอิน Android 3.0.0 + Gradle 4.1 |
---|---|---|---|
การกำหนดค่า (เช่น การเรียกใช้ ./gradlew --help ) |
ประมาณ 2 นาที | ประมาณ 9 วิ | ประมาณ 2.5 วิ |
การเปลี่ยนแปลง Java 1 บรรทัด (การเปลี่ยนแปลงการติดตั้งใช้งาน) | ประมาณ 2 นาที 15 วิ | ประมาณ 29 วิ | ประมาณ 6.4 วิ |
การเปลี่ยนแปลงเหล่านี้บางส่วนทำให้บิลด์ที่มีอยู่เสียหาย ดังนั้นคุณควรพิจารณา
ความพยายามในการย้ายข้อมูลโครงการ ก่อนที่จะใช้ปลั๊กอินใหม่
หากไม่พบการปรับปรุงประสิทธิภาพดังที่อธิบายไว้ข้างต้น โปรดรายงานข้อบกพร่อง และรวมร่องรอยของบิลด์โดยใช้ Gradle Profiler
ปลั๊กอิน Android เวอร์ชันนี้ต้องการสิ่งต่อไปนี้
- Gradle 4.1 หรือสูงกว่า หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านส่วนที่เกี่ยวกับ การอัปเดต Gradle
-
เครื่องมือสร้างรุ่น 26.0.2
หรือสูงกว่า เมื่อใช้การอัปเดตนี้ คุณไม่จำเป็นต้องระบุเวอร์ชันสำหรับ
เครื่องมือบิลด์ ปลั๊กอินจะใช้เวอร์ชันขั้นต่ำที่จำเป็นโดยค่าเริ่มต้น
ตอนนี้คุณก็นำพร็อพเพอร์ตี้
android.buildToolsVersion
ออกได้แล้ว
3.0.1 (พฤศจิกายน 2017)
การอัปเดตนี้เป็นการอัปเดตเล็กๆ น้อยๆ เพื่อให้รองรับ Android Studio 3.0.1 และยังรวมถึง การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ
การเพิ่มประสิทธิภาพ
- ทำงานควบคู่กันไปได้ดีขึ้นสำหรับโปรเจ็กต์แบบหลายโมดูลผ่านแบบละเอียด กราฟงาน
- เมื่อเปลี่ยนแปลงทรัพยากร Dependency แล้ว Gradle จะดำเนินการกับบิลด์ที่เร็วขึ้น
กำลังคอมไพล์โมดูลอีกครั้งที่ไม่มีสิทธิ์เข้าถึง API ของทรัพยากร Dependency
คุณควรจำกัดทรัพยากร Dependency ที่ทําให้ API รั่วไหลไปยังโมดูลอื่นๆ โดยทําดังนี้
โดยใช้
การกำหนดค่าทรัพยากร Dependency ใหม่ของ Gradle
implementation
api
compileOnly
และruntimeOnly
- ความเร็วในการสร้างเพิ่มขึ้นเร็วขึ้นเนื่องจากมีการถอดรหัสต่อคลาส แต่ละชั้นเรียน
ระบบจะคอมไพล์เป็นไฟล์ DEX แยกต่างหาก และเฉพาะชั้นเรียนที่
ถูกแปลงซ้ำ คุณควรได้รับการปรับปรุงความเร็วในการสร้างสำหรับ
แอปที่ตั้งค่า
minSdkVersion
เป็น 20 หรือต่ำกว่าและใช้ มัลติเดกซ์เดิม - ปรับปรุงความเร็วของบิลด์โดยการเพิ่มประสิทธิภาพงานบางอย่างเพื่อใช้เอาต์พุตที่ไม่เหมือนกัน เพื่อให้ได้ประโยชน์จากการเพิ่มประสิทธิภาพนี้ ก่อนอื่นคุณต้อง เปิดใช้แคชบิลด์ของ Gradle
- ปรับปรุงการประมวลผลทรัพยากรที่เพิ่มขึ้นโดยใช้ AAPT2 ซึ่งตอนนี้คือ
เปิดใช้งานโดยค่าเริ่มต้น หากพบปัญหาขณะใช้ AAPT2
โปรดรายงานข้อบกพร่อง นอกจากนี้คุณยัง
ปิดใช้ AAPT2 โดยการตั้งค่า
android.enableAapt2=false
ในgradle.properties
และรีสตาร์ท Daemon ของ Gradle ตาม ซึ่งเรียกใช้./gradlew --stop
จากบรรทัดคำสั่ง
ฟีเจอร์ใหม่
- ทรัพยากร Dependency ที่คำนึงถึงตัวแปร การจัดการ เมื่อสร้างตัวแปรบางอย่างของโมดูล ตอนนี้ปลั๊กอิน จะจับคู่ตัวแปรของทรัพยากร Dependency ของโมดูลไลบรารีในเครื่องในรูปแบบเข้ากับ ของโมดูลที่คุณกำลังสร้างได้
- รวมปลั๊กอินโมดูลฟีเจอร์ใหม่เพื่อรองรับการใช้งาน Android Instant Apps และ Android Instant Apps SDK (ที่คุณดาวน์โหลดได้ โดยใช้เครื่องมือจัดการ SDK) หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างโมดูลฟีเจอร์ด้วยปลั๊กอินใหม่ โปรดอ่าน โครงสร้างของ Instant App ที่มีหลายฟีเจอร์
- การสนับสนุนในตัวสำหรับการใช้ฟีเจอร์ภาษา Java 8 และ Java 8 ห้องสมุด ตอนนี้ Jack เลิกใช้งานแล้วและไม่จำเป็นต้องใช้อีกต่อไป และคุณ ควรปิดใช้งาน Jack ก่อนเพื่อใช้การสนับสนุน Java 8 ที่ปรับปรุงใหม่ซึ่งมีอยู่ใน Toolchain เริ่มต้น สำหรับข้อมูลเพิ่มเติม โปรดอ่าน ใช้ฟีเจอร์ภาษาของ Java 8
-
เพิ่มการสนับสนุนสำหรับการเรียกใช้การทดสอบกับ Android Test Orchestrator ซึ่งให้คุณเรียกใช้การทดสอบแต่ละรายการของแอปภายใน การเรียกใช้เครื่องมือของตนเอง เนื่องจากการทดสอบแต่ละรายการจะทำงานของตัวเอง อินสแตนซ์การใช้เครื่องมือ, สถานะที่แชร์ระหว่างการทดสอบจะไม่มีการสะสม บน CPU หรือหน่วยความจำของอุปกรณ์ และแม้ว่าการทดสอบขัดข้อง 1 ครั้ง เฉพาะอินสแตนซ์ของเครื่องมือเอง ดังนั้นการทดสอบอื่นๆ ของคุณจะยังคงทำงานอยู่
- เพิ่ม
testOptions.execution
แล้วเพื่อกำหนดว่าจะใช้หรือไม่ การจัดการทดสอบในอุปกรณ์เป็นกลุ่ม หากคุณต้องการ ใช้ Android Test Orchestrator คุณต้องระบุANDROID_TEST_ORCHESTRATOR
ตามที่แสดงด้านล่าง โดยค่าเริ่มต้น พร็อพเพอร์ตี้ได้รับการตั้งค่าเป็นHOST
ซึ่งจะปิดใช้ในอุปกรณ์ เป็นกลุ่มและเป็นวิธีมาตรฐานในการทำการทดสอบ
ดึงดูด
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- เพิ่ม
-
การกำหนดค่าทรัพยากร Dependency ของ
androidTestUtil
ใหม่ช่วยให้คุณดำเนินการต่อไปนี้ได้ ติดตั้ง APK ตัวช่วยการทดสอบอื่นก่อนเรียกใช้การทดสอบเครื่องมือ เช่น Android Test Orchestratorดึงดูด
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
เพิ่ม
testOptions.unitTests.includeAndroidResources
ไปที่ รองรับการทดสอบ 1 หน่วยที่ต้องใช้ทรัพยากร Android เช่น Roboelectric เมื่อตั้งค่าตัวเลือกนี้ ลงในtrue
ปลั๊กอินจะดำเนินการจัดการทรัพยากร เนื้อหา และ รวมไฟล์ Manifest ก่อนเรียกใช้การทดสอบหน่วยของคุณ จากนั้น การทดสอบจะสามารถทำได้ ตรวจสอบcom/android/tools/test_config.properties
ใน classpath สำหรับคีย์ต่อไปนี้-
android_merged_assets
: เส้นทางสัมบูรณ์ไปยัง ไดเรกทอรีเนื้อหาที่ผสานรวมหมายเหตุ: สำหรับโมดูลไลบรารี เนื้อหาที่ผสานรวม ไม่มีเนื้อหาของทรัพยากร Dependency (ดู ปัญหา #65550419)
-
android_merged_manifest
: เส้นทางสัมบูรณ์ไปยัง ไฟล์ Manifest ที่ผสานรวม -
android_merged_resources
: เส้นทางสัมบูรณ์ไปยัง ไดเรกทอรีทรัพยากรที่ผสาน ซึ่งมีทรัพยากรทั้งหมดจาก โมดูลและทรัพยากร Dependency ทั้งหมด -
android_custom_package
: ชื่อแพ็กเกจของ คลาส R สุดท้าย หากคุณแก้ไขรหัสแอปพลิเคชันแบบไดนามิก ชื่อแพ็กเกจอาจไม่ตรงกับแอตทริบิวต์package
ใน ไฟล์ Manifest ของแอป
-
- การสนับสนุนสำหรับ แบบอักษร เป็นทรัพยากร (ซึ่งเป็นฟีเจอร์ใหม่ที่เปิดตัวใน Android 8.0 (API ระดับ 26))
- รองรับ APK เฉพาะภาษาด้วย Android Instant Apps SDK 1.1 ขึ้นไป
-
ตอนนี้คุณเปลี่ยนไดเรกทอรีเอาต์พุตสำหรับบิลด์เนทีฟภายนอกได้แล้ว ตามที่แสดงด้านล่าง
ดึงดูด
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- ตอนนี้คุณสามารถ ใช้ CMake 3.7 หรือ สูงขึ้นเมื่อสร้างโปรเจ็กต์เนทีฟจาก Android Studio
-
การกำหนดค่าทรัพยากร Dependency ของ
lintChecks
ใหม่ช่วยให้คุณดำเนินการต่อไปนี้ได้ สร้าง JAR ที่กำหนดกฎ Lint ที่กำหนดเองและรวมไว้ใน AAR และโปรเจ็กต์ APKกฎ Lint ที่กำหนดเองต้องอยู่ในโปรเจ็กต์แยกต่างหากที่แสดงผล JAR เดียวและรวมเฉพาะ
compileOnly
ทรัพยากร Dependency โมดูลแอปและไลบรารีอื่นๆ จะขึ้นอยู่กับ Lint โปรเจ็กต์ที่ใช้การกำหนดค่าlintChecks
:ดึงดูด
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
การเปลี่ยนแปลงลักษณะการทำงาน
- ปลั๊กอิน Android 3.0.0 จะนำ API บางรายการออก และบิลด์ของคุณจะขัดข้อง
หากใช้ เช่น คุณจะใช้ Variants API เพื่อวัตถุประสงค์ต่อไปนี้ไม่ได้อีกต่อไป
เข้าถึงออบเจ็กต์
outputFile()
รายการหรือใช้processManifest.manifestOutputFile()
เพื่อรับไฟล์ Manifest สำหรับแต่ละตัวแปร หากต้องการดูข้อมูลเพิ่มเติม โปรดอ่าน การเปลี่ยนแปลง API - คุณไม่จำเป็นต้องระบุเวอร์ชันสำหรับเครื่องมือสร้างอีกต่อไป (คุณ
นำพร็อพเพอร์ตี้
android.buildToolsVersion
ออกได้แล้ว) โดย ค่าเริ่มต้น ปลั๊กอินจะใช้เครื่องมือสร้างขั้นต่ำที่จำเป็นโดยอัตโนมัติ เวอร์ชันสำหรับปลั๊กอิน Android ที่คุณใช้อยู่ - คุณเปิดใช้/ปิดใช้การครันช์ PNG ใน
buildTypes
แล้ว ดังที่แสดงด้านล่าง การเปิดใช้งานการตัดทอน PNG ตามค่าเริ่มต้นสำหรับทุกบิลด์ ยกเว้นบิลด์การแก้ไขข้อบกพร่อง เนื่องจากจะเพิ่มเวลาบิลด์สำหรับโปรเจ็กต์ที่ มีไฟล์ PNG หลายไฟล์ ดังนั้น ในการปรับปรุงเวลาบิลด์สำหรับบิลด์อื่นๆ คุณควรปิดใช้งานการครอบตัด PNG หรือ แปลง รูปภาพไปยัง WebPดึงดูด
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- ตอนนี้ปลั๊กอิน Android จะสร้างเป้าหมายสั่งการที่ ที่คุณกำหนดค่าในโปรเจ็กต์ CMake ภายนอก
- ตอนนี้คุณต้อง
เพิ่มคำอธิบายประกอบ
โปรเซสเซอร์ ลงในคลาสพาธของโปรเซสเซอร์โดยใช้
การกำหนดค่าทรัพยากร Dependency
annotationProcessor
- การใช้
ndkCompile
ที่เลิกใช้งานแล้วจะมีข้อจำกัดมากขึ้น คุณควรย้ายข้อมูลไปใช้ CMake หรือ ndk-build เพื่อคอมไพล์แทน โค้ดแบบเนทีฟที่คุณต้องการใส่ลงใน APK หากต้องการดูข้อมูลเพิ่มเติม โปรดอ่าน ย้ายข้อมูลจาก ndkcompile