บันทึกการคอมไพล์ Native WebRTC Library สำหรับ Android บน macOS

Peerapong Samarnpong
te<h @TDG
Published in
2 min readDec 10, 2019

เนื่องจากมีความจำเป็นบางอย่างที่ต้องใช้ WebRTC ที่คอมไพล์เองจาก Source code ผู้เขียนก็พยายามคอมไพล์ด้วย macOS หลายครั้งแต่ก็ไม่สำเร็จสักที จนไปอ่านดูในเว็บของ webrtc.org ดี ๆ ถึงได้เห็นเค้าระบุว่า

Android development is only supported on Linux.

ทีนี้ผู้เขียนก็ดันมีแต่เครื่องที่เป็น macOS ดังนั้น ผู้เขียนจึงคิดว่าการใช้ docker น่าจะเป็นคำตอบที่ดีที่สุดตามความรู้ที่มีแล้ว

ติดตั้ง Docker

หากยังไม่ได้ทำการติดตั้ง Docker ก็สามารถทำได้ง่ายดาย สามารถดาวน์โหลดและดูขั้นตอนการติดตั้งจากเว็บไซต์ Docker ได้เลย

สร้าง Docker Container

ผู้เขียนเลือก Ubuntu 16.04 (LTS) เป็น container สำหรับใช้คอมไพล์ WebRTC และก่อนที่จะ compile ได้ต้องมีการเตรียมสิ่งที่ WebRTC ต้องใช้ในการคอมไพล์เสียก่อน

บางอย่างจะติดตั้งอัตโนมัติตอนเริ่มทำการคอมไพล์

สร้าง Dockerfile พร้อมทั้งติดตั้ง Prerequisite Software

ผู้เขียนสร้าง Dockerfile ที่ติดตั้ง Prerequisite Software (Chromium depot_tools) เพื่อความสะดวกกรณีเก็บไว้ใช้ในครั้งถัดไป โดย Dockerfile จะมีหน้าตาประมาณนี้

ใช้ share volumes สำหรับเก็บ source code ไว้ที่ host เพราะคิดว่าจัดการง่ายกว่า เช่นเปิดแก้ใน vs code ได้เลย

จากนั้นก็เริ่มต้นสร้าง docker container ด้วยคำสั่ง

docker-compose up -d

และ shell เข้าไปยัง docker container ที่สร้างแล้ว (หากไม่ทราบสังเกต บรรทัด Creating container_name … done)

docker exec -it container_name bash

ดาวน์โหลด Source Code

หลังจากที่ได้ทำการ shell เข้าไปยัง container แล้ว เราก็สามารถดึงเอา souce code มาได้ด้วยคำสั่ง

cd /src/webrtc-android
fetch --nohooks webrtc_android
gclient sync

fetch — nohooks webrtc_android สามารถรันได้เพียงครั้งเดียว ถ้ารันครั้งแรกแล้วโหลดไม่เสร็จ จะไม่สามารถทำงานต่อได้ ต้องลบทิ้งแล้ว รันคำสั่งใหม่เท่านั้น

สำหรับขั้นตอนนี้อาจจะใช้เวลานาน และต้องใช้พื้นที่ว่างในฮาร์ดดิสก์ประมาณ 16–20 GB สามารถ

จากนั้นให้ติดตั้ง dependencies สำหรับใช้ในการคอมไพล์โดยใช้คำสั่ง

cd src
./build/install-build-deps.sh

การคอมไพล์

เราสามารถคอมไพล์ได้ 2 วิธีคือ

1. คอมไพล์ผ่าน AAR build tools

tools_webrtc/android/build_aar.py

2. คอมไพล์ด้วยตัวเอง

สามารถตั้งค่าการคอมไพล์ด้วยตัวเองโดยสำหรับ debug จะใช้

gn gen out/Debug --args='target_os="android" target_cpu="arm"'

หรือสำหรับ release จะใช้

gn gen out/Release --args='is_debug=false is_component_build=false rtc_include_tests=false target_os="android" target_cpu="arm"'

จากนั้นคอมไพล์ด้วย

ninja -C out/Debug

นำไฟล์ AAR ไปใช้งาน

จากขั้นตอนข้างบนจะได้ไฟล์ libwebrtc.aar สำหรับนำไปใช้งานใน Android Project หรืออัปโหลดขึ้น Maven Repository ก็ได้

ถ้าจะนำไปอัปโหลดขึ้น Maven Repository ก็สามารถใช้คำสั่งด้านล่างสร้าง Maven Artifact ก่อน

mvn install:install-file -Dfile=./libwebrtc.aar -DgroupId=org.webrtc -DartifactId=google-webrtc -Dversion=67 -Dpackaging=aar -DlocalRepositoryPath=./android-webrtc -DcreateChecksum=true

ปล. ขั้นตอนที่ผู้เขียนทำทั้งหมดกินเวลาไปทั้งหมดน่าจะราว ๆ 8–10 ชม. ดูซีรีส์ได้เกือบทั้งเรื่องเลยทีเดียว

--

--