 
 วันนี้มาพูดถึงเรื่อง Android Studio กันครับ ปกติแล้วตัว Android Studio ใช้ Gradle ในการ build โปรเจ็ค ทำให้เวลาเราจะ export ไฟล์ apk ไปอัพโหลดลง Google Play นั้นมีความยุ่งยากนิดนึง (อันนี้เจอปัญหามากับตัวครับ เผื่อบางคนอาจจะมีปัญหาเหมือนกัน)
ปัญหาคือ ผมได้ทำการเปลี่ยนโปรเจ็คที่เคยทำบน Eclipse ย้ายฝั่งมาทำที่ Android Studio ทีนี้ผมจะอัพโหลดไฟล์ apk อันใหม่ขึ้น Google Play ก็เลยทำการ Export apk ตามปกติ ใน Android Studio โดยกดที่ Build => Generate Signed APK จากนั้นก็ ใส่ keystore แล้วก็จะได้ไฟล์ apk มา (นึกว่าจะไม่มีปัญหาอะไร)
แต่พอเวลาผมไปสร้าง Application ใหม่บน Google Play และกด อัพโหลดไฟล์ที่ได้ ปรากฎว่า ขึ้นข้อความแบบนี้

ได้ความว่า apk ไฟล์ของผม มันยังใช้ debug.keystore อยู่เลย อ้าว เป็นไปได้ยังไง ในเมื่อเมื่อกี้มันให้ใส่ keystore ของเราเอง? ปรากฎว่าได้คำตอบว่า default นั้น Android Studio จะทำการ build เป็นแบบ debug ครับ วิธีแก้ จำเป็นต้องแก้ไข build.gradle จนพบวิธี export ไฟล์ apk ใน Android Studio ครับ ทำได้ 2 วิธีครับ
อ้างอิงจากที่นี่ครับ Config Gradle
###วิธีที่ 1: สร้าง SigningConfigs
เปิด build.gradle โค๊ดตอนนี้ผมมีประมาณนี้
apply plugin: 'android'
android {    compileSdkVersion 19    buildToolsVersion "19.0.1"
    defaultConfig {        minSdkVersion 11        targetSdkVersion 19        versionCode 1        versionName "1.0"    }    buildTypes {        release {            runProguard true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'        }    }}
dependencies {    compile 'com.android.support:appcompat-v7:19.+'    ...    compile fileTree(dir: 'libs', include: ['*.jar'])}ทีนี้ผมจะทำการเพิ่ม Signing Config เข้าไปครับ โดยเพิ่มแท็กไปดังนี้ โดยเป็นการคอนฟิคค่าต่างๆ เช่น ที่อยู่ไฟล์ keystore, User password และ KeyAlias ของ keystore ครับ
signingConfigs {    myRelease {        storeFile file("my-release-key.keystore")        storePassword "mypassword"        keyAlias "myalias"        keyPassword "anotherpassword"    }}ส่วนในแท็ก buildTypes() ก็ทำการเพิ่ม myRelease ที่เพิ่งจะสร้าง เข้าไปด้วย ได้เป็นดังนี้
buildTypes {    release {        runProguard false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'        signingConfig signingConfigs.myRelease    }}สุดท้าย โค๊ดใน build.gradle ทั้งหมดจะได้แบบนี้
apply plugin: 'android'
android {    compileSdkVersion 19    buildToolsVersion "19.0.1"
    defaultConfig {        minSdkVersion 8        targetSdkVersion 19        versionCode 1        versionName "1.0"    }
    signingConfigs {        myRelease {            storeFile file("my-release-key.keystore")            storePassword "mypassword"            keyAlias "myalias"            keyPassword "anotherpassword"        }    }
    buildTypes {        release {            runProguard false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'            signingConfig signingConfigs.myRelease        }    }}
dependencies {    compile 'com.android.support:appcompat-v7:19.+'    compile fileTree(dir: 'libs', include: ['*.jar'])}สุดท้าย กด Sync Now เพื่อ build gradle จากนั้นเปิด Terminal ใน Android Studio (อยู่ล่างๆ) พิมพ์คำสั่งดังนี้ เพื่อ generate apk file ./gradlew assembleRelease
ใน Windows ให้ใช้คำสั่ง
gradlew.bat assembleReleaseหากมีปัญหา permission denied ให้ทำการเพิ่ม permission ด้วยคำสั่ง chmod +x gradlew
เมื่อ Generate เสร็จ ไฟล์ apk จะถูกสร้างที่ โฟลเดอร์โปรเจ็คของเรา/build/apk/ ครับ
###วิธีที่ 2: ใช้ GUI
วิธีนี้ง่ายมากครับ เพียงแค่ใช้ GUI ไปที่ Build Variants => แล้วจะมี menu drop down มาให้เลือก release

แต่วิธีนี้ไม่แน่ใจว่าต้องทำการ config ใน build.gradle ก่อนหรือไม่ครับ เพราะเห็นบางคนมีปัญหา ไม่มี release ให้เลือก ถ้ายังไม่ได้ config ในวิธีที่ 1 ก่อน แต่ผมทำวิธีที่ 2 ก็ไม่มีปัญหาแต่อย่างใดนะครับ
จากนั้นก็ทำการ export ไฟล์ปกติครับ Build => Generate File APK ตั้งค่าต่างๆ แล้วก็นำ apk ที่ได้ไปอัพลง Google Play คราวนี้หมดปัญหา เรียบร้อย
เข้าใจตรงกันนะ
- Authors
-    Chai Phonbopitเป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust 
 
  
 