[React Native] Release APK(AAB) 추출하기

jiveloper·2022년 12월 17일
2

React Native

목록 보기
10/13
post-thumbnail
post-custom-banner

오늘은 Release 모드로 APK 파일을 추출하는 방법에 대해 포스팅해보려 합니다! 😊

(Debug 모드로 APK 파일 추출을 원하시는 분들은 이전 게시글들을 참고해주시기 바랍니다.)


안드로이드 앱을 Play Store에 배포하기 위해서는 앱을 Relaese 모드로 추출해야 합니다.

지금 바로...!! Release 모드로 APK 파일을 추출하는 방법에 대해 알아보겠습니다!!! 🤩🤩



1. 안드로이드 서명 키 생성

Release 모드로 앱을 추출하기 위해서는, 안드로이드(Android)용 서명 키(Signing Key)가 필요합니다.

먼저 안드로이드 폴더로 들어갑니다.

cd android

아래에 명령어를 통해 안드로이드(Android)용 서명 키(Signing Key)를 발급합니다.

keytool -genkey -v -keystore [key-name].keystore -alias [key alias] -keyalg RSA -keysize 2048 -validity 10000
  • [key-name]과 [key alias]에는 원하는 이름을 사용하시면 됩니다! [key-alias]는 나중에 앱에 서명할 때 사용할 이름입니다.

  • 해당 키는 보안성이 좋아야 하기 때문에 기본값 1024 대신 탈취하기 보다 어려운 2048로 변경하였습니다.


위의 명령어를 입력하면 아래의 화면과 같이 여러 입력사항들이 뜹니다. 아래의 사항들을 다 입력하고, 마지막엔 y를 입력 합니다.


전부 입력을 하고 나면 프로젝트명/android/app 폴더에 [key-name].keystore 파일이 생성된 것을 확인할 수 있습니다.

(저는 [key-name]을 my-release-key로 설정하였습니다.)



2. 서명 키 설정

서명 키(Signing Key)가 생성되면 키를 설정해야 합니다.

키를 설정하기 위해, android/gradle.properties 파일에 아래의 코드를 추가합니다.

MYAPP_RELEASE_STORE_FILE=[key-name]
MYAPP_RELEASE_KEY_ALIAS=[key alias]
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android/app/build.gradle 파일에 아래의 코드를 추가합니다.

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

이제 추출 방법에 따라 방법이 나뉘는데요,

.apk 파일을 추출하고싶으시면 3-(1)를,
.aab 파일을 추출하고싶으시면 3-(2)를 봐주시면 됩니다!



3-(1) APK 파일 생성

먼저 안드로이드 폴더로 들어갑니다.

cd android

아래에 명령어를 통해 빌드합니다.

./gradlew assembleRelease

그랬더니 저는 아래의 오류 들이 발생하였습니다! 😡


에러 1)

Execution failed for task ':app:mergeReleaseResources'

해당 에러는 android/app/src/main/res/drawable- 파일들과 android/app/build/generated/res/react/release/drawable- 파일들이 중복 되어서 난 에러입니다.

프로젝트 루트에서 아래의 명령어를 입력하면 해결 됩니다.

rm -rf android/app/src/main/res/drawable-*

에러 2)

Execution failed for task ':react-native-stomp-websocket:verifyReleaseResources'

해당 에러는 프로젝트의 gradle 버전이 업그레이드되어 react-native-stomp-websocket 라이브러리가 패키징되지 않는다는 에러로 추정됩니다.


android 루트에서 아래의 명령어를 입력하면 해결 됩니다.

./gradlew app:assembleRelease

그리고 프로젝트명/android/app/build/outputs/apk/release의 경로에 가보면!

짜잔~~~👏👏👏 웬 오류들이 떠서 당황했지만 또 이렇게 하나 해결을 했답니다.🥺



3-(2) AAB 파일 생성

AAB란? Android App Bundle의 약자로, Play Store에 앱의 용량을 압축하여 업로드하기 위해 만들어진 번들 입니다.

이를 사용하면 앱의 모든 컴파일된 코드 및 리소스를 포함하며 APK 생성 및 서명을 Google Play에 맡기고 각 기기 설정에 맞게 최적화된 APK를 생성합니다.


그렇다면 또 파일 생성하는 방법에 대해 마저 알아보겠습니다!


먼저 안드로이드 폴더로 들어갑니다.

cd android

아래에 명령어를 통해 빌드합니다.

./gradlew bundleRelease

그리고 프로젝트명/android/app/build/outputs/bundle/release의 경로에 가보면!

짜잔~~~👏👏👏 마지막으로 aab 파일까지 이렇게 추출 완료하였습니다!!




Debug 모드로 apk 추출하고싶으시면 이전 포스팅 들을 참고해주세요!




참고

https://dev-yakuza.posstree.com/ko/react-native/android-running-on-device/

https://velog.io/@dody_/android-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B3%A0-%EA%B5%AC%EA%B8%80-%ED%94%8C%EB%A0%88%EC%9D%B4-%EC%8A%A4%ED%86%A0%EC%96%B4%EC%97%90-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80

https://stackoverflow.com/questions/55057989/react-native-android-build-faild-appmergereleaseresources

https://github.com/luggit/react-native-config/issues/330

profile
👩🏻‍💻 Clean Code와 Refactoring에 관심이 많은 개발자 입니다.
post-custom-banner

0개의 댓글