ก่อนที่เราจะทำการ signed application หรือลงทะเบียนใบรับรอง app ของเรา
เราจำเป็นจะต้องสร้างไฟล์ keystore ก่อน โดยในที่นี้เราจะใช้ keytool command
ซึ่งมีมาให้แล้วใน JDK ของ java
โดยใช้คำสั่งตามรูปแบบดังนี้
keytool -genkey -v -keystore Your_personal_file_title.keystore -alias Your_personal_alias -keyalg RSA -keysize 2048 -validity 10000
จากรูปแบบด้านบน สิ่งที่เราต้องเปลี่ยนคือ
Your_personal_file_title เปลี่ยนเป็นชื่อไฟล์ที่เราต้องการ และ
Your_personal_alias เปลี่ยนเป็นชื่อเรียก
ส่วน 10000 คือจำนวนวัน ที่เราต้องการให้สามารถใช้งานได้ 10000 คือ 1 หมื่นวัน
ประมาณ 27 ปี (10000 / 365)
*ปกติใช้ 25 ปี แต่เพื่อตัวเลขกลมๆ ก็ใช้เป็น 10000 ได้
ความสำคัญของ keystore กับการ signing application
ไฟล์ keystore จะเป้นไฟล์ที่ใช้สำหรับลงทะเบียนให้กับ app เราทุกครั้ง
ที่มีการอัพเดท app ใหม่ เพื่อใช้ใน google play store ดังนั้นไฟล์นี้จะหาย
ไม่ได้ เพราะถ้าไฟล์นี้หาย เราจะไม่สามารถ publish app เดิมได้
ดังนั้นเราจึงควร backup ไฟล์นี้ไว้ใน cloud storage อย่าง google drive,dropbox
หรือไว้ใน email เพื่อป้องกันกรณีเครื่อง PC ของเรามีปัญหาแล้วเกิดไฟล์หายไป
ไฟล์ keystore จะใช้ไฟล์เดียวกับทุก app หรือ ใช้หลายไฟล์ สำหรับแต่ละ app ก็ได้
บางคนป้องกันการสับสนก็ใช้ไฟล์เดียวกับทุกๆ app แต่กรณีนี้ถ้าไฟล์หาย app ทั้งหมด
ก็จะไม่สามารถ publish ได้
อันนี้เลือกตามความเหมาะสม แต่ตัวอย่างในที่นี้ เราจะใช้ 1 ไฟล์ต่อ 1 app
เริ่มสร้างไฟล์ keystore สำหรับ phonegap Project
เนื้อหาต่อจากตอนที่แล้ว
การ export apk ใน phonegap แบบต่างๆ
ตอนนี้เราอยู่ใน Project demoapk เราจะสร้างไฟล์ keystore ไว้ในโฟลเดอร์นี้
ด้วยคำสั่งดังนี้
keytool -genkey -v -keystore demoapk.keystore -alias demoapk -keyalg RSA -keysize 2048 -validity 10000
เมื่อ run คำสั่ง จะขึ้นให้เราใส่รหัสผ่าน ให้เราพิมพ์รหัสผ่านลงไป ให้จดไว้ห้ามหาย
โดยเวลาที่เราพิมพ์ จะไม่เห็นรหัสผ่านที่พิมพ์ (เหมือนพิมพ์ไม่ได้ แต่ที่จริงคือได้พิมพ์ไปแล้ว)
ให้เรากด Enter ไป แล้วจะขึ้นให้พิมพ์ซ้ำอีกครั้ง เสร็จก็กด Enter ไป
จากนั้นก็กรอกข้อมูลต่างๆ โดยประมาณตามรูป พอถึงขึ้นตอนสุดท้าย ระบบจะแจ้ง
ข้อมูลที่เรากรอก ให้เราพิมพ์ตอบไปว่า yes แล้วกด Enter
ระบบจะถามรหัสผ่าน ให้เรากด Enter ไปเลย ไม่ต้องพิมพ์อะไร คือใช้รหัสผ่านเดียวกับด้านบน
รูปแสดงการทำงานของการใช้งาน keytool สร้าง keystore ไฟล์ทั้งหมด เป็นดังนี้
และเราจะได้ไฟล์ keystore ในโฟลเดอร์ demoapk ตามรูป
การ signing application หรือลงทะเบียนไฟล์ apk
เมื่อเราได้ไฟล์ keystore แล้ว ต่อไปเราจะทำการลงทะเบียนไฟล์ apk
โดยก่อนอื่น ให้เราไป copy ไฟล์ CordovaApp-release-unsigned.apk
(อ้างอิงจากเนื้อหาตอนที่แล้ว)
ที่อยู่ในโฟลเดอร์
C:\phonegap\demoapk\platforms\android\ant-build
มาไว้โฟลเดอร์เดียวกับไฟล์ keystore ที่เพิ่งสร้าง ตามรูป
ต่อไปเราจะทำการ sign ไฟล์ที่เป็น unsigned apk ด้วยคำสั่ง jarsigner ซึ่งมีมาให้แล้วใน JDK ของ java
เช่นเดียวกับคำสั่ง keytool ด้วยรูปแบบดังนี้
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ชื่อไฟล์keystore.keystore ชื่อไฟล์unsigned.apk ชื่อเรียกkeystore
ในที่นี่ ชื่อไฟล์keystore คือ demoapk.keystore
ชื่อไฟล์unsigned.apk คือ CordovaApp-release-unsigned.apk
ชื่อเรียกkeystore คือ demoapk
คำสั่งในการ sign ของเราจะได้เป็น
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore demoapk.keystore CordovaApp-release-unsigned.apk demoapk
เมื่อเรา run คำสั่งและกดปุ่ม Enter จะขึ้นให้เรากรอกรหัสผ่านของ keystore
ให้เรากรอก (เวลากรอกจะไม่เห็นตัวอักษรแสดง) แล้วให้กดปุ่ม Enter
ระบบจะทำการลงทะเบียนไฟล์ CordovaApp-release-unsigned.apk ให้เราเรียบร้อยแล้ว
ขั้นตอนสุดท้าย เราจะใช้ zip align tool ทำการ optimize ไฟล์ apk
ด้วยรูปแบบคำสั่งดังนี้
zipalign -v 4 CordovaApp-release-unsigned.apk demoapk.apk
run คำสั่งแล้วจะพบว่า ไม่สามารถใช้คำสั่งนี้ได้ เนื่องจากไม่มีโปรแกรม zipalign
รูปแสดง zipalign ไม่ทำงาน
วิธีการคือ ให้เราพิมพ์ android เพื่อเปิด android sdk manager ขึ้นมา
(ถ้าเรารู้ path ของ sdk เราไม่จำเป็นต้องเปิด android sdk manager ก็ได้)
จากรูปจะเห็น SDK path ของเราอยู่ที่ C:\SDK\ (แต่ละเครื่องไม่เหมือนกัน)
ให้เราไปที่โฟลเดรอืดังกล่าวผ่าน window explorer แล้วไปที่ โฟลเดอร์ build-tools
แล้วไปที่โฟลเดอร์เวอร์ชั่น ตามรูปมีติดตั้งแค่เวอร์ชั่น 21.1.1
C:\SDK\build-tools\21.1.1
หากเรามีหลายเวอร์ชั่นที่ติดตั้งจะมีหลายไฟล์เดอร์ตมแต่ละเวอร์ชั่น
ให้เข้าไปดูว่ามีไฟล์ zipalign.exe หรือไม่
หากมีไฟล์ตามรูป ให้เราทำการ copy ไฟล์ zipalign.exe นั้นแล้วเอามาไว้ในโฟลเดอร์
C:\SDK\tools
เมื่อ copy มาแล้วจะได้ดังรูป
*ถ้าหาทุกโฟลเดอร์ของเวอร์ชั่นแล้วไม่มีไฟล์นี้ ให้เราทำการติดตั้ง package android
build-tools เวอร์ชั่น 20 ในโปรแกรม android sdk manager ก่อน เนื่องจากในเวอร์ชั่นนี้
จะมีไฟล์ zipalign.exe
หลังจากนั้นให้ปิด android sdk manager ไปและกลับมาที่ command prompt ของเราอีกครั้ง
แล้วใช้คำสั่ง
zipalign -v 4 CordovaApp-release-unsigned.apk demoapk.apk
แล้วกด Enter ใหม่อีกครั้ง
โปรแกรมจะทำงาน และได้ผลลัพธ์ดังนี้
และท้ายสุดเราก็จะได้ไฟล์ demoapk.apk สำหรับนำไปติดตั้ง
หรือ publish ใน google play store ได้เลย