Android in local environment
ปกติแล้วเมื่อสร้าง project เราก็จะได้ environment อยู่สองตัวคือ debug และ release ซึ่งผมมักจะใช้ debug กับ staging server และ release กับ production server แต่ก็มีบางครั้งที่ผมต้องต่อกับ server บน local machine เลยมี local สำหรับ local environment
ซึ่งแน่นอนว่าการกำหนด url เป็น localhost ไม่สามารถทำให้ simulator หรือ device รู้จัก server ที่มีอยู่บนเครื่องได้ เลยต้องระบุเป็น IP address ตรงๆไปเลย
แต่ทุกครั้งที่ต่อ access point ใหม่ IP address ก็จะเปลี่ยนไป ต้องมาเปลี่ยนที่ build.gradle ทุกครั้งคงไม่สนุกนัก จะดีกว่ามั้ยถ้า Gradle สามารถดึง IP address มาให้เราแล้วใส่เข้าไปใน BuildConfig ตรงๆเลย
เตรียมความพร้อม
มาสร้าง function สำหรับการเรียก IP address กันก่อนใน build.gradle
เราสามารถดึงค่า IP address ง่ายๆจาก lib Java ด้วย
def localhost = InetAddress.getLocalHost().getHostAddress()
แต่วิธีนี้อาจทำให้เราได้ loopback address (127.0.01) มาได้ วิธีที่ปลอดภัยคือดึงค่า IP address ทั้งหมดที่มี แล้วข้าม loopback address และเอาเฉพาะ site-local address มาแทน
จาก code ข้างต้น เมื่อเจอ site-local address แล้ว จะเอาค่านั้นมาใช้ทันที แต่ถ้าสุดท้ายแล้วยังไม่ได้ IP address ก็จะกลับมาเรียก InetAddress.getLocalHost()
เตรียม function เสร็จแล้ว ก็เอามาใช้งานในส่วนของการสร้าง BuildConfig ใน buildTypes
หลังจาก sync Gradle แล้ว ใน class BuildConfig.java ก็จะมี property API_URL ตามค่า IP address ของเครื่องเรา
เพียงเท่านี้ เราก็สามารถเชื่อมต่อกับ local environment ได้ทุกที่ทุกเวลา
ก็จบเพียงเท่านี้ Happy Gradle ครับ