18 พฤษภาคม 2558

[Android Studio] วิธีการ Import Project จาก Eclipse ADT ไป Android Studio เวอร์ชัน 1.0 ขึ้นไป



        เดิมทีนั้นเจ้าของบล็อกไม่ได้อยากจะเขียนบทความนี้ซักเท่าไร เพราะว่ามีบทความที่อื่นเค้าทำกันไว้เยอะแล้ว ตั้งแต่สมัยตอนที่ Android Studio ออกมาใหม่ๆ

        แต่ที่เจ้าของบล็อกมาทำบทความนี้ เพราะว่าบน Android Studio ตั้งแต่ 1.0 ขึ้นไปนั้น มีการเปลี่ยนแปลงไปพอสมควรจึงทำให้ผู้ที่หลงเข้ามาอ่านที่ทำตามบทความของเวอร์ชันเก่าๆเกิดปัญหา ทำตามแล้วใช้งานไม่ได้ ดังนั้นเจ้าของบล็อกจึงมาเขียนบทความเรื่องนี้เพื่อที่จะให้เป็น Best Way สำหรับการย้ายโปรเจคจาก Eclipse ADT ไปยัง Android Studio นะครับ

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

ต้องมั่นใจว่าโปรเจคนั้นๆทำงานได้ปกติสุขบน Eclipse

        ปัญหาอย่างแรกที่เจอเลยก็คือ ผู้ที่หลงเข้ามาอ่านบางคนเอาโปรเจคมาจากที่อื่น แล้วกะจะเอามาเปิดใน Android Studio แต่กลับไม่เคยเช็คก่อนว่าเจ้าโปรเจคตัวนั้นมันทำงานบน Eclipse ได้ปกติสุขนะ?

        เพราะถ้าเป็นโปรเจคบน Eclipse แต่ทำงานไม่ได้ ก็อย่าคิดจะเอาไป Import เข้า Android Studio ให้ปวดหัวเลย ไปแก้ปัญหาให้มันทำงานบน Eclipse ให้ได้ก่อนนะ


สำรองไฟล์โปรเจคไว้ด้วยชุดนึง

        เผื่อมือไม้ลั่นกดผิดขั้นตอนแล้วไฟล์มีปัญหาหรือโปรแกรมมีปัญหา ก็จะได้ใช้ไฟล์เก่าที่สำรองไว้


กำหนด Android Studio ให้ใช้ Encoding สำหรับไฟล์ Java เป็น UTF-8

        ให้ตรวจสอบใน Eclipse ให้เรียบร้อยก่อนว่าโปรเจคของผู้ที่หลงเข้ามาอ่านนั้นได้กำหนด File Encoding เป็น UTF-8 หรือไม่ เพื่อป้องกันปัญหาย้ายไปเปิดใน Android Studio แล้วภาษาไทยในโค๊ดกลายเป็นภาษาต่างดาว



        และถ้าจะให้ดีก็ควรกำหนดใน Android Studio ให้ใช้เป็น UTF-8 ด้วย

ห้ามสร้างไฟล์ Gradle Build บน Eclipse เด็ดขาด

        สมัยที่ Android Studio เปิดตัวมาใหม่ๆ ในนั้นตอนนั้นจะใช้วิธีสร้างไฟล์ Gradle Build บน Eclipse โดยจะมีเมนูให้เลือกไปที่ Import... > Android > Generate Gradle build files ซึ่งเจ้า Eclipse ก็จะสร้างไฟล์ build.gradle สำหรับ Android Studio ขึ้นมาให้ แล้ว Android Studio ก็จะเอาไฟล์​ build.gradle ไปจัดการกับโปรเจคให้กลายเป็นโปรเจคของ Android Studio

        แต่บน Android Studio เวอร์ชัน 1.0 ขึ้นไป ไม่ต้องทำแล้ว เอาโปรเจคที่เป็นของ Eclipse มา Import ได้เลย ดังนั้นไม่ต้องไปเลือก Generate Gradle build files แล้ว มิหนำซ้ำอาจจะทำให้เกิดปัญหาจุกจิกจนทำให้ Import ไม่ได้ด้วยซ้ำ

เริ่มทำการ Import Project เข้าสู่ Android Studio

        สำหรับโปรเจคตัวอย่าง เจ้าของบล็อกก็คงไม่เอา Hello World มา Import หรอก เพราะแบบนั้นมันทำได้อยู่แล้ว แต่โปรเจคที่จะใช้เป็นตัวอย่างเป็นแอพที่เจ้าของบล็อกเคยทำไว้บน Eclipse แล้วตอนนี้ต้องการเอามาทำใน Android Studio เพื่อเขียนฟีเจอร์เพิ่มเติม

        โปรเจคตัวนี้อาจจะไม่ใหญ่มากนักเพราะเป็นแอพที่เขียนเล่นๆ แต่ขั้นตอนในบทความนี้เจ้าของบล็อกก็ได้ลองทำกับโปรเจคงานจริงๆของเจ้าของบล็อกแล้ว แต่ไม่สามารถเอามาเผยแพร่เป็นตัวอย่างได้ โปรดเข้าใจนะที่นี้ด้วยนะครับ ดังนั้นขอใช้เป็นโปรเจคที่ไม่ใหญ่มากแทน

        เริ่มจากเปิด Android Studio ขึ้นมาแล้วเลือกไปที่ File > New > Import Project...



        หรือถ้าเปิดหน้าต่าง Welcome อยู่ ก็ให้กดเลือกที่ Import Project (Eclipse ADT, Gradle, etc.)



        จากนั้นก็เลือกโปรเจคที่ต้องการ Import ซะ แล้วกดปุ่ม OK



        เลือกว่าจะให้สร้างโปรเจคสำหรับ Anroid Studio ไว้ที่ไหน เลือกเสร็จแล้วกดปุ่ม Next


        ถัดมาจะเป็นหน้าตั้งค่าสำหรับ Dependencies และ Module นิดหน่อย

        • Replace jars with dependencies, when possible - ถ้าโปรเจคนั้นๆมี Library ที่อยู่ในรูปของไฟล์ .jar ก็จะทำการเพิ่มเป็น File Dependencies ให้ทันที
        • Replace library sources with dependencies, when possible - ถ้าโปรเจคนั้นๆมีการอ้างอิง Library Project ตัวอื่นๆ ก็จะทำการเพิ่มเป็น Module Dependencies ให้ทันที
        • Create Gradle-style (camelCase) module names - ตั้งชื่อ Module โดยใช้รูปแบบ camelCase (เช่น MyAndroidModule ก็จะเป็น myAndroidModule)


        เจ้าของบล็อกแนะนำให้ติ๊กเลือกทั้งหมดนั่นแหละครับ แล้วกดปุ่ม Next หรือ Finish (ถ้ามี Library มันจะเป็น Next แต่ถ้าไม่มีมันจะกลายเป็น Finish)

        จากนั้น Android Studio ก็จะส่องหาว่าโปรเจคมีการเรียกใช้ Library หรือป่าว โดยดูจากไฟล์ project.properties


ปัญหาสุดคลาสสิค Import ไม่ได้เพราะมีปัญหากับ Library

        บ่อยครั้งจะเกิดปัญหา Android Studio เกิดมองหา Library ไม่เจอ อาจจะเพราะว่า Link Path ไม่ถูกต้อง (ตัวโปรเจคของ Library อยู่คนละที่กับโปรเจคหลัก) และเกิดข้อผิดพลาดดังนี้


        จากภาพตัวอย่างของเจ้าของบล็อกจะมีการแจ้งบอกว่าหาโปรเจคที่ชื่อว่า android-support-v7-appcompat ไม่เจอนั่นเอง

        ดังนั้นเจ้าของบล็อกอาจจะต้องใช้วิธีดิบๆหน่อย

        เปิดเข้าไปในโปรเจคที่มีปัญหาแล้วเปิดไฟล์ที่ชื่อว่า project.properties ขึ้นมาซะ




        จะเห็นว่าในนี้มีการ Reference Library เป็น Path ไว้ ซึ่งจริงๆแล้วปัญหานี้มาจากการที่ Path ดังกล่าวเป็นของ Windows จึงทำให้บน Mac มองไม่เห็นนั่นเอง (ระบุคนละแบบ)

        วิธีแก้ปัญหามีอยู่สองวิธี เลือกใช้ได้ตามใจชอบ

        • แก้ไขให้ Path ถูกต้องซะ 
        • ลบทิ้งไปซะ เดี๋ยวไป Import บน Android Studio ทีหลัง

        เจ้าของบล็อกแนะนำให้ลบทิ้งไปเลยครับ แล้วไปเพิ่มเอาทีหลังดีกว่า เพราะว่าการ Import แบบนี้ Library ที่ติดมาด้วยจะเป็นการ Import แบบ Module Dependencies ถ้าเป็นไปได้ก็อยากให้เปลี่ยนไปใช้เป็นแบบ Remote Dependencies แทน (ถ้ามันมี)



        ให้ออกจากหน้าต่าง Import Project บน Android Studio ก่อนนะครับ แล้วไปลบโฟลเดอร์ที่ Android Studio สร้างไว้ด้วย เพราะตอนที่กำหนดโฟลเดอร์โปรเจคสำหรับ Android Studio นั้น มันจะสร้างโฟลเดอร์ขึ้นมาให้ทันที และเมื่อ Import ไม่สำเร็จ มันก็ไม่ลบทิ้งให้ด้วยนะ ดังนั้นผู้ที่หลงเข้ามาอ่านจึงต้องเข้าไปลบเอง แล้วค่อยมาเริ่มทำการ Import ใหม่


        กลับมาเริ่ม Import Project ใหม่อีกครั้ง ก็ให้ทำตามขั้นตอนเดิมนั่นแหละ และคราวนี้จะผ่านฉลุย เพราะว่าไปแก้ไขให้ไม่มีการ Reference Library แล้ว โดยจะมีปุ่ม Finish ให้กด



        รอซักพักให้ Android Studio จัดการกับโปรเจคนั้นๆ ยิ่งโปรเจคใหญ่ก็ยิ่งนาน และถ้าคอมยิ่งกากก็ยิ่งใช้เวลานานเช่นกัน


        เมื่อ Import เสร็จแล้ว จะมีไฟล์ที่ชื่อว่า import-summmary.txt เปิดขึ้นมาเพื่อสรุปผลและคำแนะนำจากการ Import Project


อ๊ะๆ ยังไม่จบ อย่าลืม Library

        ก่อนหน้านี้เจ้าของบล็อกได้ลบ Reference Library Path ทิ้ง เพื่อให้การ Import ผ่านไป ดังนั้นเจ้าของบล็อกต้องมา Import Library เพิ่มในทีหลังด้วย

        เจ้าของบล็อกก็จะไปนั่งเช็คดูว่า Library ตัวไหนที่สามารถดึงจาก Maven ได้บ้าง ก็จะใช้เป็น Remote Dependencies แทน เพื่อให้อัพเดทได้สะดวกมากขึ้น ตัวไหนที่ไม่มีก็จะ Import แบบ Module Dependencies หรือ File Dependencies แทน


        สามารถดูวิธีการ Import Library บน Android Studio ได้ที่ [Android Dev Tips] รู้จักกับ Dependencies และการเรียกใช้ Library บน Android Studio

ตรวจสอบและตั้งค่าโปรเจคให้เรียบร้อย

        สำหรับโปรเจคที่เก๊าเก่าแล้วขุดมาปัดฝุ่นใหม่ ก็ช่วยอัพเดทเวอร์ชันใหม่ด้วย ไม่ว่าจะเป็น Build Tools หรือ Compile Version เพราะบางตัวจะแจ้งตอน Build ว่าไม่มี Platform สำหรับเวอร์ชันนั้นๆ


        ไม่ต้องไปกด Install missing platform(s) and sync project นะครับ เพราะมันจะไปสั่งดาวน์โหลด Platform เวอร์ชันนั้นๆมาติดตั้งใน Android SDK ซึ่งเปลืองทั้งพื้นที่เครื่อง เปลืองเนต และเปลืองเวลา

        แต่เจ้าของบล็อกจะใช้วิธีเปิด build.gradle ของ Module ตัวที่มีปัญหา แล้วเปลี่ยน Compile SDK Version ให้เป็นเวอร์ชันที่เจ้าของบล็อกได้ติดตั้งไว้ในเครื่องและเป็นเวอร์ชันใหม่ล่าสุด



        และเปลี่ยน Build Tools ให้เป็นเวอร์ชันล่าสุดที่ติดตั้งไว้ด้วยล่ะ (เช็คเวอร์ชันได้ใน Android SDK Manager ว่าได้ติดตั้งเวอร์ชันไหนไว้)



        เสร็จแล้วก็กดที่ปุ่ม Sync Project with Gradle Files ซะ


        เมื่อ Build เสร็จแล้วและไม่มีปัญหาอะไร (ถ้ามีก็จงอ่านในหน้าต่าง Messages แล้วแก้ไขซะ) ก็ลอง Run App ขึ้นมาเพื่อเทสแล้วเช็คการทำงานให้ครอบคลุมซะ จะได้มั่นใจว่าแอพสามารถทำงานได้ตามปกติ


สรุป

        • โปรเจคต้องทำงานได้บน Eclipse ADT
        • สำรองโปรเจคไว้ก่อน เพื่อความปลอดภัย
        • ถ้ามีภาษาไทยในโค๊ดให้ตรวจสอบว่าบันทึกไฟล์เป็น UTF-8 หรือไม่
        • ไม่ต้องสร้างไฟล์ Gradle Build บน Eclipse ADT
        • ลบ Reference Library Path ใน project.properties ของโปรเจค (และจำด้วยว่ามีอะไรบ้าง)
        • Import เข้า Android Studio
        • เพิ่ม Library ที่ลบออกไป โดยเพิ่มเข้าไปเป็น Dependencies แทน
        • ตั้งค่าเวอร์ชันของโปรเจคให้เป็นเวอร์ชันล่าสุด ร่วมไปถึง Build Tools ด้วย
        • ทดสอบการทำงานของแอพบนอุปกรณ์แอนดรอยด์


        ถึงแม้ว่าจะดูยุ่งยากในตอนที่ต้องมานั่งเพิ่ม Dependencies เข้าไปทีละตัว แต่นั่นก็เป็นสิ่งที่ควรทำ เพราะการใช้ Dependencies บน Android Studio จะช่วยให้จัดการกับ Library ได้ง่ายขึ้น โดยเฉพาะ Remote Dependencies ซึ่งจะง่ายต่อการอัพเดทเวอร์ชันใหม่ๆ และเจ้าของบล็อกก็ยังไม่เจอปัญหาใดๆจากการใช้วิธี Import Project แบบนี้

        แต่ถ้าผู้ที่หลงเข้ามาอ่านคนใดมีปัญหาระหว่าง Import ก็สามารถสอบถามได้ และบอกรายละเอียดขั้นตอนที่ทำอยู่ รวมไปถึงภาพประกอบของปัญหา เพราะถ้ามีภาพประกอบด้วยจะช่วยดูได้ง่ายขึ้นนะเออ




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

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