8.3 KiB
8.3 KiB
Android APK 빌드 가이드
사전 준비
1. 필수 소프트웨어 설치
Java Development Kit (JDK) 11
# 설치 확인
java -version
# 없으면 다운로드: https://adoptium.net/
Android Studio
- https://developer.android.com/studio 에서 다운로드
- 설치 시 "Android SDK", "Android SDK Platform", "Android Virtual Device" 선택
- SDK Manager에서 다음 설치:
- Android SDK Platform 34
- Android SDK Build-Tools 34.0.0
- Android SDK Command-line Tools
환경 변수 설정 (Windows)
시스템 환경 변수에 추가:
ANDROID_HOME = C:\Users\[사용자명]\AppData\Local\Android\Sdk
JAVA_HOME = C:\Program Files\Eclipse Adoptium\jdk-11.0.x-hotspot
Path에 추가:
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\tools\bin
%JAVA_HOME%\bin
PowerShell에서 확인:
$env:ANDROID_HOME
$env:JAVA_HOME
adb version
2. Node.js 의존성 설치
# 프로젝트 루트에서
npm install
APK 빌드 방법
방법 1: Debug APK (테스트용)
가장 빠르고 간단한 방법입니다.
# 프로젝트 루트에서
cd android
# Windows
.\gradlew assembleDebug
# 빌드 완료 후 APK 위치:
# android\app\build\outputs\apk\debug\app-debug.apk
방법 2: Release APK (배포용)
2-1. 키스토어 생성 (최초 1회만)
# android/app 디렉토리로 이동
cd android/app
# 키스토어 생성
keytool -genkeypair -v -storetype PKCS12 -keystore logistream-release.keystore -alias logistream -keyalg RSA -keysize 2048 -validity 10000
# 입력 정보:
# - 키 저장소 비밀번호: [안전한 비밀번호 입력 - 기억할 것!]
# - 키 비밀번호: [안전한 비밀번호 입력 - 기억할 것!]
# - 이름: [회사명 또는 개인명]
# - 조직 단위: [부서명]
# - 조직: [회사명]
# - 구/군/시: [도시명]
# - 시/도: [지역명]
# - 국가 코드: KR
2-2. Gradle 설정 파일 생성
android/gradle.properties 파일 생성 또는 수정:
# 기존 내용 유지하고 아래 추가
# Release Keystore 설정
LOGISTREAM_UPLOAD_STORE_FILE=logistream-release.keystore
LOGISTREAM_UPLOAD_KEY_ALIAS=logistream
LOGISTREAM_UPLOAD_STORE_PASSWORD=여기에_키스토어_비밀번호_입력
LOGISTREAM_UPLOAD_KEY_PASSWORD=여기에_키_비밀번호_입력
⚠️ 중요: gradle.properties 파일은 .gitignore에 추가하여 비밀번호가 Git에 올라가지 않도록 주의!
2-3. build.gradle 수정
android/app/build.gradle 파일에서 signingConfigs 섹션 수정:
android {
...
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
if (project.hasProperty('LOGISTREAM_UPLOAD_STORE_FILE')) {
storeFile file(LOGISTREAM_UPLOAD_STORE_FILE)
storePassword LOGISTREAM_UPLOAD_STORE_PASSWORD
keyAlias LOGISTREAM_UPLOAD_KEY_ALIAS
keyPassword LOGISTREAM_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
}
}
}
2-4. Release APK 빌드
# android 디렉토리에서
cd android
# Windows
.\gradlew assembleRelease
# 빌드 완료 후 APK 위치:
# android\app\build\outputs\apk\release\app-release.apk
방법 3: React Native CLI 사용
# 프로젝트 루트에서
npx react-native build-android --mode=release
# APK 위치: android/app/build/outputs/apk/release/app-release.apk
APK 설치 방법
1. USB 연결로 설치
# 디바이스를 USB로 연결하고 USB 디버깅 활성화
# 연결 확인
adb devices
# APK 설치
adb install android/app/build/outputs/apk/release/app-release.apk
# 기존 앱이 있으면 재설치
adb install -r android/app/build/outputs/apk/release/app-release.apk
2. 파일 전송으로 설치
- APK 파일을 이메일, 클라우드, USB 등으로 전송
- 안드로이드 기기에서 파일 열기
- "알 수 없는 출처" 허용 (설정에서)
- 설치 진행
3. QR 코드로 배포
APK를 웹 서버에 업로드하고 QR 코드로 다운로드 링크 공유
빌드 최적화
ProGuard 규칙 추가
android/app/proguard-rules.pro 파일:
# React Native
-keep class com.facebook.react.** { *; }
-keep class com.facebook.hermes.** { *; }
# WebView
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
# Geolocation
-keep class com.google.android.gms.location.** { *; }
# AsyncStorage
-keep class com.reactnativecommunity.asyncstorage.** { *; }
APK 크기 줄이기
android/app/build.gradle:
android {
...
buildTypes {
release {
...
minifyEnabled true
shrinkResources true
}
}
// ABI 분리 (선택사항)
splits {
abi {
enable true
reset()
include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
universalApk true
}
}
}
문제 해결
빌드 오류 발생 시
# Gradle 캐시 삭제
cd android
.\gradlew clean
# node_modules 재설치
cd ..
rm -rf node_modules
npm install
# Android 빌드 캐시 삭제
cd android
.\gradlew cleanBuildCache
# 다시 빌드
.\gradlew assembleRelease
"SDK location not found" 오류
android/local.properties 파일 생성:
sdk.dir=C:\\Users\\[사용자명]\\AppData\\Local\\Android\\Sdk
메모리 부족 오류
android/gradle.properties에 추가:
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
키스토어 비밀번호 분실
키스토어 비밀번호를 잊어버린 경우 복구 불가능합니다. 새로운 키스토어를 생성해야 합니다. (이미 Play Store에 업로드한 앱은 동일한 키스토어로 업데이트해야 하므로 주의!)
버전 관리
앱 업데이트 시 버전 변경:
android/app/build.gradle:
android {
defaultConfig {
...
versionCode 2 // 정수로 증가 (1, 2, 3, ...)
versionName "1.1.0" // 사용자에게 표시되는 버전
}
}
빌드 자동화 스크립트
Windows (build-apk.bat)
@echo off
echo LogiStream APK 빌드 시작...
cd android
call gradlew clean
call gradlew assembleRelease
if %ERRORLEVEL% EQU 0 (
echo.
echo ========================================
echo 빌드 성공!
echo APK 위치: android\app\build\outputs\apk\release\app-release.apk
echo ========================================
explorer app\build\outputs\apk\release
) else (
echo.
echo ========================================
echo 빌드 실패! 오류를 확인하세요.
echo ========================================
)
cd ..
pause
실행:
build-apk.bat
Google Play Store 업로드용 AAB
APK 대신 AAB (Android App Bundle) 형식으로 빌드:
cd android
.\gradlew bundleRelease
# AAB 위치: android\app\build\outputs\bundle\release\app-release.aab
AAB는 Google Play Store에 업로드하면 자동으로 각 기기에 최적화된 APK를 생성합니다.
체크리스트
빌드 전 확인사항:
- JDK 11 설치 확인
- Android SDK 설치 확인
- 환경 변수 설정 확인
- npm install 완료
- 키스토어 생성 (Release 빌드)
- gradle.properties 설정 (Release 빌드)
- 버전 코드/이름 업데이트
- 앱 아이콘 교체 (선택)
- 앱 이름 확인