Devahoy Logo
PublishedAt

Android

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

ขั้นตอนการ 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 โค๊ดตอนนี้ผมมีประมาณนี้

1
apply plugin: 'android'
2
3
android {
4
compileSdkVersion 19
5
buildToolsVersion "19.0.1"
6
7
defaultConfig {
8
minSdkVersion 11
9
targetSdkVersion 19
10
versionCode 1
11
versionName "1.0"
12
}
13
buildTypes {
14
release {
15
runProguard true
16
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
17
}
18
}
19
}
20
21
dependencies {
22
compile 'com.android.support:appcompat-v7:19.+'
23
...
24
compile fileTree(dir: 'libs', include: ['*.jar'])
25
}

ทีนี้ผมจะทำการเพิ่ม Signing Config เข้าไปครับ โดยเพิ่มแท็กไปดังนี้ โดยเป็นการคอนฟิคค่าต่างๆ เช่น ที่อยู่ไฟล์ keystore, User password และ KeyAlias ของ keystore ครับ

1
signingConfigs {
2
myRelease {
3
storeFile file("my-release-key.keystore")
4
storePassword "mypassword"
5
keyAlias "myalias"
6
keyPassword "anotherpassword"
7
}
8
}

ส่วนในแท็ก buildTypes() ก็ทำการเพิ่ม myRelease ที่เพิ่งจะสร้าง เข้าไปด้วย ได้เป็นดังนี้

1
buildTypes {
2
release {
3
runProguard false
4
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
5
signingConfig signingConfigs.myRelease
6
}
7
}

สุดท้าย โค๊ดใน build.gradle ทั้งหมดจะได้แบบนี้

1
apply plugin: 'android'
2
3
android {
4
compileSdkVersion 19
5
buildToolsVersion "19.0.1"
6
7
defaultConfig {
8
minSdkVersion 8
9
targetSdkVersion 19
10
versionCode 1
11
versionName "1.0"
12
}
13
14
signingConfigs {
15
myRelease {
16
storeFile file("my-release-key.keystore")
17
storePassword "mypassword"
18
keyAlias "myalias"
19
keyPassword "anotherpassword"
20
}
21
}
22
23
buildTypes {
24
release {
25
runProguard false
26
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
27
signingConfig signingConfigs.myRelease
28
}
29
}
30
}
31
32
dependencies {
33
compile 'com.android.support:appcompat-v7:19.+'
34
compile fileTree(dir: 'libs', include: ['*.jar'])
35
}

สุดท้าย กด Sync Now เพื่อ build gradle จากนั้นเปิด Terminal ใน Android Studio (อยู่ล่างๆ) พิมพ์คำสั่งดังนี้ เพื่อ generate apk file ./gradlew assembleRelease

ใน Windows ให้ใช้คำสั่ง

1
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 คราวนี้หมดปัญหา เรียบร้อย

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

Authors
avatar

Chai Phonbopit

เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust

Related Posts