reducing_apk_file_size
ในการพัฒนา Android app นั้นมีหลายสิ่งที่ต้องให้ความสำคัญ
หนึ่งในนั้นคือ ขนาดของไฟล์ APK และ จำนวน method ใน dex bytecode

ซึ่งนักพัฒนาควรจะ
ทำให้ขนาดของไฟล์ APK ให้เล็กและจำนวน method น้อย ๆ

แต่ก่อนอื่นต้องรู้ข้อมูลเรื่องเหล่านี้อยู่ตลอดเวลาเมื่อเกิดการเปลี่ยนแปลงขึ้น
เพื่อนำข้อมูลเหล่านี้มาวิเคราะห์ และ ปรับปรุงต่อไป

ดังนั้นมาดูกันว่ามีวิธีการอย่างไรบ้าง ?

เมื่อไปค้นหาพบว่ามี library ให้ใช้ด้วย

ตัวอย่างเช่น Dexcount gradle plugin
ซึ่งทำการคำนวณเรื่องต่าง ๆ ให้เลย เช่น

  • จำนวน method
  • จำนวน field

การใช้งานนั้นก็ง่ายมาก ๆ
เพียงแค่ทำการแก้ไขไฟล์ app/build.gradle ดังนี้

จากนั้นทำการ run ด้วยคำสั่ง

$./gradlew clean assembleDebug

แสดงผลการทำงานดังนี้

Total methods in app-debug.apk: 18163 (27.71% used)
Total fields in app-debug.apk:  8516 (12.99% used)
Methods remaining in app-debug.apk: 47372
Fields remaining in app-debug.apk:  57019

และยังสร้างผลการทำงานออกมาในรูปแบบไฟล์อีกด้วย เช่น

  • debug.csv สรุปจำนวน method และ field
  • debug.txt สรุปรายละเอียดแยกเป็น package
  • รวมทั้ง Chart ที่สวยงาม

แสดงดังรูป

apk01

ส่วน Chart แสดงดังนี้

apk02

ส่วนขนาดของไฟล์ APK นั้นก็มี library ให้ใช้งานอีก เช่น APK size plugin

แต่อาจจะยากไป เพราะว่าใช้คำสั่ง stat บน OS ต่าง ๆ ได้ (ผมใช้ Mac นะ)

$stat -f%z  app-debug.apk

จากนั้นก็เขียนใส่ไว้ในไฟล์ เท่านี้ก็น่าจะเพียงพอแล้วสำหรับขนาดของไฟล์ APK

เมื่อการเตรียมการต่าง ๆ เรียบร้อยแล้ว นำมาทำงานบน Jenkins ดีกว่า

เนื่องจากเราต้องการรู้ว่าทุก ๆ ครั้งที่มีการสร้างไฟล์ APK นั้น
ขนาดของไฟล์มีขนาดเท่าไร ?
จำนวน method และ field มีเท่าไร ?
ที่สำคัญเราจะเห็นประวัติหรือแนวโน้มต่าง ๆ อีกด้วย
ให้ทำการติดตั้ง plugin ชื่อว่า Jenkins Plot Plugin

apk03

จากนั้นใน job สำหรับ build ไฟล์ APK ให้ทำดังนี้

apk04

ทำการเพิ่ม Plot เข้าไปในส่วนของ Post Build Action ดังนี้

apk05

ส่วนของจำนวน method ก็เพิ่มเข้าไปเหมือนกันนะครับ

ผลของ Plot ต่าง ๆ เป็นดังนี้

apk06

 

เพียงเท่านี้ก็สามารถดูแนวโน้มของไฟล์ APK แบบง่าย ๆ ได้แล้ว
ส่วนการวิเคราะห์และปรับปรุงไฟล์ APK เพิ่มเติม
แนะนำให้ใช้ APK Analyzer ใน Android Studio 2.2 ได้เลยนะครับ

Reference Websites
https://medium.com/@mreichelt/android-apk-size-dexcount-charts-on-jenkins-ae518e961818#.7qkef26z0
http://cyrilmottier.com/2014/08/26/putting-your-apks-on-diet/