ลดค่าใช้จ่ายด้านข้อมูลสำหรับผู้ใช้หลายพันล้านคน
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
แพ็กเกจอินเทอร์เน็ตในบางประเทศอาจมีราคาสูงถึง 10% ของรายได้ต่อเดือนของผู้ใช้ทั่วไป ซึ่งหมายความว่าการลดขนาดการดาวน์โหลดของแอปและอนุญาตให้ผู้ใช้ควบคุมวิธีที่แอปใช้ข้อมูล
จะส่งผลดีต่อผู้ใช้จำนวนมากอย่างเห็นได้ชัด การลดขนาดการดาวน์โหลดยังช่วย
ประหยัดพื้นที่ในที่เก็บข้อมูลภายใน ซึ่งเป็นทรัพยากรที่หายากในอุปกรณ์บางรุ่น
ในส่วนนี้ คุณจะเห็นกลยุทธ์บางอย่างที่จะช่วยเพิ่มประสิทธิภาพปริมาณข้อมูลที่แอปใช้ทั้งในเครือข่ายและในพื้นที่เก็บข้อมูลภายใน
ลดขนาดแอป
การลดขนาดแอปเป็นวิธีพื้นฐานอย่างหนึ่งที่จะช่วยให้ผู้ใช้ใช้อินเทอร์เน็ตน้อยลงได้
ทั้งในแง่ของอินเทอร์เน็ตเครือข่ายและพื้นที่เก็บข้อมูลภายใน ส่วนนี้จะอธิบายแนวทางต่างๆ ในการ
ลดขนาดแอป
ลดขนาดชิ้นงานกราฟิกของ APK
- โดยทั่วไปแล้ว ชิ้นงานกราฟิกมักเป็นสิ่งที่มีส่วนสำคัญมากที่สุดสำหรับขนาดของ APK การเพิ่มประสิทธิภาพเหล่านี้จะช่วยให้ผู้ใช้ดาวน์โหลดได้เร็วขึ้นและใช้เวลาในการติดตั้งน้อยลง
- สำหรับชิ้นงานกราฟิก เช่น ไอคอน ให้ใช้รูปแบบกราฟิกเวกเตอร์ที่รองรับการปรับขนาด (SVG)
รูปภาพ SVG มีขนาดเล็กมากเมื่อเทียบกับกราฟิกบิตแมป และสามารถแสดงผลที่
รันไทม์ที่ความละเอียดใดก็ได้ Android Support Library
มีการใช้งานที่เข้ากันได้แบบย้อนหลังสำหรับทรัพยากรเวกเตอร์ใน Android 2.1 (API ระดับ 7)
เริ่มต้นใช้งานเวกเตอร์ด้วย
โพสต์ใน Medium นี้
- สำหรับรูปภาพที่ไม่ใช่เวกเตอร์ เช่น รูปภาพ ให้ใช้ WebP เพื่อลด
เวลาในการโหลดรูปภาพและประหยัดแบนด์วิดท์ของเครือข่าย WebP ได้รับการพิสูจน์แล้วว่ามี
ขนาดไฟล์เล็กกว่า PNG และ JPG ที่เทียบเท่ากัน โดยมีคุณภาพของรูปภาพ
อย่างน้อยเท่ากัน แม้จะใช้การตั้งค่าแบบมีการสูญเสีย แต่ WebP ก็สามารถสร้างรูปภาพที่แทบจะ
เหมือนกับต้นฉบับได้ Android รองรับ WebP แบบมีการสูญเสียตั้งแต่ Android 4.0 (API
ระดับ 14: Ice Cream Sandwich) และรองรับ WebP แบบไม่มีการสูญเสียและโปร่งใส
ตั้งแต่ Android 4.2 (API ระดับ 17: Jelly Bean)
- หากมีรูปภาพขนาดใหญ่จำนวนมากในความหนาแน่นหลายระดับ ให้พิจารณา
ใช้การรองรับ
APK หลายรายการเพื่อแยก APK ตามความหนาแน่น ซึ่งส่งผลให้บิลด์
กำหนดเป้าหมายความหนาแน่นที่เฉพาะเจาะจงได้ ซึ่งหมายความว่าผู้ใช้ที่มีอุปกรณ์ความหนาแน่นต่ำ
จะไม่ต้องเสียค่าปรับจากการดาวน์โหลดชิ้นงานความหนาแน่นสูงที่ไม่ได้ใช้
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการลดขนาด APK ได้ที่
ลดขนาด APK และ
ลดขนาดโค้ดและทรัพยากร นอกจากนี้ คุณยังดูคำแนะนำแบบละเอียดเกี่ยวกับการลดขนาด APK ได้ใน
ชุดโพสต์ใน Medium นี้
ลดขนาดโค้ด
- ไลบรารีทุกรายการในโปรเจ็กต์ Android จะเพิ่มโค้ดที่อาจไม่ได้ใช้ลงใน APK โปรด
ระมัดระวังเป็นพิเศษเกี่ยวกับการใช้ไลบรารีภายนอก เนื่องจากไลบรารีบางรายการไม่ได้
ออกแบบมาเพื่อใช้ในแอปบนอุปกรณ์เคลื่อนที่ ตรวจสอบว่าไลบรารีที่แอปใช้
ได้รับการเพิ่มประสิทธิภาพสําหรับการใช้งานบนอุปกรณ์เคลื่อนที่
- ลองเพิ่มประสิทธิภาพโค้ดที่คอมไพล์แล้วโดยใช้เครื่องมืออย่าง ProGuard ProGuard จะระบุโค้ดที่ไม่ได้ใช้งานและนำออกจาก APK นอกจากนี้ ให้
เปิดใช้การลดขนาดทรัพยากรในเวลาบิลด์โดยการตั้งค่า
minifyEnabled=true
, shrinkResources=true
ใน
build.gradle
ซึ่งจะนำทรัพยากรที่ไม่ได้ใช้ออกจาก
APK โดยอัตโนมัติ
- เมื่อใช้บริการ Google Play คุณควร
รวมเฉพาะ API ที่จำเป็นลงใน APK เท่านั้น
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการลดขนาดโค้ดใน APK ได้ที่การฝึกอบรม Android เกี่ยวกับวิธีหลีกเลี่ยง
เฟรมเวิร์กการแทรกการอ้างอิง
อนุญาตให้ย้ายแอปไปยังที่เก็บข้อมูลภายนอก (SD)
- อุปกรณ์ราคาถูกมักมีพื้นที่เก็บข้อมูลในอุปกรณ์น้อย ผู้ใช้สามารถ
ขยายพื้นที่จัดเก็บนี้ด้วยการ์ด SD แต่แอปต้องประกาศอย่างชัดเจนว่า
รองรับการติดตั้งในพื้นที่จัดเก็บข้อมูลภายนอกก่อนที่ผู้ใช้จะย้ายแอปได้
- อนุญาตให้ติดตั้งแอปในพื้นที่เก็บข้อมูลภายนอกโดยใช้ Flag
android:installLocation
ใน AndroidManifest.xml ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดใช้การย้ายแอปไปยังพื้นที่เก็บข้อมูลภายนอกได้ในคำแนะนำของ Android เกี่ยวกับตำแหน่งการติดตั้งแอป
ลดการใช้ดิสก์ของแอปหลังการติดตั้ง
- การใช้ดิสก์ของแอปในระดับต่ำหมายความว่าผู้ใช้มีแนวโน้มที่จะ
ถอนการติดตั้งแอปน้อยลงเมื่ออุปกรณ์มีพื้นที่ว่างเหลือน้อย คุณควร
กำหนดขอบเขตของแคชเพื่อป้องกันไม่ให้
การใช้ดิสก์ของแอปเพิ่มขึ้นอย่างไม่มีที่สิ้นสุด โปรดตรวจสอบว่าคุณได้ใส่ข้อมูลที่แคชไว้ใน
getCacheDir()
เนื่องจากระบบสามารถลบไฟล์ที่
วางไว้ที่นี่ได้ตามต้องการ ไฟล์จึงจะไม่แสดงเป็นพื้นที่เก็บข้อมูลที่แอปใช้
เสนอการใช้เครือข่ายที่กำหนดค่าได้
แพลตฟอร์ม Android มีหลายวิธีที่คุณสามารถให้ผู้ใช้ควบคุม
การใช้เครือข่ายของแอป เพื่อเพิ่มประสิทธิภาพให้ตรงกับความต้องการของผู้ใช้เอง เช่น
เมื่อใช้งานครั้งแรก แอปจะแนะนำการตั้งค่าที่เกี่ยวข้องกับเครือข่ายต่างๆ ให้ผู้ใช้
นอกจากนี้ คุณยังระบุหน้าจอค่ากำหนดเครือข่ายจากภายนอกแอปได้ด้วย
มอบประสบการณ์การเริ่มต้นใช้งานสำหรับตัวเลือกเครือข่ายของผู้ใช้
- แอปที่อนุญาตให้ผู้ใช้ลดการใช้ข้อมูลจะได้รับการตอบรับเป็นอย่างดี แม้ว่า
แอปเหล่านั้นจะมีข้อกำหนดด้านข้อมูลสูงก็ตาม หากแอปใช้แบนด์วิดท์เป็นจำนวนมาก (เช่น แอปสตรีมมิงวิดีโอ) คุณสามารถมอบ
ประสบการณ์การเริ่มต้นใช้งานให้ผู้ใช้กำหนดค่าการใช้เครือข่ายได้ เช่น คุณอาจอนุญาตให้ผู้ใช้บังคับสตรีมวิดีโอที่มีบิตเรตต่ำกว่าบนเครือข่ายมือถือ
- การตั้งค่าเพิ่มเติมสำหรับผู้ใช้ในการควบคุมการซิงค์ข้อมูล การดึงข้อมูลล่วงหน้า และ
ลักษณะการใช้งานเครือข่าย (เช่น ดึงข้อมูลล่วงหน้าสำหรับหมวดหมู่ข่าวสารที่ติดดาวทั้งหมดใน
Wi-Fi เท่านั้น) ยังช่วยให้ผู้ใช้ปรับลักษณะการทำงานของแอปให้ตรงกับความต้องการได้ด้วย
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการใช้เครือข่ายได้ในการฝึกอบรม Android
เรื่องการจัดการ
การใช้เครือข่าย
ระบุหน้าจอการตั้งค่าเครือข่าย
- คุณไปยังการตั้งค่าเครือข่ายของแอปจากภายนอกแอปได้โดยใช้หน้าจอค่ากำหนดเครือข่าย คุณเรียกหน้าจอนี้ได้จาก
ทั้งหน้าจอการตั้งค่าระบบหรือหน้าจอการใช้อินเทอร์เน็ตของระบบ
- หากต้องการแสดงหน้าจอค่ากำหนดเครือข่ายที่ผู้ใช้เข้าถึงได้จากภายใน
แอปของคุณและจากการตั้งค่าระบบ ให้รวมกิจกรรมที่รองรับ
ACTION_MANAGE_NETWORK_USAGE
การดำเนินการในแอปของคุณ
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มหน้าจอค่ากำหนดเครือข่ายได้ที่
การฝึกอบรม Android เกี่ยวกับ
การใช้กิจกรรมค่ากำหนด
แหล่งข้อมูลเพิ่มเติม
ดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้
บล็อกโพสต์
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[null,null,["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Reduced data cost for billions\n\n\u003cbr /\u003e\n\n\nData plans in some countries can cost upwards of 10% of a typical user's monthly income. This\nmeans that minimizing your app's download size and letting the user control how your app uses\ndata can have a large, tangible benefit to many users. Minimizing download size also helps\nconserve space in internal storage, which is a scarce resource in some devices.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nHere you can find some strategies to help optimize the amount of data your app uses, both over\nthe network and in internal storage.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nReduce app size\n---------------\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nReducing app size is one of the fundamental ways you can help your user consume less data, in\nterms of both network data and internal storage. This section describes several approaches to\nreducing app size.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n### Reduce APK graphical asset size\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n- Graphical assets are often the largest contributor to the size of the APK. Optimizing these can result in smaller downloads and thus faster installation times for users.\n- For graphical assets such as icons, use the Scalable Vector Graphics (SVG) format. SVG images are tiny in size compared to bitmap graphics and can be rendered at runtime to any resolution. The [Android Support Library](/tools/support-library) provides a backward-compatible implementation for vector resources to Android 2.1 (API level 7). Get started with vectors with [this Medium post](https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88).\n- For non-vector images, such as photos, use [WebP](https://developers.google.com/speed/webp/) to reduce image load times and save network bandwidth. WebP is proven to result in smaller file sizes than its PNG and JPG counterparts, with at least the same image quality. Even at lossy settings, WebP can produce a nearly identical image to the original. Android has included lossy WebP support since Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless, transparent WebP since Android 4.2 (API level 17: Jelly Bean).\n- If you have many large images across multiple densities, consider using [Multiple\n APK support](/google/play/publishing/multiple-apks) to split your APK by density. This results in builds targeted for specific densities, meaning users with low-density devices won't have to incur the penalty of downloading unused high-density assets.\n- For more information about reducing APK size, see [Reduce APK Size](/topic/performance/reduce-apk-size) and [Shrink Your Code and Resources](/studio/build/shrink-code). In addition, you can find a detailed guide on reducing APK size in this [series of Medium posts](https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006).\n\n### Reduce code size\n\n- Every library in your Android project is adding potentially unused code to the APK. Be particularly careful about using external libraries because not all libraries are designed for use in mobile apps. Ensure that the libraries your app is using are optimized for mobile use.\n- Consider optimizing your compiled code using a tool such as [ProGuard](/tools/help/proguard). ProGuard identifies code that isn't being used and removes it from your APK. Also [enable resource shrinking](http://tools.android.com/tech-docs/new-build-system/resource-shrinking) at build time by setting `minifyEnabled=true`, `shrinkResources=true` in `build.gradle`---this automatically removes unused resources from your APK.\n- When using Google Play services, you should [selectively include](/google/play-services/setup#add_google_play_services_to_your_project) only the necessary APIs into your APK.\n- For more information on reducing code size in your APK, see the Android training on how to [Avoid\n dependency injection frameworks](/training/articles/memory#DependencyInjection).\n\n### Allow app to be moved to external (SD) storage\n\n- Low-cost devices often come with little on-device storage. Users can extend this with SD cards; however, apps need to explicitly declare that they support being installed to external storage before users can move them.\n- Allow your app to be installed to external storage using the [`\n android:installLocation`](/guide/topics/manifest/manifest-element#install) flag in your AndroidManifest.xml. For more information on enabling your app to be moved to external storage, see the Android guide on [App Install\n Location](/guide/topics/data/install-location).\n\n\u003cbr /\u003e\n\n### Reduce post-install app disk use\n\n\u003cbr /\u003e\n\n- Keeping your app's disk use low means that users are less likely to uninstall your app when the device is low on free space. It's important to apply bounds around your caches---this prevents your app's disk use from growing indefinitely. Be sure you put your cached data in [getCacheDir()](/reference/android/content/Context#getCacheDir())---the system can delete files placed here as needed, so they won't show up as storage committed to the app.\n\n\u003cbr /\u003e\n\nOffer configurable network use\n------------------------------\n\n\nThe Android platform includes a number of ways you can give the user control\nover your app's network use, optimizing it for their own needs. For example,\non first use, your app can walk the user through a variety of network-related settings.\nYou can also provide a network preferences screen from outside the app.\n\n### Provide onboarding experiences for users' network\nchoices\n\n\u003cbr /\u003e\n\n- Apps that allow users to reduce data use are well received, even if they have heavy data requirements. If your app uses a considerable amount of bandwidth (for example, video streaming apps), you can provide an onboarding experience for users to configure network use. For example, you could allow the user to force lower-bitrate video streams on cellular networks.\n- Additional settings for users to control data syncing, prefetching, and network use behavior (for example, prefetch all starred news categories on Wi-Fi only), also help users tailor your app's behavior to their needs.\n- For more information on managing network use, see the Android training on [Managing\n Network Usage](/training/basics/network-ops/managing).\n\n### Provide a network preferences\nscreen\n\n- You can navigate to the app's network settings from outside the app by means of a network preferences screen. You can invoke this screen from either the system settings screen or the system data usage screen.\n- To provide a network preferences screen that users can access from within your app as well as from the system settings, in your app include an activity that supports the [ACTION_MANAGE_NETWORK_USAGE](/reference/android/content/Intent#ACTION_MANAGE_NETWORK_USAGE) action.\n- For further information on adding a network preferences screen, see the Android training on [Implementing a Preferences Activity](/training/basics/network-ops/managing#prefs).\n\n\u003cbr /\u003e\n\nAdditional resources\n--------------------\n\nTo learn more about this topic, view the following additional resources:\n\n### Blog posts\n\n- [Nurture trust through cost transparency](https://medium.com/google-design/nurture-trust-through-cost-transparency-b61a5947d2fc)"]]