Android Study

Android Project 1개 -> apk 3개 만들기(productFlavor)(빨간글씨필독)

85chong 2020. 7. 10. 17:52
728x90
반응형
SMALL

실제 서비스 되는 안드로이드 앱을 개발할때 개발용,운영용 앱을 구분지어, 용도에 맞게 나눠서 사용한다.
앱을 시작할때 앱에서 제어하는 방법 , 서버에서 제어를 해주는 방법 등이 있다. 앱에서 제어하는 방법을
시작할때 테스트와 라이브를 구분지어 시작하는 방법이다. 이 방법은 간편하지만 개발용 앱을 디바이스에 매번 설치 해줘야 하는 번거러움이 있다.
이때 또 다른 방법은 apk 나눠서 만드는 것이다.
즉 안드로이드 프로젝트 1개로 apk 2개 또는 3개... 이런식으로 만드는 것이다. 물론 동작하는것도 구분지어서 만들어준다.

1플젝 3apk 의 방법을 적어보겠다.
(아이콘은 나중에 별도로 글을 적을 예정임,코드를 전체 나누지 않고, 일부분만 나누는 방법을 적을 예정임)

 

◎ 전체적 코드 수정

- app > build.gradle > 코드 추가
- app > src > main > AndroidManifest.xml > 코드 수정
- app > src > 폴더 생성
(google-services.json 사용하는 프로젝트에 한해서는 굉장히 중요 코드 수정!!!!)
- google-services.json

 

◎ Step 1.app > build.gradle > 코드추가

...
android{
	...
	
	defaultConfig{
		...
	}
	
	buildTypes{
		...
	}
	
	flavorDimensions("mode")
	
	productFlavors{
		live{
			dimension "mode"
			manifestPlaceholders =[appLabel:"MYMYTEST_LIVE"]
		}
		alpha{
			applicationIdSuffix ".alpha"
			dimension "mode"
			manifestPlaceholders =[appLabel:"MYMYTEST_ALPHA"]
		}
		beta{
			applicationIdSuffix ".beta"
			dimension "mode"
			manifestPlaceholders =[appLabel:"MYMYTEST_BETA"]
		}
	}
}
dependencies{
	...
}

위의 flavorDimensions 부분과 productFlavors{ } 부분을 추가하면 된다.

!!!!! 이때 BuildConfig.FLAVOR 를 이용해 코드를 자동으로 나누는 경우가 있는데 이때 문제가 있음

준비를 완료하고, BuildVariants 를 이용해 나눈 flavor 코드를 사용하려고 하면 BuildConfig 의 import 가 사라짐

(어떤 문제인지는 아직 모름)BuildConfig 를 코드에 사용하여 BuildVariants 를 바꿀때마다 자동으로 나눠주는 코드를 입력하는 방법은 사용 하지 않는게 좋다. 구분 코드는 수동으로 따로 입력해놓고, 그냥 따로 flavor 는 나눠서 apk 나누는 용도로만 사용하는 것이 좋다. 쓸때없는데 시간을 허비한 경험으로 도움이 되었으면 하는 마음에 공유함

 

 

 

 

2. app > src > main > AndroidManifest.xml > 코드 수정

...
<manifest xmlns:anroid="http://schemas.android.com/apk/res/android"
	package="com.example.mymytest">
	
	<application
		...
		android:label="${appLabel}"
		...>
		
		<activity android:name=".MainActivity">
			....
		</activity>		

	</application>
	
</manifest>	

apk 이름을 지정하는 label 을 위와 같이 수정하여준다. 그래야 build에 맞게
apk 이름을 나누어 정 할 수있다.

 

3. app > src > 폴더 생성

 

위와 같이 폴더를 해당 위치에 생성 해 준다.(src 마우스오른쪽 버튼 > New > Directory)
이때 위에서 지정한 applicationIdSuffix 의 이름과 동일하게 지정해줘야 각각 연결이 된다.

 

 

4. (google-services.json 사용하는 프로젝트에 한해서는 굉장히 중요 코드 수정!!!!)

-  Firebase에서의 프로젝트 와 App프로젝트는 구분을 지어서 그에 맞는 google-service.json 파일을 넣어 주어야 한다.

 

예)

Firebase프로젝트 A 에 realApp 등록 되어있다.  

Firebase프로젝트 B 에 alphaApp , betaApp이 등록되어있다.

 

 

* 위 조건에서 예제의 폴더에 맞는 json 파일을 넣어주려면, 

 

- app > (Fireabase프로젝트A > 좌측메뉴 > 프로젝트개요 > 프로젝트 설정 > realApp > google-service.json 파일다운) 다운받은 google-service.json 복사 

 

- src > alpha > (Fireabase프로젝트 B > 좌측메뉴 > 프로젝트개요 > 프로젝트 설정 > alphaApp > google-service.json 파일다운) 다운받은 google-service.json 복사

 

- src > beta > (Fireabase프로젝트 B > 좌측메뉴 > 프로젝트개요 > 프로젝트 설정 > betaApp > google-service.json 파일다운) 다운받은 google-service.json 복사

 

이 부분을 해주지 않으면 앱이 동작하지 않는다.!! google-services.json 을 사용한다면 반드시 해야할 작업이다.

준비가 완료 되었으면 반드시
AndroidStudio menu 에 Build > Clean Project
AndroidStudio menu 에 Build > Rebuild Project
를 해서 코드를 재빌드 시켜준다.(안해주면 코드를 구분지을수있는 BuildConfig 가 생성되지 않을수있다)

 

!!!!! 위 작업을 진행하다가 간혹 원인을 알수 없는 에러가 발생할때가 있다 build 어쩌구 저쩌구 이때 프로젝트 소스에

작업중인 좌측 소스목록에서 app > build 부분을 강제로 삭제(이게CleanProject 와 같은것)(삭제 안되면 마우스 드래그로 밖으로 끄집어낸다.) 제거후 빨간 문구 무시하고 앱을 빌드 하면 정상 작동 할 것 이다.

 

 

 

 

 

5. apk 나눠서 실행하기

 

 

보이것과 같이 BuildVariants 를 누르면 이미지와 같은 그림이 나오고 빨간 부분을 누르면 본인이 추가했떤 코드 그대로
메뉴에 뜨게 된다. 우선 alphaDebug 를 선택해주고(release는 말 그대로 스토어에 올리거나 할때 선택해주고 사용하면 된다.), 준비가 되는동안 기다린다.
그리고 앱을 빌드하면 MYMYTEST_ALPHA 라는 이름의 앱이 생긴다. 그리고 betaDebug 를 선택해주고, 앱을 빌드하면 MYMYTEST_BETA 라는 앱이 또 생긴다.

6. 앱 내부에서 나눠주기 코드 나눠주기

...
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setcontentView(R.layou.activity_main);
		
		String strBuildType = BuildConfig.FLAVOR;
	
	}
...

위처럼 하면 strBuildType에 5번에서 얘기한 BuildVariants 값을 가져 올수있게된다.
이 값으로 코드를 나눠주면 된다.

 

 

 

!현재까지 여러가지 테스트를 한 결과, Flavor + CloudFireStore + Crashlytics 를 동시에 사용하면 

Flavor + CloudFireStore 이게 작동 안되거나,  Crashlytics 가 작동이 안된다. 버그인듯하다. 참고바람

 

 

-끝 -