ข้อมูลอ้างอิงแอตทริบิวต์ของเครื่องมือ

แม้ว่า 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" />

ดูข้อมูลเพิ่มเติมได้ที่ ลดขนาดทรัพยากร

แหล่งข้อมูลเพิ่มเติม

ดูเนื้อหา