Network Inspector ใน Android Studio เป็นเครื่องมือโปรไฟล์ที่ติดตั้งในตัว ออกแบบมาเพื่อตรวจสอบและวิเคราะห์ทราฟฟิกเครือข่ายของแอปมือถือแบบเรียลไทม์ ตามเอกสารอย่างเป็นทางการของ Android Developers (2025) เครื่องมือนี้ช่วยให้ติดตามเวลาการทำงานของคำขอ ปริมาณข้อมูลที่ส่ง และสถานะ HTTP ของการเรียกแต่ละครั้งได้ เครื่องมือนี้ไม่จำเป็นต้องแก้ไขโค้ดของแอป และทำงานได้ทันทีกับทุกโปรเจกต์ที่มี API Level 14 ขึ้นไป
ประเด็นสำคัญ
Network Inspector เป็นเครื่องมือโปรไฟล์กิจกรรมเครือข่ายที่ติดตั้งในตัวของ Android Studio ช่วยให้นักพัฒนาเห็นคำขอ HTTP และ HTTPS ทั้งหมดที่แอปส่งออกแบบเรียลไทม์ รวมถึงส่วนหัว เนื้อหาของคำขอและการตอบกลับ รหัสสถานะ และระยะเวลาการทำงาน ใช้งานได้ผ่านแผง Android Profiler ตั้งแต่ Android Studio 3.0 เป็นต้นไป
หน้าที่หลักของ Network Inspector คือการดีบักการโต้ตอบเครือข่ายระหว่างแอปมือถือกับเซิร์ฟเวอร์ เครื่องมือนี้ใช้สำหรับตรวจสอบความถูกต้องของข้อมูลที่ส่ง วิเคราะห์เวลาตอบสนอง ค้นหาข้อผิดพลาดของ API และตรวจจับรูปแบบเครือข่ายที่ไม่มีประสิทธิภาพ เช่น คำขอหลายครั้งเมื่อโหลดหน้าจอเดียว Network Inspector ทำงานบนอุปกรณ์ใดก็ได้ที่มี API Level 14
เครื่องมือนี้รองรับ HTTP client หลักทั้งหมดของ Android ได้แก่ OkHttp (ตั้งแต่เวอร์ชัน 2.x), Retrofit, Ktor (KMM), UrlConnection, Apache HttpClient (เลิกใช้แล้ว) และ WebView สำหรับ OkHttp และ Retrofit ต้องใช้ไลบรารี OkHttp Profiler ซึ่งเชื่อมต่อโดยอัตโนมัติเมื่อใช้ Android Studio 4.1 ขึ้นไป สำหรับ Ktor ต้องตั้งค่าอินเทอร์เซปเตอร์แยกต่างหาก
Network Inspector ดักจับการเรียกเครือข่ายในระดับระบบ โดยใช้กลไก Profiler Agent ที่ฝังเข้ามาพร้อมกับ Android Profiler ต้องใช้บิลด์ดีบักของแอปเพื่อให้ทำงานได้อย่างถูกต้อง เครื่องมือนี้ไม่แก้ไขโค้ดของแอป และไม่ต้องเพิ่มดีเพนเดนซีสำหรับฟังก์ชันพื้นฐาน
เมื่อเริ่มโปรไฟล์ Network Inspector จะเชื่อมต่อกับกระบวนการดีบักของแอปและฟังการเรียก HTTP ทั้งหมดที่ผ่าน OkHttp Client, UrlConnection หรือไลบรารีอื่นที่รองรับ แต่ละคำขอจะถูกบันทึกพร้อมไทม์สแตมป์ ทำให้สามารถสร้างไทม์ไลน์ของกิจกรรมเครือข่ายได้ สำหรับ HTTPS จะใช้เลเยอร์ของระบบ ซึ่งรักษาการเข้ารหัสระหว่างการส่ง แต่ช่วยให้ดูเนื้อหาที่ถอดรหัสแล้วภายใน Studio ได้
การเก็บรวบรวมข้อมูลเกิดขึ้นผ่าน Profiler Service ของ Android Studio ซึ่งทำงานในโพรเซสโฮสต์แยกต่างหาก บนอุปกรณ์จะมีเอเจนต์น้ำหนักเบาที่ส่งเมตาดาตาของคำขอผ่านช่องทาง ADB ซึ่งช่วยลดผลกระทบต่อประสิทธิภาพของแอปได้ โดยโอเวอร์เฮดน้อยกว่า 3% ตามข้อมูลของ Google ข้อมูลของคำขอเอง (เนื้อหา ส่วนหัว) จะถูกส่งเฉพาะเมื่อกำลังดูรายละเอียดอยู่เท่านั้น
// การตั้งค่า OkHttp สำหรับการผสานกับ Network Inspector
val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BASIC
})
.build()
// Network Inspector ดักจับการเรียกทั้งหมดผ่าน client โดยอัตโนมัติ
client.newCall(Request.Builder()
.url("https://api.example.com/data")
.build()).execute()
Network Inspector มอบชุดเครื่องมือสำหรับวิเคราะห์ทราฟฟิกเครือข่ายอย่างครอบคลุม แต่ละฟังก์ชันมุ่งแก้โจทย์การดีบักเฉพาะด้าน ตั้งแต่การตรวจสอบส่วนหัวไปจนถึงการวิเคราะห์ประสิทธิภาพของ API
หน้าจอหลักของ Network Inspector แสดงลำดับเหตุการณ์ของคำขอทั้งหมดในรูปแบบไทม์ไลน์ แต่ละคำขอแสดงเป็นแถบสี ได้แก่ สีเขียว — การตอบกลับสำเร็จ (2xx), สีน้ำเงิน — การเปลี่ยนเส้นทาง (3xx), สีเหลือง — ข้อผิดพลาดฝั่งไคลเอ็นต์ (4xx), สีแดง — ข้อผิดพลาดฝั่งเซิร์ฟเวอร์ (5xx) ความยาวของแถบสอดคล้องกับเวลาการทำงานของคำขอตั้งแต่การเชื่อมต่อจนถึงการรับการตอบกลับครบถ้วน ทำให้ระบุคำขอที่ช้าหรือล้มเหลวได้ทันที
| พารามิเตอร์ | คำอธิบาย | ตัวอย่างค่า |
|---|---|---|
| URL | ที่อยู่เต็มของคำขอ | https://api.example.com/v2/users |
| Method | วิธี HTTP ของคำขอ | POST |
| Status | รหัส HTTP ของการตอบกลับ | 200 OK |
| Size | ขนาดของคำขอ + การตอบกลับเป็นไบต์ | 12.4 KB |
| Time | เวลาการทำงานทั้งหมด | 342 ms |
เมื่อเลือกคำขอเฉพาะเจาะจง จะเปิดแผงพร้อมรายละเอียด ได้แก่ Headers (ส่วนหัวทั้งหมดของคำขอและการตอบกลับ), Request Body (เนื้อหาของคำขอในรูปแบบข้อความหรือไบนารี), Response Body (เนื้อหาการตอบกลับพร้อมตัวเลือกการจัดรูปแบบ JSON), Cookies (ที่ส่งและได้รับ), Timing (การแบ่งเวลาตามเฟส: DNS, Connection, TLS Handshake, Request, Response)
Network Inspector รองรับการกรองคำขอตาม URL วิธี HTTP รหัสสถานะ และประเภทเนื้อหา สามารถแยกคำขอไปยังโดเมนบางแห่งออก เพื่อมุ่งเน้นเฉพาะ API ที่ต้องการ การค้นหาทำงานในทุกฟิลด์ของคำขอ รวมถึงเนื้อหาและส่วนหัว ซึ่งสะดวกเมื่อดีบักฟังก์ชันเฉพาะของแอป ฟิลเตอร์แบบผสมช่วยสร้างชุดกฎที่นำไปใช้โดยอัตโนมัติทุกครั้งที่เริ่มโปรไฟล์
ไทม์ไลน์รองรับการจัดกลุ่มคำขอตามแพตเทิร์น URL เช่น คำขอรูปแบบ /api/v2/users/* ทั้งหมดสามารถยุบเป็นกลุ่มเดียวได้ ซึ่งช่วยให้วิเคราะห์ง่ายขึ้นเมื่อแอปส่งคำขอหลายร้อยครั้งในเวลาอันสั้น ฟังก์ชันเปรียบเทียบคำขอที่อยู่ติดกันช่วยตรวจจับการเปลี่ยนแปลงในการตอบกลับของเซิร์ฟเวอร์เมื่อมีการเรียกซ้ำ
การใช้งาน Network Inspector ในทางปฏิบัติครอบคลุมสถานการณ์ดีบักทั่วไป ได้แก่ การตรวจสอบรูปแบบข้อมูล การค้นหาเอนด์พอยต์ที่ช้า การตรวจจับการรั่วไหลของหน่วยความจำจากการเชื่อมต่อที่ไม่ปิด และการวิเคราะห์แคช
งานที่พบบ่อยคือการยืนยันว่าเซิร์ฟเวอร์ส่งข้อมูลกลับในรูปแบบที่คาดหวัง Network Inspector แสดงเนื้อหาการตอบกลับพร้อมการจัดรูปแบบ JSON รวมถึงการไฮไลต์ไวยากรณ์ หากคำตอบไม่สามารถ parse ฝั่งไคลเอ็นต์ได้ จะเห็นสาเหตุได้ทันทีในอินสเปกเตอร์ เช่น ฟิลด์ที่หายไป ชนิดข้อมูลไม่ถูกต้อง (สตริงแทนตัวเลข) หรือการซ้อนมากเกินไป หากเซิร์ฟเวอร์ส่งข้อผิดพลาดกลับมา อินสเปกเตอร์จะแสดงโครงสร้างข้อผิดพลาดพร้อมรหัสและข้อความ สำหรับรูปแบบไบนารี (Protocol Buffers, รูปภาพ) จะแสดงขนาดและ content-type
แท็บ Timing แบ่งการทำงานของคำขอออกเป็นเฟส ได้แก่ DNS Resolution, TCP Connection, TLS Handshake, Request Send, Response Receive หากเวลารวมเกิน 1–2 วินาที การแบ่งตามเฟสจะช่วยระบุสาเหตุได้ เช่น DNS ที่ช้าบ่งชี้ปัญหากับรีโซลเวอร์ TLS Handshake ที่ช้าบ่งชี้เวอร์ชันโปรโตคอลที่เก่าบนเซิร์ฟเวอร์ และ Response ที่ช้าบ่งชี้โค้ดเซิร์ฟเวอร์ที่ช้าหรือคำขอที่ไม่มีประสิทธิภาพพร้อมข้อมูลเกินจำเป็น การวิเคราะห์ Timing ช่วยค้นหาคอขวดก่อนเริ่มปรับปรุงฝั่งเซิร์ฟเวอร์ด้วยซ้ำ
Network Inspector ช่วยตรวจจับคำขอที่ซ้ำซ้อน เช่น เมื่อ Activity สร้างการโหลดข้อมูลใหม่ทุกครั้งที่หมุนหน้าจอ บนไทม์ไลน์ ชุดคำขอเหมือนกันที่ต่อเนื่องกันจะบ่งชี้ปัญหาอย่างชัดเจน วิธีแก้ไขอาจเป็นการใช้แคช การใช้ ViewModel ที่เก็บสถานะ หรือ SingleLiveEvent สำหรับการโหลดเพียงครั้งเดียว
// การแคชคำขอด้วย OkHttp เพื่อลดการทำซ้ำ
val cache = Cache(
File(context.cacheDir, "http_cache"),
cacheSize = 10L * 1024 * 1024 // 10 MB
)
val cachedClient = OkHttpClient.Builder()
.cache(cache)
.addNetworkInterceptor(CacheInterceptor())
.build()
แม้จะมีความสามารถหลากหลาย Network Inspector ยังมีข้อจำกัดหลายประการที่ควรคำนึงถึง สำหรับบางสถานการณ์ เช่น การดักจับ HTTPS ด้วยใบรับรองที่เซ็นชื่อเอง หรือการวิเคราะห์ทราฟฟิกของไลบรารีภายนอก อาจต้องใช้เครื่องมืออื่น
Network Inspector ทำงานได้กับแอป Android เท่านั้น และไม่รองรับ iOS สำหรับ Kotlin Multiplatform (KMM) คำขอบางส่วนอาจไม่แสดงผล หากทำงานในส่วน native ไลบรารีบางตัว เช่น gRPC, WebSocket (ไม่ใช่ HTTP), GraphQL ผ่าน Apollo (ถึงเวอร์ชัน 3.x) อาจถูกดักจับบางส่วนหรือไม่ถูกดักจับเลย จนกว่าจะตั้งค่าอินเทอร์เซปเตอร์เพิ่มเติม
สำหรับการวิเคราะห์ทราฟฟิกเครือข่ายเชิงลึก มีโซลูชันจากบุคคลที่สาม ได้แก่ Charles Proxy (พร็อกซีเซิร์ฟเวอร์เต็มรูปแบบพร้อมการดักจับ HTTPS), Proxyman (เทียบเท่าสำหรับ macOS), Wireshark (การวิเคราะห์ระดับแพ็กเก็ต), Stetho by Facebook (การผสานกับ Chrome DevTools), Chucker (ไลบรารีสำหรับตรวจสอบคำขอภายในแอป) แต่ละเครื่องมือมีจุดเด่นของตัวเอง Charles และ Proxyman ขาดไม่ได้เมื่อดีบักการโต้ตอบกับเซิร์ฟเวอร์ในช่วงแรกของการพัฒนา ส่วน Chucker เหมาะสำหรับการเก็บข้อมูลในบิลด์ทดสอบ
| เครื่องมือ | ประเภท | แพลตฟอร์ม | HTTPS | HAR |
|---|---|---|---|---|
| Network Inspector | ติดตั้งในตัว Android Studio | Android | ใช่ | ใช่ |
| Charles Proxy | พร็อกซีเซิร์ฟเวอร์ | ข้ามแพลตฟอร์ม | ใช่ | ใช่ |
| Proxyman | พร็อกซีเซิร์ฟเวอร์ | macOS, iOS | ใช่ | ใช่ |
| Chucker | อินสเปกเตอร์ในแอป | Android | ใช่ | ไม่ |
| Wireshark | ตัววิเคราะห์แพ็กเก็ต | ข้ามแพลตฟอร์ม | ไม่ | ไม่ |
คำถามที่พบบ่อย
ตรวจสอบว่าแอปถูกบิลด์ในคอนฟิกดีบักและรันพร้อมกับ Android Profiler ที่เชื่อมต่อ หากใช้ OkHttp 4.x อาจต้องอัปเดตไลบรารีเป็นเวอร์ชันล่าสุด สำหรับ Ktor คำขอจะแสดงเฉพาะเมื่อใช้ Ktor client ที่มี Engine รองรับการดักจับ
ได้ Network Inspector รองรับทราฟฟิก HTTPS โดยไม่ต้องตั้งค่าเพิ่มเติม ต่างจาก Charles Proxy ที่ไม่ต้องติดตั้งใบรับรองราก เครื่องมือนี้ใช้กลไกระบบของ Android Profiler เพื่อถอดรหัสทราฟฟิกภายในเซสชันดีบัก
Network Inspector ให้ส่งออกข้อมูลในรูปแบบ HAR (HTTP Archive) ได้ คลิกปุ่ม Export ที่มุมขวาบนของแผง ไฟล์ HAR สามารถเปิดได้ในตัวดู HAR ใดก็ได้ หรือนำเข้าใน Charles Proxy และ Proxyman เพื่อวิเคราะห์เพิ่มเติม
ตามข้อมูลของ Google โอเวอร์เฮดไม่เกิน 3% ระหว่างการโปรไฟล์แบบแอ็กทีฟ เมื่อปิด Network Inspector จะไม่มีโอเวอร์เฮดเลย ไม่แนะนำให้ใช้เครื่องมือนี้ในบิลด์เผยแพร่ แต่สำหรับเซสชันดีบัก ผลกระทบแทบไม่รู้สึกบนอุปกรณ์สมัยใหม่
หากเนื้อหาการตอบกลับแสดงเป็นข้อมูล rawที่อ่านไม่ออก อาจเกี่ยวข้องกับการบีบอัด gzip หรือรูปแบบไบนารี (Protocol Buffers, MessagePack) Network Inspector ถอดรหัส gzip โดยอัตโนมัติ สำหรับรูปแบบที่กำหนดเอง ให้ใช้ hint ของ Content-Type ในส่วนหัวของการตอบกลับ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม