[Tip | Android] ‘index.andriod.bundle’ is packaged correctly for release

빌드나 디바이스 테스트 중 아래와 같은 에러가 발생할 경우 해결방안을 정리한다.

Unable to load script. Make sure you’re either running a Metro server (run ‘react-native start’) or that your bundle ‘index.android.bundle’ is packaged correctly for release.


작성일 : 2021-08-23
OS : macOS Big Sur 버전 11.5

1> 에러화면


2> 해결방안

빌드시 asset(자원)을 관리해주는 bundle 쪽 문제로 보인다. 아래 명령을 통해 index.android.buldle 파일을 생성해주자.

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

3> 해결불가시 다음을 시도해보자.

3-1> 앱소스 폴더에 아래 폴더가 없다면 생성해준다.

{app Path}/android/app/src/main/assets

3-2> clean 옵션으로 이전 빌드시 잘못 생성된 파일을 정리한다.

cd {app Path}/android
./gradlew clean

[Tip | Android] emulator Not Operation

실행로그에는 문제가 없는 것으로 보이나 에뮬레이터가 빈화면(검정화면 또는 흰화면)으로 나오는 현상의 해결방안을 정리한다.


작성일 : 2021-08-22
OS : Windows 10
Android Studio : Ver 4.1.1
Emulator : Pixel 3 XL API 30

1> 실행로그


2> 에뮬레이터 화면


3> 해결방안

Android Studio > AVD Manager를 통해 에뮬레이터를 콜드부팅(Cold Boot) 한다.

3-1> 우측아래 Configure > AVD Manager

3-2> 에뮬레이터 선택 후 우클릭 > Cold Boot Now


4> 에뮬레이터가 실행되면 실행되던 프로세서를 재시작

[Setting | macOS] React Native Android Release 배포

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


작성일 : 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

> 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

> 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 파일에 아래 와 같이 중복된 내용이 추가 된다. 삭제하고 다시 시도하자.