02 พฤศจิกายน 2558

[Android Dev Tips] การนำ Library ที่เป็นไฟล์ AAR มาใช้งานในโปรเจคของเรา



        ปกติแล้วการนำไฟล์ไลบรารีมาใช้งานภายในโปรเจคแอนดรอยด์ของเรา มักจะนึกถึงไฟล์ .jar เป็นหลัก หรือไม่ก็เป็น Source Code เลย แต่คราวนี้เจ้าของบล็อกจะมาแนะนำให้รู้จักวิธีการนำไฟล์ไลบรารีที่เป็นไฟล์ .aar มาใช้งานในโปรเจคแอนดรอยด์นะครับ

        สำหรับผู้ที่หลงเข้ามาอ่านคนใดยังไม่รู้จักว่าโลกนี้มีนามสกุลไฟล์ที่ชื่อว่า .aar อยู่ ก็ลองไปอ่านบทความ [Android Dev Tips] ไฟล์ AAR คืออะไร และแตกต่างอย่างไรกับ JAR ก่อนได้นะ

        สำหรับผู้ที่หลงเข้ามาอ่านที่ยังไม่รู้เกี่ยวกับไฟล์ .aar นะครับ โดยปกติแล้ว Remote Dependencies ที่ดึงมาจาก Maven Central หรือ JCenter เพื่อเอามาใช้งานกันอยู่ในทุกวันนี้ก็เป็นไฟล์ .aar นี่แหละ

        แต่ถ้าผู้ที่หลงเข้ามาอ่านมีไฟล์ .aar ของไลบรารีซักตัวและไม่สามารถดึงจาก Remote Dependencies ได้ จะทำยังไงดีล่ะ?

        ถ้าเป็นไฟล์​ .jar ก็เพียงแค่เอามายัดใส่ไว้ในโฟลเดอร์ libs ก็สามารถใช้งานได้แล้ว แต่สำหรับไฟล์ .aar อาจจะต้องมีขั้นตอนมากกว่านั้นนิดหน่อย

สร้างโฟลเดอร์​ libs เตรียมไว้ให้พร้อม

        ให้เช็คในโฟลเดอร์ src ของ Module ที่ต้องการเพิ่มไฟล์ .aar ว่ามีโฟลเดอร์ libs อยู่หรือไม่ ถ้ายังไม่มีก็สร้างขึ้นมาให้เรียบร้อยซะ (แนะนำให้แสดง Project Explorer แบบ Project เพื่อให้ดูได้ง่าย)



เอาไฟล์ .aar ไปไว้ในโฟลเดอร์ libs ให้เรียบร้อย

        เจ้าของบล็อกยกตัวอย่างเป็นไฟล์ไลบรารีที่ชื่อว่า vmax.aar ก็เอามาไว้ในโฟลเดอร์ libs แบบนี้


กำหนดให้ Gradle อ้างอิง Dependencry จากในโฟลเดอร์ libs ด้วย

        เนื่องจากไฟล์​.aar ไม่เหมือนกับไฟล์ .jar ที่จะระบุเป็นแบบ File Dependencies ได้ เพียงแค่กำหนดคำสั่งใน build.gradle แบบนี้

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    ...
}
        ซึ่งแบบนี้จะทำให้ Gradle ทำการ Build ไฟล์ .jar ที่อยู่ในโฟลเดอร์ libs ให้เองเลย โดยไม่ต้องกำหนดชื่อไฟล์ แต่ทว่ามันใช้ได้เฉพาะไฟล์ .jar เท่านั้น

        แต่สำหรับ .aar ต้องบอกให้ Gradle รู้ว่ามี Dependency อยู่ในโฟลเดอร์ libs ด้วยนะ โดยกำหนดคำสั่งเพิ่มต่อท้ายไฟล์ build.gradle ใน Module ที่ต้องการดังนี้

repositories {
    flatDir {
        dirs 'libs'
    }
}

        ใส่ไว้ท้ายสุดของ build.gradle ได้เลย

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

        แต่ยังไม่เสร็จนะ เพราะ .aar มันมองเหมือน Dependency ตัวหนึ่งที่จะต้องระบุ Package ไว้ในคำสั่ง dependencies ด้วย

ระบุ Dependencies ของไฟล์​ .arr ลงใน build.gradle

        การเอาไฟล์ .aar มาใช้ อาจจะทำให้ไม่รู้ว่า Package และ Module ของไลบรารีที่จะเอามาใช้นั้นชื่ออะไร แนะนำให้ไปดู Documentation จากนักพัฒนาไลบรารีนั้นๆเอานะครับ เพราะเค้าจะต้องบอกให้อยู่แล้ว

        อย่างกรณีของเจ้าของบล็อกใช้ไลบรารีของ VMAX มายกตัวอย่าง ซึ่งเค้าบอกไว้ดังนี้

com.vserv.android.ads.aar:vmax@aar

        ดังนั้นก็เอามากำหนดเป็นแบบนี้ได้เลย

dependencies {
    ...
    compile 'com.vserv.android.ads.aar:vmax@aar'
}

        แล้วทำการ Build Gradle ได้เลยจ้า เจ้า Gradle ก็จะไปดึงไลบรารีจากในโฟลเดอร์ libs มาทำเป็น Dependency ให้ใช้งาน

Build เสร็จแล้ว ผ่านฉลุย ใช้งานได้เลย

        เพื่อให้แน่ใจว่าไลบรารีสามารถใช้งานได้แล้ว ก็ให้ลองพิมพ์คำสั่งของไลบรารีนั้นๆเพื่อทดสอบดูว่า Code Completion ของ Android Studio แสดงคำสั่งของไลบรารีได้ปกติหรือไม่


        เสร็จแล้วจ้า

สรุป

        ปกติ Dependencies ต่างๆที่ดึงมาจาก MavenCentral หรือ JCenter นั้นจะเป็น .aar อยู่แล้ว แต่ในบางครั้งอาจจะต้องเจอกับไลบรารีที่ไม่ได้ Public อยู่บนนั้น จึงอาจจะต้องนำมาใส่ลงในโปรเจคแล้วสั่งให้ Gradle ดึงไฟล์ดังกล่าวไป Build แทน

        แต่ไลบรารีส่วนใหญ่ก็มักจะส่งขึ้น Maven Central กับ JCenter อยู่แล้วนะ




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium