본문 바로가기
Java

Java_ buildType 활용하여 debug, release 구분하기

by JunsC 2024. 10. 2.
728x90

처음에 React Native 를 했을때를 기억을 되살려보면서 안드로이드 디버그와 릴리즈모드를 구분해서 진행하기로 했다.

근데 React Native에서 모드를 구분했을때랑은 약간 다른 느낌을 받았다.

React Native는 크로스 플랫폼으로써 필요 부분만 설정해 놓은 점을 느꼈다면, AOS / IOS 각각의 설정들은 역시 네이티브라서 보다 섬세하고 세심하게 설정을 해야하는 작업을 해야했다.

 

땀이 주르륵....

우선 순차적으로 구분하는 방법을 설명해주겠다.

 

1.  Debug / Main / Release 폴더 구분하기

 

Debug / Main / Release 
이렇게 3가지 구조로 나눈다.

 

 

Debug / Release 에 values , json 파일들  넣어놨는데 저기에 해당된 데이터들은 모두 적용이 되고 나머지 해당되지 않는 데이터는 main 에서의 폴더 및 파일이 자동으로 채워진다. 그래서 반드시 Release 폴더안에 res/values/strings.xml 파일에 무조건 해당되는 데이터를 무조건 넣어야만 적용되는게 아니라 Release 폴더안에 안넣는다면 main 폴더안에 있는 strings.xml 파일 내용을 기준으로 자동으로 Release 버전에 적용이 되는 것이다.

 

 

 

위와 같은 사진을 보자면 applicationIdSuffix = ".debug" 라고 해놓아야한다.

그래야지 앱을 설치할때 패키지 이름이 다르게 인식되어져서 2개 따로 설치할 수 있다.

 

 

 

2.  google-services.json 데이터 수정

그리고 google-services.json 데이터 안에 

 

.debug 서픽스를 추가 시켜준다. 보통 Debug / Release 모드를 구분할때 우리는 파이어베이스 설정작업을 하곤 한다. 그래서 파이어베이스 설정작업을 한다면 google-services.json 파일을 안에 넣어야 하는데 그 파일 안의 내용은 우리의 패키지 이름을 인식하고 있다.

이걸 안해준다면 앱 실행시, 멀쩡히 작동했던 FCM 기능이 이상해지거나 앱 실행이 안될 수도 있다. 

그래서 반드시 이부분은 필수적으로 진행해야 한다 !!! 

 

패키지 내용의 코드들을 살펴보면 

{
  "project_info": {
    "project_number": "",
    "project_id": "",
    "storage_bucket": ""
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "",
        "android_client_info": {
            "package_name": "com.example.app.debug",
        }
      },
      "oauth_client": [
        {
          "client_id": "",
          "client_type": 1,
          "android_info": {
            "package_name": "com.example.app.debug",
            "certificate_hash": ""
          }
        },
        {
          "client_id": "",
          "client_type": 
        }
      ],
      "api_key": [
        {
          "current_key": ""
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "",
              "client_type": 
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

 

이렇게 나오는데 여기에서 

 

이 부분을 잘 살펴보면 com.example.app.debug 라고 되어있는것을 확인할 수 있다. 

이렇게 설정을 해야 디버그 모드에도 fcm 기능이 제대로 작동한다. 

Release 모드도 당연히 저렇게 바꾸어야 한다.

 

3.  Gradle buildTypes 설정 변경

그래서 Admob , <string name /> 등 디버그와 릴리즈가 분리되어 있는 고유 키값들은  Debug / Release 이 2개의 폴더에 넣어놓기만 하고 나머지 변수들은 일반 main 에 적용시킨 데이터를 자동으로 끌어와서 적용시켜준다.

 

 

Build.gradle 를 저렇게 설정을 해준다 .

 

그리고 실행시 빌드 유형을 구분해주고 실행한다면 작동이 될 것이다. 위와 같이 설정을 바꾸면서 디버그로 실행할지 , 릴리즈로 실행할지를 선택하면 된다. 

 

 

 

에서 살펴보면 buldConfigField 라고 되어 있고 "BASE_URL" 이라고 설정되어 있는데 이는

BuildConfig.BASE_URL

 

이런식으로 Debug 모드에서 설정해 놓은 URL 과 Release 모드에서 설정해 놓은 URL 을 자동으로 구분해주는 역할을 해준다.

이렇게 간단하게 각 모드를 구분하는 방법을 알아보았다. 

 

'Java' 카테고리의 다른 글

Java_ google social Login  (1) 2024.10.18
Java_ 지역변수 , 인스턴스 변수 차이  (0) 2024.09.12
Java_ runOnUiThread , view.post , handler 의 차이  (0) 2024.09.12
Java_ Rxjava blockingGet , subscribe ...  (0) 2024.08.25
Java_ Lazy Singleton  (0) 2024.08.25
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."