2023.12.27 작성
OS : macOs
개발환경 : Android Studio
개발언어 : Dart
프레임워크 : Flutter
처음 해보는 거라 시간 낭비를 많이 했다.
그래서 과거의 나를 구한다는 마음으로 적어본다.
우선 나는 출시 버전으로 APK 파일을 추출해야 했기 때문에 서명 키를 생성해야 한다.
서명 키 안 하면 나중에 원스토어나 플레이스토어에 올릴 때 서명 키 설정 안 했다고 다양하게(?) 지적한다.
안드로이드 스튜디오 터미널에 다음과 같은 명령어를 입력한다.
keytool -genkey -v -keystore /path/to/your_keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias your_alias
(참고)
📌 /path/to/your_keystore.jks
📌 your_alias
이 두 부분은 나만의 경로와 별명으로 설정해야 한다.
나 같은 경우에는 "/Users/사용자이름/keystores/key.jks" 이렇게 경로를 설정하였다.
- keystores는 내가 생성한 폴더명이다.
- key.jks는 내가 생성한 파일명이다.
위 명령어 실행 시 여러 정보(이름, 조직, 암호 등)를 입력하라는 메시지가 나타난다.
입력한 후 엔터를 누르면 'keystores' 폴더에 키스토어 파일(key.jks)이 생성된다.
안드로이드 폴더 안에 key.properties 파일 생성한다.
이 파일에는 키스토어 정보를 저장하는 것이다.
storePassword=키스토어 암호
keyPassword=키 암호
keyAlias=key
storeFile=키스토어 파일 경로
키스토어 생성 시 입력했던 정보를 위에 적어주면 된다.
경로 : android/app/build.gradle
build.gradle 파일을 열고 android 블록 내에 다음과 같은 코드를 추가한다.
상단 부분에
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
를 추가하고 (하단에 추가 했다가 오류 났음)
defaultConfig {} 아래에
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
를 추가해 준다.
여기서 빡침 포인트 ‼️ 🤬
signingConfig signingConfigs.release
맨 뒷부분에 무조건 .release로 되어있어야 한다.
난 모르고 .debug로 해놨다가 업로드 안 돼서 시간 낭비 오지게 했다...
이제 터미널에 아래와 같은 명령어를 입력한다.
flutter build apk --release
터미널에 이렇게 뜬다면 잘 생성된 것이다.
빌드가 완료되면, APK 파일은 build/app/outputs/flutter-apk/ 디렉토리에 생성된다.
이러한 과정으로 생성된 APK 파일은 배포하거나 테스트 장치에 설치할 수 있다.
추가로, APK 파일을 연속으로 하다 보면 추출했는데도 여전히 과거 파일일 때가 있는데
그럴 땐 터미널에
flutter clean
flutter pub get
위 명령어를 해주고 다시
flutter build apk --release
APK 파일을 추출하면 된다.
아 근데 요즘 플레이스토어는 App Bundle로 제출해야함! (원스토어는 apk 가능)
App Bundle도 해봤는데 귀찮아서... 나중에 올릴게...
아무튼 끝!