첫 안드로이드 앱 개발, 그 안에서 느꼈던 것들
앞서 포스팅했던 2017 고카톤에서 '이불킥'이라는 앱을 개발했는데요
아쉽게도 여러 난관에 부딛히며 완성을 못하고 말았죠ㅠㅠ
하지만 첫 실전 경험을 통해 배운 것은 많았기에
난생 첫 안드로이드 앱을 개발하면서
느꼈던 점들, 배웠던 점들, 그리고 어떤 기술이 사용 되었는지에 대해서
이야기 해 보겠습니다!
기획, 개발 준비 단계
1. 아이템 선정
- 완전히 새로운 아이템을 찾기란 어렵다
해커톤 전에 팀원끼리 아이디어 회의를 할 때,
'이건 정말 본 적도, 들어본 적도 없어!' 라면서 야심차게 내놓은 아이디어들이
구글 플레이 스토어에만 검색해 봐도 몇개씩 나오더라고요
정말 순수 내 머릿속에서 나온 아이디어였지만, 이미 세상은 아이디어 포화 상태랍니다ㅎㅎ
완전히 새로운 아이디어를 찾는다면 더없이 좋지만,
비슷한 아이디어가 없다면
우리 서비스만의 차별점을 찾는 것도 하나의 방법인 것 같아요
그리고 이쪽 분야에 있어서 저희보다 전문적인 기획자나 경영 분야, 마케팅을 담당할 팀원의 필요성도 느끼게 되었답니다.
2. 디자인과 레이아웃
- 레이아웃 구성 및 역할 분담이 선행, 디자인도 전문가의 도움이 중요
아무 것도 없는 백지상태에서 아이디어만 가지고
미적 감각이라곤 없는 컴과생 4명이서 시작하려고 하니
기본적인 레이아웃 구성부터 막막했어요
논의 끝에 fragment 레이아웃을 사용하고, 이미지 등은 구글링해서 가져오기로 했지만
아무래도 완성도는...디자이너의 손길이 닿는 편이 좋겠다는 생각이 들었어요
실제 런칭할 서비스를 개발하게 된다면 저작권 문제 때문에 구글링에도 한계가 있고
로고 등은 독창적으로 만들어야 하거든요
또, 사람이 앱이나 웹 등의 서비스를 처음 접했을 때 받는 인상은
디자인의 깔끔함이나 가독성에 큰 영향을 받잖아요.
웹이라면 부트 스트랩이라는 훌륭한 도구가 있지만, 앱은 그마저도 안 되는지라...ㅎㅎ
역할 분담에 있어서도, 생각지못한 문제가 있더라고요
저는 개발 시작과 동시에
누군가가 레이아웃을 역할 분담 중 하나로 맡아 만들면 될 거라고 생각했었는데
최소한 main layout과, main에서 각각의 기능 구현을 위한 layout으로의 연결 구성,
(이게 잡혀 있어야 중간 중간에 구동 확인이나 디버깅 할때 편리하기 때문이죠)
전체적인 레이아웃 구성이나 디자인 아이덴티티
(이건...보통 이렇게 하는 건지는 모르겠는데
저희는 4명이 각각 기능 구현을 위한 자신의 레이아웃을 독립적으로 만들었고,
완전히 까지는 아니어도
어느정도 버튼이나 리스트의 위치 등 간단한 레이아웃 구성은 각자 만들었기에,
디자인적 통일성이 중요했어요)
정도는 개발 전에 미리 구성해 놓아야 한다는 것을 느꼈어요
개발 과정
1. 안드로이드의 권한 문제...기능 추가에 앞서, 구현이 가능한 지?
안드로이드 permission 문제는 저에게 이번 개발에 있어 가장 큰 난관이기도 했고,
앱이 시간내에 완성되지 못한 가장 큰 이유이기도 했어요
"
기능 구성에 있어서 안드로이드 플랫폼 내에서 구현이 가능한 지,
background 상태 만으로도 실행할 수 있는지,
사용할 안드로이드 내장 앱이나 기능 사용에 대한 permission을 받아올 수 있는지
"
- 기능 구상을 할 때 미리 꼭 고려해야 하는 사항 같아요
아래 두번째 항목은 '기능 구성에 있어서 안드로이드에서 구현 가능한지'를 고려하지 못해서 생긴 문제네요.
2. Activity 없이 Broadcast Receiver가 동작하지 못한다
이것때문에 몇 시간을... 날렸었는데요ㅎㅎ
앱 내에서 기능 실행 버튼을 누르면
앱이 실행 중이 아닌 상태에서도 , 다시 앱을 켜서 종료하기 전 까지
(Background에서만 실행)
미리 등록 해 놓은 특정 번호에 대한 통화를 시도하면 메시지가 뜨면서 강제로 통화를 중단하는 기능을 구현하려고 했었어요
기능 실행 버튼을 누르면 background로 service가 실행 되고,
service에서 broadcast receiver를 이용해 통화 버튼을 누른 후 발신을 하려는 상태 (ACTION_NEW_OUTGOING_CALL)를 잡아내면 가장 상위에 있는 앱(전화 앱)을
강제 종료 시키는 방식으로 구현을 시도했는데,
manifest에 permission 코드를 넣어도 안되는 거에요ㅠ
구글링에 구글링을 거치다 찾아낸 해결 방안은
"Activity가 실행되지 않는 상태에서의 앱의 Broadcast Receiver는 작동하지 않는다"
-출처
였습니다. 안드로이드 3.1 부터면 꽤 오래됐네요ㅎㅎ
결국 안드로이드 플랫폼 내에서 구현할 수 없는 방법이었고, 다른 방법을 찾아야만 했습니다.
특정 앱(package명으로 식별) 실행 시 화면 overlay를 통해 화면의 전체 또는 일부를 막아버리는 방식을 택했으나, 원하는 대로 동작하지 않았어요 (전화 앱의 경우 T전화, samsung contacts 등 제조사마다 전화 앱이 다르기도 하죠)
3. fragment에서는 일반적인 layout과는 코딩에 있어 다른 부분이 있다
큰 문제가 되지는 않았던 부분인데요, (이유는 잘 모르겠지만) fragment로 layout을 구성한 경우
쓰이는 몇몇 코드 구성이 다르더군요
일단 제가 발견한 부분으로는
1. fragment에서는 content에서 'this'라는 객체를 사용하지 못합니다
예를 들어 새 intent를 만들 때
Intent intent1 = new Intent(현재의액티비티.this, 띄울 액티비티.class);
아쉽게도 여러 난관에 부딛히며 완성을 못하고 말았죠ㅠㅠ
하지만 첫 실전 경험을 통해 배운 것은 많았기에
난생 첫 안드로이드 앱을 개발하면서
느꼈던 점들, 배웠던 점들, 그리고 어떤 기술이 사용 되었는지에 대해서
이야기 해 보겠습니다!
기획, 개발 준비 단계
1. 아이템 선정
- 완전히 새로운 아이템을 찾기란 어렵다
해커톤 전에 팀원끼리 아이디어 회의를 할 때,
'이건 정말 본 적도, 들어본 적도 없어!' 라면서 야심차게 내놓은 아이디어들이
구글 플레이 스토어에만 검색해 봐도 몇개씩 나오더라고요
정말 순수 내 머릿속에서 나온 아이디어였지만, 이미 세상은 아이디어 포화 상태랍니다ㅎㅎ
완전히 새로운 아이디어를 찾는다면 더없이 좋지만,
비슷한 아이디어가 없다면
우리 서비스만의 차별점을 찾는 것도 하나의 방법인 것 같아요
그리고 이쪽 분야에 있어서 저희보다 전문적인 기획자나 경영 분야, 마케팅을 담당할 팀원의 필요성도 느끼게 되었답니다.
2. 디자인과 레이아웃
- 레이아웃 구성 및 역할 분담이 선행, 디자인도 전문가의 도움이 중요
아무 것도 없는 백지상태에서 아이디어만 가지고
미적 감각이라곤 없는 컴과생 4명이서 시작하려고 하니
기본적인 레이아웃 구성부터 막막했어요
논의 끝에 fragment 레이아웃을 사용하고, 이미지 등은 구글링해서 가져오기로 했지만
아무래도 완성도는...디자이너의 손길이 닿는 편이 좋겠다는 생각이 들었어요
실제 런칭할 서비스를 개발하게 된다면 저작권 문제 때문에 구글링에도 한계가 있고
로고 등은 독창적으로 만들어야 하거든요
또, 사람이 앱이나 웹 등의 서비스를 처음 접했을 때 받는 인상은
디자인의 깔끔함이나 가독성에 큰 영향을 받잖아요.
웹이라면 부트 스트랩이라는 훌륭한 도구가 있지만, 앱은 그마저도 안 되는지라...ㅎㅎ
역할 분담에 있어서도, 생각지못한 문제가 있더라고요
저는 개발 시작과 동시에
누군가가 레이아웃을 역할 분담 중 하나로 맡아 만들면 될 거라고 생각했었는데
최소한 main layout과, main에서 각각의 기능 구현을 위한 layout으로의 연결 구성,
(이게 잡혀 있어야 중간 중간에 구동 확인이나 디버깅 할때 편리하기 때문이죠)
전체적인 레이아웃 구성이나 디자인 아이덴티티
(이건...보통 이렇게 하는 건지는 모르겠는데
저희는 4명이 각각 기능 구현을 위한 자신의 레이아웃을 독립적으로 만들었고,
완전히 까지는 아니어도
어느정도 버튼이나 리스트의 위치 등 간단한 레이아웃 구성은 각자 만들었기에,
디자인적 통일성이 중요했어요)
정도는 개발 전에 미리 구성해 놓아야 한다는 것을 느꼈어요
fragment 레이아웃으로 구성 (하단바를 통해 fragment 선택)
개발 과정
1. 안드로이드의 권한 문제...기능 추가에 앞서, 구현이 가능한 지?
안드로이드 permission 문제는 저에게 이번 개발에 있어 가장 큰 난관이기도 했고,
앱이 시간내에 완성되지 못한 가장 큰 이유이기도 했어요
"
기능 구성에 있어서 안드로이드 플랫폼 내에서 구현이 가능한 지,
background 상태 만으로도 실행할 수 있는지,
사용할 안드로이드 내장 앱이나 기능 사용에 대한 permission을 받아올 수 있는지
"
- 기능 구상을 할 때 미리 꼭 고려해야 하는 사항 같아요
아래 두번째 항목은 '기능 구성에 있어서 안드로이드에서 구현 가능한지'를 고려하지 못해서 생긴 문제네요.
2. Activity 없이 Broadcast Receiver가 동작하지 못한다
이것때문에 몇 시간을... 날렸었는데요ㅎㅎ
앱 내에서 기능 실행 버튼을 누르면
앱이 실행 중이 아닌 상태에서도 , 다시 앱을 켜서 종료하기 전 까지
(Background에서만 실행)
미리 등록 해 놓은 특정 번호에 대한 통화를 시도하면 메시지가 뜨면서 강제로 통화를 중단하는 기능을 구현하려고 했었어요
기능 실행 버튼을 누르면 background로 service가 실행 되고,
service에서 broadcast receiver를 이용해 통화 버튼을 누른 후 발신을 하려는 상태 (ACTION_NEW_OUTGOING_CALL)를 잡아내면 가장 상위에 있는 앱(전화 앱)을
강제 종료 시키는 방식으로 구현을 시도했는데,
manifest에 permission 코드를 넣어도 안되는 거에요ㅠ
구글링에 구글링을 거치다 찾아낸 해결 방안은
"Activity가 실행되지 않는 상태에서의 앱의 Broadcast Receiver는 작동하지 않는다"
-출처
였습니다. 안드로이드 3.1 부터면 꽤 오래됐네요ㅎㅎ
결국 안드로이드 플랫폼 내에서 구현할 수 없는 방법이었고, 다른 방법을 찾아야만 했습니다.
특정 앱(package명으로 식별) 실행 시 화면 overlay를 통해 화면의 전체 또는 일부를 막아버리는 방식을 택했으나, 원하는 대로 동작하지 않았어요 (전화 앱의 경우 T전화, samsung contacts 등 제조사마다 전화 앱이 다르기도 하죠)
3. fragment에서는 일반적인 layout과는 코딩에 있어 다른 부분이 있다
큰 문제가 되지는 않았던 부분인데요, (이유는 잘 모르겠지만) fragment로 layout을 구성한 경우
쓰이는 몇몇 코드 구성이 다르더군요
일단 제가 발견한 부분으로는
1. fragment에서는 content에서 'this'라는 객체를 사용하지 못합니다
예를 들어 새 intent를 만들 때
Intent intent1 = new Intent(현재의액티비티.this, 띄울 액티비티.class);
에서 액티비티.this부분을 getActivity()로 바꿔 주어야 합니다.
2. service를 실행 시키는 방법도 다르네요
Activity에서
intent A = new intent(getContext(), service.class);
startService(A);
fragment에서
intent A = new intent(getContext(), service.class);
getContext().startService(A);
그외 버튼 실행 코드도 다른 부분이 있고 한데,
잘 정리해둔 분이 계셔서, 링크 걸어둡니다!!
4. 안드로이드 permission 강화로, 권한을 직접 얻어와야 한다
안드로이드 6.0(마시멜로)부터, 앱이 플랫폼의 permission을 얻어오는 과정이 까다로워졌다고 해요
기존에는 개발자가 manifest에 permission 코드만 넣어 두면
앱 설치 시 모든 권한 이용에 동의한 것으로 보고 권한을 이용할 수 있었는데
6.0부터는 앱 실행 시에 사용자로부터 직접 권한 승인을 얻어야 하고,
이 알림창이나 승인 받는 과정의 코드도 개발자가 직접 구현해야 해요.
접근성 권한 같은 경우, 앱에서 바꿔주지도 못하고 사용자가 직접 바꿀 수 있게
알림창을 통해 방법을 알려주고
설정->접근성 관련 탭까지 연결해줘야 하죠.
폰을 바꾸고 나서 사용자 입장에서도 귀찮은 부분이었는데
개발자 입장에서는 훨씬 더 귀찮네요 ㅎㅎ
하지만 악성 앱을 방지하기 위해 보안을 위해서라면 어쩔 수 없는 선택이라고 봐야죠.
안드로이드 권한에 대해 잘 설명해 주신 글이 있네요
안드로이드 권한 정보
안드로이드 권한 처리하기(획득)
앞에서 망했다고 했던 프로젝트 였지만, 결과적으로 배운것은 많았던 경험이었습니다.
개발은 정말 경험보다 중요한 것은 없는 것 같아요ㅎㅎ
다음번엔 경험을 발판삼아 더 나은 앱을 만들어 보겠습니다!
잘 정리해둔 분이 계셔서, 링크 걸어둡니다!!
4. 안드로이드 permission 강화로, 권한을 직접 얻어와야 한다
안드로이드 6.0(마시멜로)부터, 앱이 플랫폼의 permission을 얻어오는 과정이 까다로워졌다고 해요
기존에는 개발자가 manifest에 permission 코드만 넣어 두면
앱 설치 시 모든 권한 이용에 동의한 것으로 보고 권한을 이용할 수 있었는데
6.0부터는 앱 실행 시에 사용자로부터 직접 권한 승인을 얻어야 하고,
이 알림창이나 승인 받는 과정의 코드도 개발자가 직접 구현해야 해요.
접근성 권한 같은 경우, 앱에서 바꿔주지도 못하고 사용자가 직접 바꿀 수 있게
알림창을 통해 방법을 알려주고
설정->접근성 관련 탭까지 연결해줘야 하죠.
폰을 바꾸고 나서 사용자 입장에서도 귀찮은 부분이었는데
개발자 입장에서는 훨씬 더 귀찮네요 ㅎㅎ
하지만 악성 앱을 방지하기 위해 보안을 위해서라면 어쩔 수 없는 선택이라고 봐야죠.
안드로이드 권한에 대해 잘 설명해 주신 글이 있네요
안드로이드 권한 정보
안드로이드 권한 처리하기(획득)
앞에서 망했다고 했던 프로젝트 였지만, 결과적으로 배운것은 많았던 경험이었습니다.
개발은 정말 경험보다 중요한 것은 없는 것 같아요ㅎㅎ
다음번엔 경험을 발판삼아 더 나은 앱을 만들어 보겠습니다!


댓글
댓글 쓰기