หลังจากที่ Android Studio ปล่อยออกมาให้ใช้งาน อาจจะมีผู้ที่หลงเข้ามาอ่านบางท่านสังเกตเห็นไฟล์ที่มีนามสกุลเป็น .aar
(Android ARchive) กันอยู่บ้าง ซึ่งไฟล์ดังกล่าวนี้ก็เป็นไฟล์ไลบรารีแบบเดียวกับ .jar
แต่ทว่ามันต่างกันยังไงล่ะ?
ก่อนอื่นผู้ที่หลงเข้ามาอ่านต้องรู้จักกับไฟล์ .jar
เสียก่อน โดยไฟล์ .jar
เป็นไฟล์โปรแกรมสำหรับภาษา Java ที่ถูกรวมกันเป็นไฟล์เดียว ซึ่งในการพัฒนาแอพแอนดรอยด์ก็จะคุ้นกับไฟล์นี้ว่าเป็นไฟล์ไลบรารีซะมากกว่า เพราะไลบรารีหลายๆที่ถูกเขียนขึ้นจาก Java จึงทำให้สามารถรวมเป็นไฟล์ .jar
แล้วนำไปใช้งานในโปรเจคของแอนดรอยด์ได้
แต่ทว่าในโปรเจคแอนดรอยด์นั้นประกอบไปด้วยไฟล์ต่างๆหลากหลายนามสกุล ไม่ว่าจะ .java
, .xml
หรือ .so
เป็นต้น ดังนั้นเวลาที่เขียนไลบรารีขึ้นมาซักตัวที่มีการเรียกใช้งานไฟล์ที่ไม่ใช่ .java
(เช่น res/layout/my_layout.xml
) มันจะไม่สามารถรวมไว้ในไฟล์ .jar
ได้
ทั้งนี้ก็เพราะว่า .jar มีไว้สำหรับไฟล์ .java เท่านั้น
ดังนั้นไลบรารีบางตัวที่มีการเรียกใช้ Resource อื่นๆนอกเหนือจาก .java
(เช่นไฟล์ .xml
ต่างๆที่อยู่ในโฟลเดอร์ res
) ก็จะไม่สามารถเรียกใช้งานได้
และด้วยปัญหาดังกล่าวนี้จึงทำให้ไลบรารีบางตัวไม่สามารถทำให้อยู่ในรูปของ .jar
ได้ ต้องเอาไปใช้งานทั้งโปรเจค (ใช้วิธี Module Dependencies) ซึ่งก็อาจจะยุ่งยากไปบ้าง
ดังนั้นไฟล์ .aar จึงถือกำเนิดเพื่อแก้ไขปัญหานี้
โดยที่ไฟล์ .aar
เกิดมาเพื่อเก็บไลบรารีของโปรเจคแอนดรอยด์โดยเฉพาะ สามารถเก็บได้ทั้ง .java
, .xml
, .so
หรือไฟล์ใดๆที่ใช้งานในโปรเจคแอนดรอยด์ (proguard.txt
ก็ยังได้) แล้วนำไฟล์ดังกล่าวไปเรียกใช้งานในโปรเจคแอนดรอยด์ตัวอื่นๆได้เลย
โดยที่โครงสร้างของ .aar
แท้จริงแล้วก็เป็นแค่ Zip Compression หนึ่งตัวเท่านั้นแหละ ถ้าลองเปลี่ยนนามสกุลไฟล์เป็น .zip
ก็จะพบว่าสามารถแตกไฟล์แล้วจะเห็นว่ามีโครงสร้างเหมือนกับโปรเจคแอนดรอยด์ตามปกติเลย
แต่ก็ใช่ว่าจะเอาไฟล์ .aar
มาแตกไฟล์แล้วเปิดบน Android Studio เพื่อแก้ไขโค๊ดได้ทันที เพราะ .java
ในไลบรารีตัวนั้นๆจะถูกรวบให้กลายเป็น classes.jar
แทน และไฟล์ต่างๆที่อยู่ในโฟลเดอร์ res
ก็จะถูก Index ไว้ใน R.txt
อีกทีหนึ่ง ซึ่งเจ้า Android Studio ก็จะใช้เจ้า Gradle จัดการกับไลบรารีดังกล่าวอีกทีหนึ่ง
ดังนั้นไลบรารีจึงนิยมเปลี่ยนมาเป็น .aar
กัน เพื่อให้สะดวกต่อการเรียกใช้งานผ่าน Maven
ถ้าลองสังเกตดีๆเวลาที่เพิ่มไลบรารีแอนดรอยด์ลงในโปรเจคผ่าน Remote Dependencies ก็จะเป็นการดาวน์โหลดไฟล์ .aar
ของไลบรารีนั้นๆใน Maven มาใช้งานนั่นเอง
ดังนั้นไลบรารีตัวใดที่มีไฟล์อื่นๆที่สำคัญนอกเหนือจากไฟล์ .java
ก็จะนิยมใช้เป็นไฟล์ .aar กันแล้ว แต่ถ้าไลบรารีตัวใดที่มีแค่ .java
อย่างเดียว ก็สามารถใช้ .jar
ได้เลยเช่นกัน