[Dev] ขั้นตอนการ Publish Android Library ไปที่ jCenter

บน Android Studio หลาย ๆ คนที่ได้ลองใช้ แล้วมักจะติดใจ ส่วนใหญ่คงหนีไม่พ้นเรื่องของการใช้งาน Library ต่าง ๆ ด้วยการกำหนด Dependencies ใน Gradle Scripts ซึ่งใช้งานง่ายมาก แค่แปะคำสั่ง 1 บรรทัด แล้ว Sync ให้เรียบร้อย ก็สามารถใช้งานได้แล้ว

Android-Developer-logo_Publish-Library-to-jCenter

ทีนี้ ถ้าเราอยากทำ Library ให้คนอื่นใช้งานได้ อย่างที่เราไปใช้ของคนอื่นบ้าง จะทำอย่างไร!?

บทความนี้ เราจะมาดูวิธีการนำ Library ขึ้นไปที่ jCenter ให้ผู้อื่นใช้งานกัน…

ก่อนอื่น มาดูตัวอย่างการกำหนด Dependencies กันก่อน ลองเปิดไปดูไฟล์ build.gradle ที่อยู่ใน Module จะเห็นว่ามีการกำหนด Dependencies ไว้ เช่น

ก็จะเป็นการใช้งาน Android Support AppCompat v7 Library นั่นเอง

ซึ่งโดยทั่วไป เราจะเห็นตามเอกสารของ Library ต่าง ๆ ที่สร้างมาสำหรับ Android Studio จะบอกไว้อยู่แล้วว่า จะใช้งานโดยการกำหนด Dependencies อย่างไร

ลองดูอีกตัวอย่าง เป็น Library ชื่อว่า OkHttp จะเห็นในส่วนของหัวข้อ Download นั้น ได้เขียนบอกไว้ ดังนี้

 

List of contents

 

Library Repository

ซึ่ง Library เหล่านี้ โดย Default ของ Android Studio แล้ว จะถูก Download จาก jCenter นั่นเอง

รู้ได้ไงว่าเป็น jCenter? เคยได้ยินแต่ Maven Central~!!

อ่ะ ไม่เชื่อ~!! ลองเปิด Android Studio ไปที่เมนู File > Project Structure…

เมนู File บน Android Studio
เมนู File บน Android Studio

แล้วดูที่แถบ Project บนหน้าต่าง Project Structure dialog

Project Structure dialog บน Android Studio
Project Structure dialog บน Android Studio

จากรูปด้านบน จะเห็นว่า มีข้อมูล 4 ช่อง ดังนี้

  • Gradle version – 2.2.1
  • Android Plugin Version – 1.2.0
  • Android Plugin Repository – jcenter
  • Default Library Repository – jcenter

ก็ตรง Default Library Repository นั่นล่ะครับ ที่บอกว่า ให้ Download Library จากที่ไหน…

หรือถ้าเปิดไฟล์ build.gradle ที่อยู่นอกสุดของ Project ก็จะพบกับ Script ประมาณนี้

  • บรรทัดที่ 5 คือ Android Plugin Repository
  • บรรทัดที่ 8 คือ Android Plugin Version
  • บรรทัดที่ 17 คือ Default Library Repository

jCenter ละนะ…

แต่ ๆๆๆ… ลองดูในหน้าต่าง Project Structure dialog ตะกี้ แล้วลองเลือกไปที่ Module (1) แล้วไปที่แถบ Dependencies (2) จะเห็นรายชื่อ Dependencies ที่เราใช้อยู่ในด้านล่าง จะเห็นว่า มี Icon รูปตัว m อยู่ข้างหน้า

ถ้ากดเครื่องหมาย + (3) เพื่อเพิ่ม Dependency ใหม่ จะเห็นว่ามีให้เลือก m Library dependency (4) ลองคลิกเข้าไปดู…

Project Structure dialog บน Android Studio
Project Structure dialog บน Android Studio

จะมีหน้าต่างให้เราเลือก Library ที่เตรียมไว้ให้แล้วบางส่วน หรือจะค้นหาก็ได้ ซึ่งคำอธิบายด้านล่างช่องค้นหานั้น บอกไว้ว่า เป็นการค้นหาที่ Maven Central!?

Choose Library Dependency dialog บน Android Studio
Choose Library Dependency dialog บน Android Studio

ก็คือ ถ้าค้นหา Dependencies ตรงนี้ จะค้นจาก Maven Central แต่ถ้าตอน Sync ก็จะ Download จาก jCenter นั่นเอง

เพราะฉะนั้น ถ้าเราเอา Library ขึ้น jCenter ได้ ก็ให้คนอื่นใช้งานได้แล้ว ไม่จำเป็นต้องขึ้น Maven Central นะ แค่เซิจไม่เจอเท่านั้นเอง แต่ส่วนใหญ่ เหล่า Dev ก็จะเอาขึ้นทั้ง 2 ที่นั่นแหล่ะ~!!

ถ้าอยาก Sync จาก Maven Central ก็แค่เปลี่ยนจาก jcenter เป็น mavencentral

สำหรับขั้นตอนการ Upload Android Library ไปที่ Maven Central นั้น ทาง devahoy.com ก็ได้เขียนบทความสอนไว้แล้ว ผมเลยมาเขียนขั้นตอนการนำขึ้น jCenter ให้อ่านบ้าง ซึ่งง่ายกว่าเอาขึ้น Maven Central เยอะเลย

 

Bintray

ก่อนอื่น ต้องไปสมัคร Account ที่ bintray.com ก่อน โดยเราสามารถที่จะผูก Account กับ GitHub, Twitter หรือ Google+ ก็ได้ หรือจะสมัครใหม่ก็ไม่ว่ากัน

หน้า Sign in ของ Bintray
หน้า Sign in ของ Bintray

หลังจากนั้น ก็ไป Edit Profile ได้ตามใจชอบ โดยการคลิกที่ชื่อเราด้านบน แล้วคลิกปุ่ม Edit

ส่วนที่สำคัญที่เราจะได้ใช้ ก็คือ API Key ซึ่งจะอยู่ในเมนู API Key (1) ด้านซ้าย ในส่วนของ Edit Profile ซึ่งจะซ่อนอยู่ (3) สามารถกดดูได้ที่ Link Show (2)

Bintray API Key
Bintray API Key

 

Plugin

สำหรับ Plugin ที่จะต้องใช้ มีอยู่ด้วยกัน 2 ตัว โดยสามารถกำหนดไปที่ build.gradle ที่อยู่นอกสุดของ Project ดังนี้

โดยที่ เราจะใช้ gradle version 1.1.1 ถึง 1.1.3 นะครับ เนื่องจากได้ทดสอบกับ version 1.1.0 และ 1.2.0 แล้ว พบว่ามีปัญหากับ Plugin ของ Bintray

 

Gradle Script

สำหรับ Gradle Script ที่จะใช้งาน Plugin ทั้ง 2 ตัวที่เพิ่มมานั้น จะเขียนรวมไปกับ build.gradle ของ Library Module เลยก็ได้ แต่จากการแกะดู Gradle Script ของตำราต่าง ๆ และตาม Library ต่าง ๆ ทำให้เกิดเป็น Pattern ที่จะนำไปใช้ต่อได้ง่าย ๆ โดยจะแยก Gradle Script ในแต่ละส่วนออกจากกัน และแยกส่วนที่ต้องกำหนดค่าต่าง ๆ ออกไป โดยให้ทำการเพิ่มไฟล์ 2 ไฟล์ คือ maven.gradle และ bintray.gradle ที่ชั้นนอกสุดของ Project ดังนี้

สำหรับบรรทัดที่ทำไฮไลท์ไว้ ให้กำหนดค่าเป็น false ไปก่อน เพราะยังไม่ได้ใช้งานในขั้นตอนนี้

แล้วเพิ่มคำสั่งไว้ที่ท้ายไฟล์ build.gradle ที่อยู่ใน Library Module ของเรา เพื่อรวมเอา 2 ไฟล์ด้านบนไปใช้งานนั่นเอง

ต่อไปให้แก้ไขไฟล์ gradle.properties ของ Project ซึ่งเดิม ๆ จะมีแต่ Comment ให้ทำการเพิ่มตัวแปร เข้าไป ด้านล่างนี้เป็นตัวอย่างของ Library License Fragment ที่ใช้ในการทดสอบ อย่าลืมแก้ไขตัวแปรต่าง ๆ ให้ถูกต้องด้วยนะครับ

ค่าที่กำหนดด้านบนนี้ ส่งผลถึงรูปแบบของ Dependencies ด้วยนะ ซึ่งจะมีรูปแบบดังนี้

โดยค่าต่าง ๆ ที่กำหนดในตัวอย่างด้านบน ก็จะได้เป็น

และไฟล์สุดท้าย คือไฟล์ local.properties ซึ่งใช้ระบุที่อยู่ของ Android SDK ให้เราทำการเพิ่มตัวแปรไปอีก 2 ตัว ดังนี้ โดยที่ตัวแปร bintray.user จะต้องกำหนด Username ที่เราสมัครไว้กับ Bintray และตัวแปร bintray.apikey จะต้องกำหนดค่า API Key ที่ได้จากเว็บ Bintray

ซึ่งไฟล์ local.properties นั้น โดยปกติแล้ว จะไม่ถูกรวมไปกับ Git Repository เมื่อ Push ขึ้น Git Server ก็จะไม่ติดไปด้วย จึงใช้เก็บข้อมูลสำคัญ ๆ ไว้ที่นี่

เมื่อเสร็จแล้ว ลอง Sync Gradle ดูเลยครับ ถ้าผ่านเรียบร้อยดี ก็พร้อมที่จะ Publish ขึ้น Bintray แล้วววว

 

Publish to Bintray

มาถึงช่วงสำคัญแล้ว ก่อนอื่น ให้ Sync Gradle และ Build Project เราให้เรียบร้อยก่อน แล้วเปิดแถบ Gradle projects (1) ขึ้นมา ไปยัง Tasks ของ Library จะมี publishing > bintrayUpload (2) เพิ่มเข้ามา สามารถคลิกขวา เพื่อ Run (3) ได้เลย ซึ่งก็จะแสดงผลการทำงานในหน้าต่าง Gradle Console ด้านล่าง

หน้าต่าง Gradle projects บน Android Studio
หน้าต่าง Gradle projects บน Android Studio

หรือจะไปรันคำสั่งบน Command line ก็ได้ ดังนี้

Command line
Command line

ถ้าเห็นคำว่า BUILD SUCCESSFUL ดังรูปด้านบน แสดงว่าเรียบร้อยแล้ว

ลองเข้าไปดูที่เว็บ Bintray ในส่วนของ Maven จะพบกับ Library ที่เราทำการ Publish ขึ้นไปแล้ว

Bintray หน้าแรก
Bintray หน้าแรก
Bintray ในส่วนของ Maven
Bintray ในส่วนของ Maven

ลองคลิกเข้าไปดูรายละเอียดต่าง ๆ และข้อมูลบางส่วน สามารถแก้ไขได้ด้วย

ข้อมูล Library ในแถบ General ของ Bintray
ข้อมูล Library ในแถบ General ของ Bintray

ในแถบ Files จะต้องเห็นไฟล์อย่างน้อย 4 ไฟล์ ดังนี้

ข้อมูล Library ในแถบ Files ของ Bintray
ข้อมูล Library ในแถบ Files ของ Bintray

ตอนนี้ Library เรา ก็พร้อมที่จะนำขึ้นไปยัง jCenter แล้วล่ะ

 

Link to jCenter

สำหรับการนำ Library ขึ้นไปยัง jCenter นั้น หลังจากเรานำขึ้นไปที่ Bintray เรียบร้อยแล้ว ก็แค่คลิกที่ปุ่ม Add to JCenter ซึ่งอยู่ในแถบ General

ปุ่ม Add to JCenter ในแถบ General ของ Bintray
ปุ่ม Add to JCenter ในแถบ General ของ Bintray

เมื่อคลิกแล้ว ไปนอนเล่นสักตื่น เพราะเราต้องรอให้ทีมงานตรวจสอบก่อนในการ Publish ครั้งแรก ถ้าเรียบร้อยแล้ว จะมีข้อความแจ้งให้ทราบ (จากรูปด้านล่าง ผมรอประมาณ 2 ชั่วโมง)

Message บน Bintray
Message บน Bintray

แค่นี้ก็เรียบร้อยแล้วครับ Library เราขึ้นไปอยู่บน jCenter เรียบร้อยแล้วล่ะ ลองใช้ Android Studio สั่ง Sync ดู ก็จะเจอแล้วล่ะ…

 

ในส่วนของการนำ Android Library ขึ้นไปยัง jCenter นั้น ก็มีเพียงเท่านี้ครับ แต่ยังไม่จบเพียงเท่านี้ เพราะบน Bintray นั้น สามารถนำ Library ของเรา ขึ้นไปยัง Maven Central ได้ด้วยนะ อ่านต่อกันได้เลยที่บทความตอน ขั้นตอนการ Publish Android Library ไปที่ Maven Central

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.