실제 서비스 되는 안드로이드 앱을 개발할때 개발용,운영용 앱을 구분지어, 용도에 맞게 나눠서 사용한다.
앱을 시작할때 앱에서 제어하는 방법 , 서버에서 제어를 해주는 방법 등이 있다. 앱에서 제어하는 방법을
시작할때 테스트와 라이브를 구분지어 시작하는 방법이다. 이 방법은 간편하지만 개발용 앱을 디바이스에 매번 설치 해줘야 하는 번거러움이 있다.
이때 또 다른 방법은 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 가 작동이 안된다. 버그인듯하다. 참고바람
-끝 -
'Android Study' 카테고리의 다른 글
AndroidStudio res layout 하위 폴더 생성(파일 그룹화)시키기 (1) | 2020.08.26 |
---|---|
Android DataBinding(방법1) (0) | 2020.08.03 |
안드로이드 스튜디오 .jar / .aar 라이브러리 추가하는 방법(온라인,오프라인) (0) | 2020.07.08 |
Jdk 설치 , 환경변수 설정 (0) | 2020.07.07 |
App.Apk파일 -> Decompile (Window) (0) | 2020.07.07 |