Grusie 안드로이드 개발 기술 블로그

[Android] Debug / Release 분리해서 작업하기 본문

안드로이드 개발

[Android] Debug / Release 분리해서 작업하기

grusie 2024. 7. 10. 17:08
728x90
반응형
SMALL

지난 번에 추가로, Build Variants에 대한 얘기이다.

Release 버전을 테스트 할 수 있다는 것은 지난 번에 사용해보았으며, 주의해야 하는 추가 사항들이 좀 있어서 이번에는 Debug버전과 Release버전 앱이 따로 설치되도록 하면서 발생했던 문제점과, 처리과정에 대해 말해보겠다.

 

1. 파이어베이스의 google-services.json 처리

2. File - Provider 사용 시 중복 처리

3. 앱 이름 중복 처리

 

Build.gradle 일부

기본 세팅

- 지난 번과 다를 거 없으나 설명을 하자면,

debug / release를 구분하고 applicationIdSuffix를 사용하여 debug일 경우 패키지명이 변경되도록 수정하였다.

 

1. google-services.json

파이어베이스의 기능들을 사용하기 위해서는 google-services.json이 필수일 것이다.

google-services에는 각 기능별로 해당하는 패키지명이 들어있는데, 기본 세팅처럼 debug모드에 suffix를 붙혔다면, 이게 동작을 하지 않기 때문에, 빌드 과정에서 에러가 발생한다.

그렇다고, 같은 파일에 package_name을 두 개를 만들어야 하는가? 그건 아니다.

 

build.gradle 일부 중 클라이언트 계정 정보

안드로이드 스튜디오에서, 프로젝트로 보기 방식을 변경하고

app -> src 하위에 debug(buildTypes에 맞춰서) / release 폴더를 생성한 뒤 각각 관리하면 된다.

app에 있던 google-services.json을 복사해서, debug / relase 폴더에 넣고, 각각의 package명을 입력하면 된다.

(기존에 사용하던 app에 있던 것은 삭제해주자)

 

2. File-Provider

File-Provider를 사용하는 앱일 경우, Manifest에 등록을 해두어야 하는데, 이것도 같은 앱에서 중복 참고를 할 수 없기에 에러를 뱉어낸다.

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true" >

authorities에 기존에는 패키지명이 들어있었으나, 각 어플리케이션 아이디에 따라 다르게 처리하기 위해

${applicationId}.fileprovider로 변경해준다.

 

추가로 facebook등 다른 SDK를 사용할 때 Provider를 사용하는 경우에도 처리를 해주어야 한다.
<provider
    android:name="com.facebook.FacebookContentProvider"
    android:authorities="com.facebook.app.FacebookContentProvider${applicationId}"
    android:exported="true" />

여기까지 진행하면, release / debug 각각 두 앱이 설치가 될 것이다. 

 

3. 앱 이름 중복 처리

이제 같은 앱을 release / debug 버전으로 뽑아봤는데, 앱 이름이 동일해서 구분할 수가 없다.

매 번 기억을 해서 키는 것은 귀찮으니, 앱 이름 자체에서 표현을 해주면 좋을 것 같다.

우선 회사 앱의 이름은 현재 폰이 한글일 경우와, 영어일 경우에 따라 앱 이름이 변경된다.

매니페스트의 label을 @{label}로 지정한 뒤, build.gradle에서 라벨에 값을 replace해서 변경이 가능하나, ko, en에 따라 앱 이름을 변경하기 위해서는 기존 방식대로 @strings/app_name 형태로 가는 것이 좋다고 판단하였다.

 

google-services.json 처리를 위해 debug / release 폴더를 만들어뒀으니, 거기에 res폴더를 생성 후, values의 strings 파일을 만들어, app_name 값을 입력해두면 처리할 수 있다.

debug 버전일 때와, release 버전 ko - en 버전을 전부 작성해서 넣어두면 매니페스트 수정 없이 앱 이름이 변경된다.

main에 있는 strings에서는 app_name을 빼두자

안드로이드 스튜디오 파일탐색기

여기까지 전부 진행하면 프로젝트 구조는 이런식으로 처리가 될 것이다.

이 후에 debug / release 각각 빌드하면, 앱이 두개가 설치되는 것을 볼 수 있다.

 

결과가 제대로 적용된 모습

이제 각 버전들을 씹고 뜯으면서 테스트 할 수 있게 되었다.ㅎ

 

참고

https://holika.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%8C%81-Build-VarientsBuildTypes-ProductFlavors-%EA%B0%99%EC%9D%80-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A1%9C-%EB%91%90-%EA%B0%9C-%EC%9D%B4%EC%83%81%EC%9D%98-%EC%95%B1-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0

 

[안드로이드 팁] Build Varients: 같은 프로젝트로 두 개 이상의 앱 빌드하기(BuildTypes & ProductFlavors)

기본적으로, 하나의 패키지명은 하나의 고유한 앱을 의미한다. 그리고, 같은 패키지명을 가진 앱은 같은 기기에 설치될 수 없다. 그러므로, 같은 앱은 기기에 두 개 이상 설치할 수 없다. 하지만

holika.tistory.com

https://yongyi1587.tistory.com/42

 

[Android] Flavor 사용하기 (빌드 변형 구성)

Flavor을 이용한 1개의 소스로 여러가지 버전의 앱 만들기projectFlavors 를 사용하면기능은 같지만 이름만 다르게 한 앱, 무료/유료 버전의 앱을 구분, SDK 버전에 따른 앱이라던지하나의 소스로 여러

yongyi1587.tistory.com

 

후기

build쪽을 건드리는 것은 굉장히 무서웠으나, 이해를 바탕으로 작업을 하게 되니 생각보다 수월했던 것 같다. 개발을 하면서 계속해서 새로운 것들을 알게 되는 것은 정말 뿌듯했다. 나는 처음 알게 되었으나, 연차가 높은 분들은 이런 내용들을 전부 알고 있을거라는 생각을 하면, 사수가 꼭 있는 게 좋겠다는 생각을 계속 하게된다.

반응형
LIST