ขั้นตอนการ export ไฟล์ apk บน Android Studio


วันนี้มาพูดถึงเรื่อง 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 และกด อัพโหลดไฟล์ที่ได้ ปรากฎว่า ขึ้นข้อความแบบนี้

error debug keystore

ได้ความว่า 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

Build Release

แต่วิธีนี้ไม่แน่ใจว่าต้องทำการ config ใน build.gradle ก่อนหรือไม่ครับ เพราะเห็นบางคนมีปัญหา ไม่มี release ให้เลือก ถ้ายังไม่ได้ config ในวิธีที่ 1 ก่อน แต่ผมทำวิธีที่ 2 ก็ไม่มีปัญหาแต่อย่างใดนะครับ

จากนั้นก็ทำการ export ไฟล์ปกติครับ Build => Generate File APK ตั้งค่าต่างๆ แล้วก็นำ apk ที่ได้ไปอัพลง Google Play คราวนี้หมดปัญหา เรียบร้อย

เข้าใจตรงกันนะ

Chai

Chai Phonbopit : Developer แห่งหนึ่ง • ผู้ชายธรรมดาๆ ที่ชื่นชอบ Node.js, JavaScript และ Open Source มีงานอดิเรกเป็น Acoustic Guitar และ Football

บทความล่าสุด