월급외 수익/프로그래밍

누구나 쉽게 안드로이드 앱 배포하기-건강앱 출시 리뷰(자작)

디마드 2020. 9. 20. 13:05

안드로이드 앱은 2개의 공식 언어가 있다. 자바, 코틀린이다. 자바는 수많은 개발자들이 사용해 온 언어로 더 이상 설명이 필요하지 않다. 반면 코틀린은 자바 코드의 일부 문제점을 개선하고 확정성과 소스 간결함을 추가해 앱 전용 언어다. 

약 1개월간 코틀린 언어와 안드로이드 스튜디오 환경을 알아가며 BMI앱을 만들었다. 키와 몸무게를 입력하면 BMI 수치를 보여주는 간단한 앱이다. 하지만 초기 개발은 만만치 않았다. 반응형 UI 구현을 위해서는 Constraint Layout에 대한 완벽한 이해를 필요로 했고, 그 위에 올라가는 컨트롤 간의 관계를 적절하게 설정해야 다양한 모바일에서 문제없이 돌아갔다.

1. 디자인 하기

 

 

디자인 화면에서 UI Layout과 컨트롤 간의 관계를 확인하고 조정할 수 있다. UI에서 세부 속성을 설정하는 게 번거로울 수 있다. 좀 익숙해진다면 텍스트 모드인 코드 레벨에서 XML을 직접 수정하는 게 더 효과적이다. 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:weightSum="5"
tools:context=".MainActivity">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="170dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="1dp"
android:background="@drawable/radius1"
app:layout_constraintVertical_weight="1"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp">

<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bmi_top1"
android:fontFamily="@font/baloo_thambi"
android:gravity="center_vertical|center_horizontal"
android:text="Body Mass Index"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:layout_weight="1"
android:textSize="42dp"
android:textStyle="bold|italic"
tools:ignore="MissingConstraints" />
....

2. BMI 로직 구현

코어 로직은 코틀린 파일 *.kt에 코딩한다. 자바처럼 클래스 파일로 구성되어 있다. 화면이 로딩될 때 onCreate() 콜백 함수를 호출하므로 주로 변수의 초기화가 이루어지고 주요 function을 호출하여 업무 로직을 처리한다. 배너 광고를 추가하기 위한 설정도 추가했다. 

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)

//firebase-admob 초기화
MobileAds.initialize(this,getString(R.string.admob_app_id))

// MobileAds.initialize(this)

//firebase-admob 배너
try {
mAdView = findViewById(R.id.adView)
val adRequest = AdRequest.Builder().build()
mAdView.loadAd(adRequest)
}catch (e:Exception){
Log.d("admob", "The adMob banner wasn't loaded yet. ${e.toString()}")
}

//firebase-admob 전면 광고
mInterstitialAd = InterstitialAd(this)
mInterstitialAd.adUnitId = getString(R.string.Interstitial_ad_unit_id)
mInterstitialAd.loadAd(AdRequest.Builder().build())
//end

// 전달받은 키와 몸무게
val height = intent.getStringExtra("height").toString().toDouble()
val weight = intent.getStringExtra("weight").toString().toDouble()

// BMI 계산
val bmi = weight / (height / 100.0).pow(2.0)

// 결과 표시
when {
bmi >= 30 -> {
resultTextView.text = "OBESITY" //비만
commentTextView.text ="You are heavily overweight. Try to exercise more and diet"
}
bmi >= 25 -> {
resultTextView.text = "OVERWEIGHT" //과체중
commentTextView.text = "You have a higher than normal body weight. Try to exercise more."
//과체중입니다. 하루 1만보 걸어보는건 어떨까요?
}
bmi >= 18.5 -> {
resultTextView.text = "NORMAL RANGE" //정상
commentTextView.text = "You have a normal body weight. Great job!"
// 정상 체중입니다. Good Job!
}
else -> {
resultTextView.text = "UNDERWEIGHT" //저체중
commentTextView.text = "You have a lower than normal body weight. You can eat a bit more."
//저체중입니다. 삼시세끼 잘 챙겨 드세요.
}
}
....

3. 테스트 애뮬레이터 돌려보기

애뮬레이터는 메뉴에서 AVD Manager 아이콘을 눌러 설정한다. Nexus 5.*이상을 선택하면 무난하게 돌아간다. 

 

 

 

테스트는 안드로이드 스튜디오에서 shift+F9 눌러 디버그 모드로 먼저 실행해본다. 코드 에러 추적 및 Step별 세부 확인이 가능하므로 디버그 모드를 추천한다. 크게 경고와 오류를 확인해야 한다. 오류는 반드시 해결해야 프로그램이 구동된다. 경고는 소스 최적화를 위해 해결하는 게 좋다. 

 

 

어느 정도 디버깅이 완료되면 shift+F10을 눌러 릴리즈 모드로 실행한다. 최종 배포되는 프로그램이므로 사용자 관점에 불편한 점이나 오류가 없는지 최종 확인한다. 

 

[BMI 구동화면]

 

 

4. 프로그램 배포 파일 만들기

구글 플레이 스토어에 배포하기 위한 파일을 만든다. 메뉴 Build-Generate Signed Bundle / APK...를 선택한다. 

 

 

두 가지 선택 옵션이 나오는데 첫 번째를 선택한다. 배포하는 데 큰 차이는 없고 기존 APK 보다 다운로드 파일크기가 작아졌다고 한다. 

 

 

5. 구글 스토어에 프로그램 배포 요청

프로덕션 메뉴에서 "새 버전만들기"를 클릭하면 단계별로 배포 작업이 진행된다. 

  • 배포 파일 업로드 및 버전 정보 등록
  • 정보 저장 및 기본정보 검토 수행
  • 최종 심사 요청 (짧게는 하루, 길게는 3일 이상이 걸린다. )

6. 구글 플레이 스토어에서 게시 확인

 앱 설치 및 구동을 확인한다. 가끔 설치 후 프로그램 로딩이 안 되는 경우가 있다. 애뮬레이터와 실 모바일 기기 환경 차이로 발생하는 경우가 있는데 자세한 원인은 파악하기 쉽지 않다. 구글 어넬리틱스를 이용하면 프로그램 오류 정보를 상세하게 볼 수 있어서 어디서 에러가 났는지 파악을 할 수 있다. 

그다음은 앱 홍보를 적절하게 해야 한다. 웬만한 앱들이 모두 출시된 상태라 내가 만든 앱을 찾기도 어려웠다. 인지도가 떨어지는 앱은 거의 다운로드되지 않는다. SNS나 온라인 카페를 통해 적절하게 홍보하는 것도 좋다. 

 

play.google.com/store/apps/details?id=com.guslang.bmicalculator

Lotto & BMI 측정기 - Google Play 앱

키와 몸무게를 입력하면 행운이 찾아온다! 당신의 대박 행운을 기원합니다. - BMI 측정 (키, 몸무게 입력) - BMI 결과와 Lotto번호 무료 제공 - BMI 재측정 기능 * BMI 기준 30 이상 : 비만 25 ~ 29.9 : 과체중

play.google.com