상세 컨텐츠

본문 제목

React-native-sound 가 Release build에서 동작하지 않을 때

개발 이야기/React-Native

by 리치윈드 - windFlex 2020. 3. 11. 19:05

본문

반응형

 

react-native로 어플리케이션을 개발함에 있어서, 다양한 모듈들을 import하여 사용한다. 

어플리케이션을 만들다 보면, 사운드의 중요성을 알게 되는데, 이 때문에 개발의 마지막 쯔음에 가면 사운드 효과를 넣기 마련이다. 

Reat-native에서 사운드를 가장 쉽게 접근하는 방법은, react-native-sound를 사용하는 것이 가장 쉽게 접근하는 방법이라 하겠다. 

 

react-native-sound를 적용할 때, 버그 및 어려움을 제공하는 대표적인 예는,

1) resources (사운드 파일)의 위치가 정확하지 않을 때,

2) resource 파일에 대문자나 특수문자가 포함되어 있을 때,

3) resource 파일의 중복이 발생할 때,

4) 초기화 또는 release() 처리하지 못할 때 ==> unstable

 

이정도가 대표적인 예이다. 

나는 이런 경우를 대부분 겪어 봤고, 문제해결을 했왔었다. 

 

그러다가, 오늘 크나큰 또다른 문제를 만났는데, 

어느날 갑자기 play store에 업데이트할 Release build 버전에서만 사운드 출력이 안되는 현상이었다. 

 

Debug Build에서는 잘 동작하는게 문제이다. 

별 짓을 다하고, 하루 종일 디버깅을 하다가 문제점을 발견하고 해결해서 다른 사람들은 이와같은 일을 겪지 않기를 바라며 글을 남기다. 

 

결론부터 이야기 하면, 코드나 리소스 차원의 문제가 아니었다. 

release build에서만 작동하는 앱최적화 모듈과의 충돌이라 하겠다. 

 

나는 이번 업데이트에서 앱최적화를 위해서, Proguard.rule 을 적용했는데,

Proguard가 적용되면서, 사운드 파일(android/app/src/main/res/raw/*)을 제거해 버린듯 한다. 

 

다음은 android/app/build.gradle 의 일부이다. 

proguard를 설정해 놓았다. 

 

buildTypes의 release 항목을 확인하면, 

minifyEnabled, proguard, shrinkResources 등을 기능을 사용하도록 설정해 놓을 것을 확인 할 수 있다. 

 

이런저런 곳을 찾아 돌아다닌 결과, 구글 개발자 사이트의 android studio 가이드에서 아래와 같은 글을 발견했다. 

 

https://developer.android.com/studio/build/shrink-code

이런 경우 해결 방법으로, proguard가 파일을 제거하지 않도록 xml 파일을 설정해 두면 된다. 

"android/app/src/main/res/raw/" 위치에 keep.xml 파일을 만들고, 다음과 같은 내용을 작성/저장한다.

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@raw/*"
    />

 

keep.xml을 작성 후 빌드 했을 때, 정상 동작을 확인 할 수 있었다. 

반응형

관련글 더보기

댓글 영역