แม้ว่า Jetpack Compose จะจัดการเครื่องมือเวลาออกแบบ UI โดยตรงใน Kotlin แต่เนมสเปซ tools: ก็ยังคงมีความสำคัญต่อการกำหนดค่าระดับโปรเจ็กต์ ไฟล์ XML มาตรฐานของ Android เช่น AndroidManifest.xml และ res/raw/keep.xml จะใช้แอตทริบิวต์ tools: เพื่อจัดการคำเตือนของ Lint และกำหนดค่าตัวลดขนาดทรัพยากร
เมื่อคุณสร้างแอป เครื่องมือบิลด์จะนำแอตทริบิวต์เหล่านี้ออกเพื่อไม่ให้มีผลต่อขนาด APK หรือลักษณะการทำงานขณะรันไทม์
หากต้องการใช้แอตทริบิวต์เหล่านี้ ให้เพิ่มเนมสเปซ tools ลงในองค์ประกอบรูทของไฟล์ XML แต่ละไฟล์ที่คุณต้องการใช้ ดังที่แสดงไว้ที่นี่
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
แอตทริบิวต์การจัดการข้อผิดพลาด
แอตทริบิวต์ต่อไปนี้ช่วยระงับข้อความเตือนของ Lint
tools:ignore
มีไว้สำหรับ: องค์ประกอบใดก็ได้
ใช้โดย: Lint
แอตทริบิวต์นี้ยอมรับรายการรหัสปัญหาของ Lint ที่คั่นด้วยคอมมา ซึ่งคุณต้องการให้เครื่องมือละเว้นในองค์ประกอบนี้หรือองค์ประกอบสืบทอดใดๆ ขององค์ประกอบนี้
ตัวอย่างเช่น คุณสามารถบอกให้เครื่องมือละเว้นข้อผิดพลาด MissingTranslation ได้ดังนี้
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
มีไว้สำหรับ: องค์ประกอบใดก็ได้
ใช้โดย: Lint
แอตทริบิวต์นี้ทำงานเหมือนกับคำอธิบายประกอบ @TargetApi ในโค้ด Java
หรือคำอธิบายประกอบ @RequiresApi ในโค้ด Kotlin ซึ่งช่วยให้คุณระบุระดับ API (เป็นจำนวนเต็มหรือชื่อเวอร์ชัน) ที่รองรับองค์ประกอบนี้ได้
แอตทริบิวต์นี้จะบอกเครื่องมือ Lint ว่าคุณเชื่อว่าองค์ประกอบนี้และองค์ประกอบย่อยใดๆ จะใช้ในระดับ API ที่ระบุขึ้นไปเท่านั้น ซึ่งจะหยุดไม่ให้ Lint เตือนคุณหากองค์ประกอบหรือแอตทริบิวต์ขององค์ประกอบนั้นไม่พร้อมใช้งานในระดับ API ที่คุณระบุเป็น minSdkVersion
ตัวอย่างเช่น คุณอาจใช้แอตทริบิวต์นี้เนื่องจากคุณประกาศ
<service> ใน AndroidManifest.xml ที่ใช้ประเภทบริการที่ทำงานอยู่เบื้องหน้า
ซึ่งพร้อมใช้งานในระดับ API 34 ขึ้นไปเท่านั้น แต่ minSdkVersion
ของโปรเจ็กต์ต่ำกว่า:
<service
android:name=".playback.MediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="34" />
tools:locale
มีไว้สำหรับ: <resources>
ใช้โดย: Lint, เอดิเตอร์ Android Studio
แอตทริบิวต์นี้จะบอกเครื่องมือว่าภาษาหรือภาษาเริ่มต้นสำหรับทรัพยากรใน
องค์ประกอบ <resources> ที่ระบุคืออะไร เพื่อหลีกเลี่ยงคำเตือนจากตัวตรวจสอบการสะกด
มิฉะนั้นเครื่องมือจะถือว่าภาษาเป็นภาษาอังกฤษ
ค่าต้องเป็นตัวระบุภาษา ที่ถูกต้อง
ตัวอย่างเช่น คุณสามารถเพิ่มแอตทริบิวต์นี้ลงในไฟล์ values/strings.xml เริ่มต้นเพื่อระบุว่าภาษาที่ใช้สำหรับสตริงเริ่มต้นคือภาษาสเปน ไม่ใช่ภาษาอังกฤษ
<resources xmlns:tools="http://schemas.android.com/tools"
tools:locale="es">
แอตทริบิวต์การลดขนาดทรัพยากร
แอตทริบิวต์ต่อไปนี้ช่วยให้คุณเปิดใช้การตรวจสอบการอ้างอิงอย่างเข้มงวดและประกาศ ว่าจะเก็บหรือทิ้งทรัพยากรบางอย่างเมื่อใช้ การลดขนาดทรัพยากร
หากต้องการเปิดใช้การลดขนาดทรัพยากร ให้ตั้งค่าพร็อพเพอร์ตี้ shrinkResources เป็น true ในไฟล์ build.gradle ควบคู่กับ minifyEnabled สำหรับการลดขนาดโค้ด
เช่น
ดึงดูด
android { ... buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Kotlin
android { ... buildTypes { getByName("release") { isShrinkResources = true isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) } } }
tools:shrinkMode
มีไว้สำหรับ: <resources>
ใช้โดย: เครื่องมือบิลด์ที่มีการลดขนาดทรัพยากร
แอตทริบิวต์นี้ช่วยให้คุณระบุได้ว่าเครื่องมือบิลด์ควรใช้โหมดใดต่อไปนี้
- โหมดปลอดภัย: เก็บทรัพยากรทั้งหมดที่อ้างอิงอย่างชัดเจนและ
ที่ อาจ มีการอ้างอิงแบบไดนามิกด้วยการเรียก
Resources.getIdentifier() - โหมดเข้มงวด: เก็บเฉพาะทรัพยากรที่อ้างอิงอย่างชัดเจนในโค้ดหรือในทรัพยากรอื่นๆ
ค่าเริ่มต้นคือการใช้โหมดปลอดภัย (shrinkMode="safe") หากต้องการใช้
โหมดเข้มงวดแทน ให้เพิ่ม shrinkMode="strict" ลงในแท็ก <resources> ดังที่แสดงไว้ที่นี่
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
เมื่อเปิดใช้โหมดเข้มงวด คุณอาจต้องใช้ tools:keep
เพื่อเก็บทรัพยากรที่ถูกนำออกไปแต่คุณต้องการ และใช้
tools:discard เพื่อนำทรัพยากรออกเพิ่มเติมอย่างชัดเจน
ดูข้อมูลเพิ่มเติมได้ที่ ลดขนาดทรัพยากร
tools:keep
มีไว้สำหรับ: <resources>
ใช้โดย: เครื่องมือบิลด์ที่มีการลดขนาดทรัพยากร
เมื่อใช้การลดขนาดทรัพยากรเพื่อนำทรัพยากรที่ไม่ได้ใช้ออก แอตทริบิวต์นี้จะช่วยให้คุณระบุทรัพยากรที่จะเก็บไว้ได้ โดยปกติแล้วจะเป็นเพราะมีการอ้างอิงทรัพยากรแบบอ้อมขณะรันไทม์ เช่น การส่งชื่อทรัพยากรที่สร้างขึ้นแบบไดนามิกไปยัง
Resources.getIdentifier()
หากต้องการใช้ ให้สร้างไฟล์ XML ในไดเรกทอรีทรัพยากร (เช่น
res/raw/keep.xml) ด้วยแท็ก <resources> และระบุทรัพยากรแต่ละรายการที่จะเก็บไว้ในแอตทริบิวต์ tools:keep เป็นรายการที่คั่นด้วยคอมมา คุณสามารถใช้อักขระดอกจันเป็นไวลด์การ์ดได้
เช่น
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />
ดูข้อมูลเพิ่มเติมได้ที่ ลดขนาดทรัพยากร
tools:discard
มีไว้สำหรับ: <resources>
ใช้โดย: เครื่องมือบิลด์ที่มีการลดขนาดทรัพยากร
เมื่อใช้การลดขนาดทรัพยากรเพื่อนำทรัพยากรที่ไม่ได้ใช้ออก แอตทริบิวต์นี้จะช่วยให้คุณระบุทรัพยากรที่ต้องการทิ้งด้วยตนเองได้ โดยปกติแล้วจะเป็นเพราะมีการอ้างอิงทรัพยากรแต่ในลักษณะที่ไม่ส่งผลต่อแอป หรือปลั๊กอิน Gradle อนุมานอย่างไม่ถูกต้องว่ามีการอ้างอิงทรัพยากร
หากต้องการใช้ ให้สร้างไฟล์ XML ในไดเรกทอรีทรัพยากร (เช่น
res/raw/keep.xml) ด้วยแท็ก <resources> และระบุทรัพยากรแต่ละรายการที่จะทิ้งในแอตทริบิวต์ tools:discard เป็นรายการที่คั่นด้วยคอมมา คุณสามารถใช้อักขระดอกจันเป็นไวลด์การ์ดได้
เช่น
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@layout/unused_1" />
ดูข้อมูลเพิ่มเติมได้ที่ ลดขนาดทรัพยากร