Opendocs Logo

[Guide | App - Android] React Native Android Release 배포

하이브리드앱을 빌드하고 배포하는 과정을 정리한다.


> 작성일 : 2021-08-22
> OS : macOS Big Sur 버전 11.5
> CPU : Intel


<1> KeyStore 생성

cd {UserHome}/{AppPath}/android/app
keytool -genkey -v -keystore opendocs_music-release-key.keystore -alias opendocs_music_key -keyalg RSA -keysize 2048 -validity 10000



<2> 빌드설정

android/gradle.properties 파일에 환경변수 설정

OPENDOCS_MUSIC_RELEASE_STORE_FILE=opendocs_music-release-key.keystore
OPENDOCS_MUSIC_RELEASE_KEY_ALIAS=opendocs_music_key
OPENDOCS_MUSIC_RELEASE_STORE_PASSWORD=*****
OPENDOCS_MUSIC_RELEASE_KEY_PASSWORD=*****

android/app/build.gradle 파일에 release 환경 설정

android {
...
   signingConfigs {
      debug {...}
      release {
            if (project.hasProperty('OPENDOCS_MUSIC_RELEASE_STORE_FILE')) {
                storeFile file(OPENDOCS_MUSIC_RELEASE_STORE_FILE)
                storePassword OPENDOCS_MUSIC_RELEASE_STORE_PASSWORD
                keyAlias OPENDOCS_MUSIC_RELEASE_KEY_ALIAS
                keyPassword OPENDOCS_MUSIC_RELEASE_KEY_PASSWORD
            }
      }
   }
   buildTypes {
      debug {...}
      release {
            ...
            signingConfig signingConfigs.release
      }
   }



<3> Android 빌드

cd {UserHome}/{AppPath}/android
./gradlew clean
./gradlew cleanBuildCache
./gradlew assembleRelease
# permission denied 에러가 발생할 경우
chmod +x gradlew



<4> APK 확인

아래폴더에 apk 파일을 핸드폰에 옮겨 실행한다.

{UserHome}/{AppPath}/android/app/build/outputs/apk/release



<5> Fail Case

다음 유형으로 배포실패시 해결 방안을 정리한다.

<5-1> '> Task :app:mergeReleaseResource FAILED / Error: Duplicate resource'

IMG01

> Task :app:mergeReleaseResources FAILED
[drawable-xhdpi-v4/node_modules_reactnavigation_stack_src_views_assets_backicon] /Users/opendocs/_Work/_Development/source/opendocs/mobile/android/app/src/main/res/drawable-xhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png [drawable-xhdpi-v4/node_modules_reactnavigation_stack_src_views_assets_backicon] /Users/opendocs/_Work/_Development/source/opendocs/mobile/android/app/build/generated/res/react/release/drawable-xhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png: Resource and asset merger: Duplicate resources
아래 두 폴더에 리소스가 중복되어 나타나는 현상이다.
① /android/app/build/generated/res/react/release/
② /android/app/src/main/res/

① 폴더에 있는 파일들을 ② 폴더에서 삭제하도록 한다.
검색해보면  ② 폴더에 drawable* 를 삭제하라고 하지만 이와같이 할경우 생성된 Splash & Icon 이미지 등이 같이 삭제되어 버리니 불편하더라도 확인하여 삭제하도록 한다.

<5-2> '> Task :app:mergeReleaseResource FAILED / Error: Found item Style/SplashScreenTheme more than one time'

IMG02

> Task :app:mergeReleaseResources FAILED
/Users/opendocs/_Work/_Development/source/opendocs/mobile/android/app/src/main/res/values/styles.xml: Resource and asset merger: Found item Style/SplashScreenTheme more than one time

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> /Users/opendocs/_Work/_Development/source/opendocs/mobile/android/app/src/main/res/values/styles.xml: Error: Found item Style/SplashScreenTheme more than one time
react-native-splash-screen을 사용해 Splash Screen 자동 생성 하였을 경우 발생한 에러이다.
최초 생성시에는 발생하지 않으나 수정을 위해 자동 생성 명령을 재시도 하였다면 styles.xml 파일에 아래 와 같이 중복된 내용이 추가 된다. 삭제하고 다시 시도하자.


Tags : 리엑트 네이티브, RN 릴리즈, 릴리즈 배포, RN 빌드에러, 안드로이드 릴리즈



AD
ⓒ Opendocs. All Rights Reserved.