우찬쓰 개발블로그
키오스크에 안드로이드 스마트폰 앱 돌리기(타블렛 모드에서) 본문
필자와 같은 경우는 거의 없겠지만, 스마트폰용 안드로이드앱을 키오스크에 설치해서 전시하고 싶다는 요청이 들어왔다.
아마 타블렛 앱을 개발해 본 사람은 알겠지만 타블렛 용 안드로이드앱으로 모두 레이아웃 작업을 해주어야한다
그 이유를 간단하게 예를들어 설명해 보겠다.
필자가 작업한 키오스크 터치스크린은 1080x1920 이다. 사용한 보드는 ODROID c2이다.
그리고 타블렛을 작업해본 안드로이드 개발자라면 알겠지만, 무조건 density가 mdpi로 os세팅이 잡힌다.
그리고 설정에서 변경이 불가하다. 이게 우리가 가장 골머리를 앓는 부분이다.
그래서 타블렛 용 앱으로 레이아웃 작업할때 dp값도 전부 다르게 늘려줘야한다.
하지만 언제까지나 만드는 앱마다 전시를 위한 타블렛용 레이아웃을 노가다해서 작업하는 뻘짓을 하고 싶지 않으니 강제로 density를 늘려보자.
필자의 경우는 안드로이드 타블렛 버전의 기본 density가 160이었다.
그럼 먼저 개발자 모드를 켜고, 디버그 모드를 켜서 adb shell을 통해 density를 확인해보자
*중요*
adb shell이 뭔지 모른다면.. 공부해 보길 바란다. 사용방법이 어렵진 않지만 잘못 건드렸다간 os를 다시깔아야 할 수 있다...
adb shell에 접속했다면 다음 명령어를 쳐본다.
$ wm density
현재 denstity가 찍힐 것이다.
이 값을 변경하려면 wm density <변경할 값> 을 입력하면 된다.
만약 초기 값으로 돌아가고 싶다면, wm density reset 을 입력하면 된다.
필자는 density를 480으로 바꿨다. 이 값이 1920x1080에서 볼때 스마트폰에 가장 가까운 값처럼 보였다.
*정보*
이와 비슷하게 해상도도 변경 가능하다. 어차피 auto로 잡히니까 굳이 변경하지 않아도 되는데 행여나 성능 등의 문제로 해상도를 변경하고 싶다면 이렇게 하면된다.
$ wm size 1920x1080
물론 잘못건드렸다가 원상복구 못할수 있으니 주의 바람.
이쯤에서 사용한 안드로이드 종류에 따라 이미지가 좀 깨지거나 간격이 이상할 수 있다. 하지만 괜찮다. 앱을 실행해보자.
이미지가 깨지는가? 당연하다. 하지만 나머지의 크기는 스마트폰과 동일하게 보일것이다.
그럼 이제 깨지는 이미지를 안깨지도록 해보자.
아마 정상적인 개발자라면, 각 density에 따라서 이미지를 크기별로 넣었을 것이다.
하지만 타블렛용 이미지는 또 다르게 폴더를 구분해야한다.
보통 drawable-large-xxhdpi 등이나, drawable-xlarge-xxhdpi 등 처럼 구분을 하는데, 필자는 원래 타블렛 개발자가 아니여서 정확한 원인은 찾을 수 없었지만 제대로 인식하여 이미지를 찾지 못했다.
그리고 위와같은 폴더를 만들지 않으면 drawable-mdpi 에서 이미지를 강제로 가져다가 늘리기 때문에 이미지가 깨지는 것이다.
간단하게 문제를 해결하고 싶으면 타블렛용 git branch를 따로 따고, drawable-xxxhdpi를 제외한 이미지 폴더를 전부 삭제하자.
그리고나서 앱을 빌드에서 돌려보면 이미지가 깨지지 않는 것을 볼 수 있다.
아직 끝나지 않았다. 타블렛용 안드로이드는 mdpi만 거의 지원하다보니 보통은 density를 올려서 os를 재시작하면 navigation bar가 제대로 동작하지 않는 버그가 있다.
필자가 확인했을때는 4.4 kitkat버전에서는 무한 경고가 떳고, 6.0 marshmallow버전에서는 portrait 상태에서 navigation bar가 보이지 않았다.
여기서 필자는 6.0이었기 때문에 odroid 설정에서 navigation bar를 없애는 설정을 넣었고, 앱스토어에서 navigation bar를 하나 받아서 사용했다. 만약 독자가 odroid를 쓴다면 링크는 https://wiki.odroid.com/troubleshooting/how_to_remove_a_navigation_bar 이다.
그리고 여기서 끝이 아닌데, ODROID는 portrait로 os시작을 할수 없는 것처럼 보였다.
그래서 os가 켜지자마자 portrait로 돌리고 싶었는데, 기본 설정으로는 안되는 버그가 있는 것 같았고, 이것 또한 앱스토어에서 nova launcher라는 앱을 받아서 세로 모드로 고정하였다.
여기까지 왔다면 성공이다.
보통 android로 사용하는 board 마다 os환경이 다르고 버그가 있기 때문에 이 이상의 노력을 기해야 할수도 있다.
하지만 혹시나 도움이 될것 같아서 포스팅을 하게 되었다.
PS. 안드로이드앱을 디버그 모드로 돌렸을때 이유없이 크래시가 나거나 정상동작하던 것들이 정상동작 하지 않은 경우가 있었다. 필자의 추측으로는 같은 메소드 이름이 있을경우 왠지모르게 버그가 있는것 처럼 보였다. proguard를 적용해서 난독화 하니 해결되었다.
PS. 4.4 kitkat 버전에서 무한 경고가 뜨던 버그는, custom 할수 있는 보드가 아니라 이미 설치되어 나온 일체형이였기 때문에 custom해볼 기회가 없었다. 아마 6.0처럼 navigation bar를 강제로 없애면 되지 않을까 하는데 왠만하면 구버전 안드로이드는 지양하도록 하자..
PS. 라즈베리 파이에 안드로이드를 돌리려는 사람이 있다면.. 그만두자.. 너무 버벅이고 느리다.. 몇만원 더 투자해서 더 좋은 보드에 쓰길 권장한다. 필자가 사용한 ODROID c2도 9만원 정도 하지만 성능이 스마트폰처럼 좋진 못하다. ODROID c2는 체감상 갤럭시 4S 정도의 성능이 아닐까 싶다.
*추가 정보*
안드로이드로 부터 파생된 OS인 Lineage OS로 작업을 하면 더욱 깔끔한 처리가 가능하다.
필자는 후에 Odroid u4x로 보드를 바꿨고, Lineage OS를 깔고 density를 스마트폰과 동일하게 적용을 했다.
'안드로이드 > 안드로이드 개발' 카테고리의 다른 글
floating action button (fab) 이미지 강제로 늘리기 (0) | 2018.12.19 |
---|---|
CoordinatorLayout에서 NestedScrollView 내에 listview 이상작동 해결 (0) | 2018.12.18 |
안드로이드 key hash 생성 명령어 (맥 OS) (0) | 2018.12.10 |
안드로이드 스튜디오 편리한 단축키 (맥 OS) (0) | 2018.11.16 |
안드로이드에 라이브러리(aar) 추가하기 (5) | 2018.11.13 |