ทดลองทำ Android App Bundles ลง Play Store เพื่อแอปที่เบากว่า

Android Sep 1, 2019

เปลี่ยนจาก build APK เป็น AAB จะเป็นยังไงบ้างนะ

สรุปทั้งหมดที่ทำไปแบบคร่าวๆ ดังรูป

ก่อนอื่นนั้น แอปเราต้องเป็น API level 28 แล้วนะ เพื่อความปลอดภัยและประสิทธิภาพที่ดีขึ้น ซึ่งแอปใหม่ก็ต้องเป็น 28 ตั้งแต่เดือนสิงหาคม ส่วนแอปที่มีอยู่ใน store นั้นต้องอัพเดตก่อนเดือนกันยายนนะเออ

เตือนแล้วนะ

เตือนรึยัง? หม่อมป้าจะเตือนใครเป็นคนแรก วันอาทิตย์ ที่ 4 กุมภาพันธ์นี้ เวลา 18.20 - 19.50 น. ทางช่อง 7 กด 35 และ Live Facebook MasterChef Thailand ค่ะ #MasterChefThailand #MasterChefTH

Posted by MasterChef Thailand - มาสเตอร์เชฟ ประเทศไทย on Wednesday, January 17, 2018
ขอแปะมีม ณ ตรงนี้จ้า

และอย่าลืมอัพแอปให้รองรับ 64-bits ด้วยน้าาาา

ผ่อนผันไม่ได้เน้อ ถ้าไม่มีต้องหามาให้ครบให้ได้จ้า โดยเฉพาะพวก ndk

และแน่นอนนั้น แอปเราก็ควร build เป็น App Bundle ด้วยนะเออ เพื่อให้ user download มาแล้วไม่ต้องหนักตั้งแต่ตอน download ยัน update version ใหม่เลยจ้า

งั้นเรามาเริ่มกันดีกว่า

ขั้นตอนในการทำ App Bundle

จาก document เราจะมีสรุปขั้นตอนทั้งหมดเพื่อ checklist กันก่อนเลยจ้า แล้วจะมาเจาะบางอันนะ

  1. Android Studio ที่มีติดเครื่องนั้น version 3.2 ขึ้นไปจ้า
  2. แอปเราต้อง support สิ่งที่เรียกว่า Dynamic Delivery ที่มี module ทั้งหมด resource ต่างๆ พวก config ทั้งหลาย เอาเป็นว่าทุกสิ่งที่ประกอบร่างเป็นแอปเรา
  3. build App Bundle
  4. test App Bundle ที่เราเพิ่ง build ไป : มีทั้งใช้ bundletool ใน local ส่งลิ้งค์ให้ในทีมเอาไปเทส ไปจนถึง build แบบ beta/alpha/internal test
  5. ทำ app signing ซะ
  6. อัพ App Bundle ของเราเข้าสู่ Play Console
About Android App Bundles | Android Developers
https://developer.android.com/guide/app-bundle

Dynamic Delivery คืออัลไล (อะไร)

นั่นสิ 555

ลองดูภาพนี้กันเถอะ

เดิมที่เป็น APK คือยัดทุกสิ่งอย่างที่มีอยู่ ในแอปเรา ใส่ไปในเครื่อง user

สมมุติเครื่องนี้ เป็น CPU arm64bit หน้าจอขนาด xxhdpi และตั้งค่าเครื่องเป็นภาษาฝรั่งเศส คอนเซปของเจ้า Dynamic Delivery คือ จะหยิบเฉพาะที่เครื่องนั้นต้องการใช้เท่านั้น จะไม่หยิบทั้งหมดเหมือนของ APK ที่ผ่านมา ซึ่งเจ้า App Bundle จะช่วย generate และหยิบมาใส่เครื่องให้เรา :D จากนั้นฝั่ง Play Store จะเอาเจ้าก้อน bundle ไปแปลงเป็น APK เพื่อลงแอปใน device นั้นๆ

https://droidsans.com/android-app-bundle-for-user/

พอเข้าใจคอนเซปแล้ว ทำไงต่ออ่ะ

โครงสร้าง APK จาก bundle ที่ว่านั้น โดยรวมจะมี 2 ส่วนใหญ่ๆ คือ

  • Base APK พวกโค้ดที่เราเขียนกันทั้งหลาย
  • Configuration APKs คือ ส่วนที่เราจะ config ในส่วนของแต่ละ device ว่าจะหยิบอันไหนมาบ้าง มีเฉพาะ native libraries และพวก resource ก็จะมีส่วนของ Screen density, CPU architecture (abi), และ Locale (language) แบบรูปนี้
https://www.youtube.com/watch?v=9D63S4ZRBls
  • Dynamic feature APKs อันนี้ optional ประมาณว่าบาง feature ที่ยังไม่ใช้ก็จะไม่โหลดมา จะโหลดมาเมื่อจะใช้

เข้าไปตั้งค่าใน build.gradle ของ module app เป็นการบอกว่า เราให้นาย split bundle ได้นะ ดังนี้

android {
    ...
    bundle {
       language {
            enableSplit = true
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
}

จริงๆเขาบอกว่าในอนาคตไม่ต้องใส่ก็ได้นะ เพราะค่า default มันเป็น true อยู่แล้ว ใส่เพื่อ make sure เฉยๆ ตึ้งโป๊ะ

วิธีการ build App Bundles

ไปที่ Build > Build Bundle(s) /APK(s) -> Build Bundle(s) ซึ่งก็จะเหมือน build APK ปกติธรรมดาถ้าเราเห็น process ภายนอก

ผลที่ได้จะได้ไฟล์ app.aab ที่ app -> build -> output -> bundle -> {productFlavour} นั่นเอง แต่แน่นอนว่ามันอาจจะไม่ผ่านตรง signing แน่ๆ

ทำ App Signing เพื่อการอัพแอปลง Play Store ที่ Play Console

ในที่นี้ลองอัพลง Internal Test กันก่อนนะ ถ้าลองโยน aab ลงไป upload เลยตรงๆ จะพบว่า

ติด signing by Google Play จ้า

เลื่อนไปบนๆจะเห็นสิ่งนี้

ถ้าเข้าไปอ่าน document จะเห็นว่า

app bundle มันต้องมี signing by Google Play ก่อนอัพแอปนะยูว ref: https://support.google.com/googleplay/android-developer/answer/7384423

ขั้นตอนในการทำ App Signing แบบไวๆ สำหรับมีแอปลง store มาแล้ว ก่อนที่จะอัพ App Bundle ลงไป

1) ไปที่ Play Console เลือก Release Management -> App signing หน้าตาจะเป็นจะอี้

2) ไม่ต้องงงว่าทำไมก้อปรูปเดิมมา เพราะเปิดเข้าไปจะเจอแบบนี้จ้า มีสามทาง ไปทางไหนดีจ๊ะพี่จ๋า

ทั้งสามวิธีนั้น output ที่ได้คือ App Signing Private Key เหมือนกัน

ลองวิธีแรกแล้วกัน ก่อนอื่นไปที่ Android Studio ไปที่ Build -> Generate Signed Bundle/APK จากนั้นเลือก Android App Bundle แล้วก็จะเจอหน้านี้ เอ๊ะ เราต้องสร้างใหม่ใช่ไหมนะ พอผ่านตรงนี้กด Next จะถามว่า Buld Variants ไหน จากนั้นกด Finish

เมื่อทำทุกอย่างเรียบร้อยเราจะได้ไฟล์ .aab มา อยู่ที่ app -> build -> output -> bundle -> {app_flavour} และได้ไฟล์ private_key.pepk มาด้วย (เพราะเราติ๊กบอกว่าให้ export ออกมาด้วย) จะอยู่ใน Encrypted key export path นั่นเอง จากนั้นนำไป upload เป็นอันเสร็จสิ้น พอเราจะ upload aab ก็จะเห็นแบบนี้

เพิ่มเติม รู้นะว่าอาจจะขี้เกียจกดใหม่ทุกครั้ง ในการ build app bundle

ก่อนอื่นกดที่แท็ป Gradle ที่ด้านขวาของ Android Studio ลำดับการกดเป็นดังนี้

{projectName} > {projectName} > Tasks > other > bundle{productFlavour}

สุดท้ายไฟล์ที่ได้จะอยู่ที่

app -> build -> output -> bundle -> {productFlavour}

3) อันนี้จะทำก็ได้ ไม่ทำก็ได้จ้า เก็บ certificate หลังจากอัพโหลด App Signing Private Key จะมี 3 ค่า คือ MD5, SHA-1 และ SHA-256

แต่ถ้าหายทำไงหล่ะ ติดต่อทีม suppport เพื่อ reset key จ้า

4) upload app bundles ของเราอย่างสะดวกโยธิน เท่านี้ก็เรียบร้อยแล้วจ้า

สุดท้ายเราก็ upload aab ลงใน Internal Test ได้แล้ว เย้ๆๆๆๆๆๆ

ก่อนจากกัน

เรื่องขนาดของแอปนั้น …. สามารถดูคร่าวๆได้ที่ Play Console โดยไปดูที่ Release management -> Artifact library ดูที่ Activity artifacts มันจะแบ่งเป็น 2 Type เนอะ คือ APK และ Android App Bundle กดที่ EXPLORE เพื่อดูรายละเอียดด้านใน จะมีข้อมูลบอกว่า App download size และ App size on device เป็นเท่าไหร่ และบอกด้วยว่าแต่ละ CPU และ แต่ละ CPU บวกกับ screen density แอปเรามี App download size เท่าไหร่ และดูได้ด้วยว่ามี devices ไหนบ้างที่เข้าข่าย

ปล. ในที่นี้เราจะลงรูปเปรียบเทียบกับใน Play Store ให้เห็นกันจะๆเลย

โดยสังเขปในส่วน Android App Bundles ในรูปขวา เรียกได้ว่าลดลงไปเย๊อะ
โดยสังเขปในส่วน Android App Bundles ในรูปขวา เรียกได้ว่าลดลงไปเย๊อะ

อยากลองบิ้วลงเครื่องบ้างได้ไหม ได้สิ ตามนี้เลย แต่จะบิ้วนานหน่อยนะ สักห้านาทีได้ ;_;


อ่านเพิ่มเติม

Android App Bundle
In Google I/O 2018, a new publishing format has been introduced for Android applications called Android App Bundle. It is a new upload…
https://medium.com/mindorks/android-app-bundle-6c65ce8105a1
มารู้จักกับ Android App Bundle ในแบบฉบับผู้ใช้ทั่วไปกันเถอะ | DroidSans
เรื่องที่ผมกำลังจะพูดถึงนี้จะออกไปทาง Geek เล็กน้อย เพราะเป็นเรื่องของฝั่งนักพัฒนา แต่ทว่าเรื่องที่จะพูดถึงนี่แหละที่จะมีผลกับผู้ใช้ทั่วไปอย่างเราๆครับ เบื่อมั้ยเวลาเจอแอพขนาดใหญ่ๆ ผมเชื่อว่าทุกๆคนที่ใช้อุปกรณ์แอนดรอยด์ก็คงไม่ชอบแอพที่มีขนาดใหญ่ๆใช่มั้ยล่ะ ผมก็เป็นคนหนึ่งที่ไม่ชอบเหมือนกัน จะเซ็งมาก…
https://droidsans.com/android-app-bundle-for-user/
A Practical Guide to Android App Bundle for Beginners
Exploring the new app publishing format for Google Play
https://android.jlelse.eu/a-practical-guide-to-android-app-bundle-for-beginners-7e8d93831828
About Android App Bundles | Android Developers
https://codelabs.developers.google.com/codelabs/your-first-dynamic-app/#0

ลองฟังกันดู

https://www.youtube.com/watch?v=bViNOUeFuiQ
https://www.youtube.com/watch?v=QdoEcfibG-s

สุดท้ายฝากร้านกันสักนิด ฝากเพจด้วยนะจ๊ะ

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, December 10, 2017

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.