ช่วงวันว่าง ๆ ลองนั่งแงะ App พฤติมาตร กันดูเล่น ๆ
แน่นอนว่า ก็ไปนำ APK ของ App มาลอง decompile ดู
ว่าพัฒนากันอย่างไรบ้าง
เผื่อจะได้เป็นแนวทางในการพัฒนา App กันต่อไป
มาเริ่มกันเลย


ปล. มานั่งแงะดู App แบบนี้มันผิดหรือเปล่าครับ ?

ถ้าผิดก็บอกกันได้ แค่อยากลองดูว่า App เป็นยังไง
เพื่อใช้ในการพัฒนาต่อไป
ไม่มีจุดประสงค์ร้ายนะครับ

เริ่มที่การขอ permission ได้มากมายก่ายกอง

น่าจะขอหมดทุกอย่างนั่นแหละ เป็น App ที่ให้ download ผ่าน web ของ กสทช เลย
ไม่ผ่าน Play Store นะ 
การใช้งานต้องไปลงทะเบียนผ่านหน้า web ก่อน

ต่อไปดูภาษาและ Library ที่นำมาใช้งานบ้าง

น่าจะพัฒนาด้วยภาษา Kotlin นะ  เห็นมี package ของ Kotlin ด้วย
ส่วน library ที่ใช้ประกอบไปด้วย

  • OkHttp3 สำหรับการเรียกพวก API ต่าง ๆ
  • Firebase สำหรับพวก analytic ต่าง ๆ ของ App
  • Joda Time สำหรับจัดการเรื่องของ datetime
  • AChartEngine สำหรับการแสดงกราฟต่าง ๆ
  • Glide สำหรับจัดการแสดงรูปภาพต่าง ๆ
  • Jackson สำหรับจัดการข้อมูล JSON น่าจะใช้ Gson แทนนะ
  • จัดการข้อมูลบน SQLite ด้วย Room

มีจำนวน Activity ไม่เกิน 30 activity 
มีพวก background service เพียบเลย !!

มาดู code การพัฒนาบ้าง

เมื่อลองทำการเปิด APK ใน APK Analyzer ก็เห็นประมาณนี้

ลองเอาไป decompile ก็ได้ code คร่าว ๆ มาดูบ้าง (ไม่รู้ code จริง ๆ เป็นอย่างไรนะ)

โดย code ที่ได้ออกมาจะเป็นภาษา Java นะ (ต้นฉบับน่าจะเป็นภาษา Kotlin มากกว่า)
มาดูภาพคร่าว ๆ ของสิ่งที่ decompile ออกมา

  • ชื่อ package เป็น Pascal case เช่น BackGroundUse, GroupPhone, Setting, OtherClass และ TabView
  • แต่ชื่อ package ก็ตั้งชื่อขัดแย้งกันเองเช่น Appdata และ Speedtest

มาดูการทำงานในส่วนต่าง ๆ ของ code บ้าง

เริ่มจากส่วนของพวก background service ซึ่งมีเยอะ
ลองเข้าไปดูใน package BackGroundUse เจอเพียบเลย
จะทำการเห็บข้อมูลการใช้ app ของเรา 
เนื่องจากได้ทำการของ permission ในการเข้าถึงแล้วจากข้างบน

เริ่มต้นจะมีข้อมูลของ social app ดังนี้

จากนั้นก็มีการ update การใช้งาน App บนมือถือของคนใช้งานไปเรื่อย ๆ

โดยข้อมูลการใช้งานจะมีการดูได้ 5 แบบ คือ Daily, Weelky, Monthly และ Yearly

จะทำการเก็บข้อมูลเยอะนะ ซึ่งเบื้องต้นจะเก็บไว้บนเครื่องคือใน SQLite ก่อน ดังนี้

  • ข้อมูลการโทร
  • Traffic network ที่ใช้งาน 
  • มีการทดสอบความเร็วของ Network ที่ใช้งานด้วย (Download และ Upload)
  • การส่ง SMS และ MMS
  • App ที่ใช้งานรวมไปถึงเวลาการใช้งาน
  • Location หรือตำแหน่งของผู้ใช้งาน

ลองไปดู code ในส่วนการเชื่อมต่อไปยัง RESTful API ฝั่งหลังบ้านจาก App

ใน class ApiRequest จะทำการ hardcode token ของการ access ไปยัง API
ไว้ใน code ไม่แน่ใจว่าทำไมต้อง hardcode ไว้ด้วย
ซึ่งลองเอาไปแปลงใน web JWT ก็เจอว่าส่งอะไรไปบ้าง

ทำให้ใครก็ตามที่อยากไปดึงข้อมูลจาก API เหล่านี้ทำได้ง่าย ๆ เลย
ทั้งการ GET และ POST ข้อมูล !!

ตัวอย่างเช่น API ที่ชื่อว่า /api/mobile_apps.json
ก็ได้ค่าข้อมูลเพียบเลย 
เท่าที่ดูคือข้อมูลการใช้ App ต่าง ๆ ของผู้ติดตั้ง App นี้นั่นเอง
จากที่ลองไปดึงมานั้นพบว่าทีจำนวน 69 app นะครับ
ยกตัวอย่างเช่น

กลุ่ม Social ประกอบไปด้วย

  • Facebook
  • Twitter
  • BeeTalk
  • Badoo
  • Pantip
  • Dek-D
  • Kapook!
  • Mthai

กลุ่ม ความบันเทิง

  • Shopee, Lazada (มายังไงหว่า มัน shopping นะ)
  • Tiktok
  • Youtube
  • 4shared
  • Viu
  • JOOK
  • Netflix
  • 7-Eleven
  • Line TV
  • Bugaboo TV
  • Mello Thailand

กลุ่มเกมส์

  • Garena
  • Voodoo Paper 2
  • Garena Free Fire
  • Color Bump 3D
  • Kungfu world
  • Candy Crush
  • Hay Day

กลุ่ม Utility

  • TrueMoney Wallet
  • Krungthai NEXT
  • K Plus
  • SCB Easy
  • Google Chrome
  • Accu Weather
  • Kerry Express
  • LINE
  • JobDB search

สุดท้ายลองไปเปิด code ส่วนอื่น ๆ ดู 

ก็เจอ Arrow Function นิดหน่อย Code จริง ๆ คงไม่เป็นแบบนี้หรอกนะ

หวังว่าจะมีประโยชน์บ้างนะครับ
สำหรับนักพัฒนา Android App