Tag Archives: ngrok

안드로이드 키오스크(Kiosk) 앱 개발 (3/3)

앞의 과정(안드로이드 키오스크 앱 개발 1/3, 안드로이드 키오스크 앱 개발 2/3)에서 안드로이드 앱을 기기의 키오스크 모드로 동작시키기 위한 프로그래밍 방법을 살펴봤다. 여기에서는 앞의 과정으로 만든 앱을 실 기기에 배포하는 방법을 살펴본다. 앱을 프로비저닝해서 실 기기에 배포하는 방법(버전별 지원 방법 확인)으로 NFC와 QR 코드로 앱을 설치하는 두 가지 방법이 널리 쓰이고, 여기에서 QR 코드를 사용하는 방법을 살펴보자.

전체 과정은 앱을 빌드하고, 빌드된 APK를 웹 서버에 업로드하고, 이 정보를 바탕으로 QR 코드를 생성하고, 마지막으로 QR코드를 사용해서 프로비저닝된 APK를 실제 기기에 설치하면 된다. 아래에서 개별 과정을 살펴보자.

1. 앱 빌드

릴리즈 버전의 앱은 아래의 2가지 방법으로 빌드하면 된다.

1.1 안드로이드 스튜디오의 Build > Generate Signed Bundle/APK 메뉴를 선택해서 빌드한다.

1.2 터미널(Terminal) 탭에서 아래의 명령으로 APK를 빌드한다.

./gradlew aR 

2. 웹 서버 및 ngrok 툴 설정

이제 빌드한 앱을 다운로드할 수 있는 엔드 포인트를 만들어보자.

2.1 웹 서버

아래 주소에서 간단한 바로 실행할 수 있는 자바 웹 서버를 다운로드 한다.
http://www.jibble.org/miniwebserver/

그리고, 아래의 명령으로 자바 웹 서버를 실행한다.

java -jar SimpleWebServer.jar

2.2 ngrok 툴 설정

아래 주소에서 ngrok 툴을 다운로드 받아서 설치한다.
https://ngrok.com/

내/외부에서 쉽게 도메인을 치고 들어올 수 있게 지원하는 툴이다. 이 툴의 설명을 보면, “secure introspectable tunnels to localhost”로 안전하게 로컬호스트로 터널링을 지원하는 도구라는 것을 알 수 있다.

아래이 명령으로 외부에서 http(s)://xxxxx.ngrok.io 도메인으로 접속할 수 있게 한다.

ngrok http 80 


– 웹 서버와 ngrok 툴 설정화면


– 웹 브라우저로 ngrok 툴이 설정한 주소로 접근한 화면

3. QR 코드 생성

이제 앱을 프로비저닝하는 QR 코드를 만들어 보자. APK 프로비저닝하기 위해서 QR 코드에 입력해야 하는 값은 아래와 같은 같다.

{
"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME":"net.sjava.examples.kiosk/.KioskDeviceAdminReceiver",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION":"https://745b0d80.ngrok.io/app-release.apk",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM":"xxxx-xxxx-xxxxxx-xxxxxxxx_xxxx",
"android.app.extra.PROVISIONING_SKIP_ENCRYPTION":true,
"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED":true,
}

– QR 코드 입력값

위 코드에서 PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME 값은 패키지와 관리자 리시버 클래스 이름이다. PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION은 APK 파일을 다운로드 받을 주소이다. PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM은 APK의 CHECKSUM 값으로 아래의 명령을 사용해서 개발한 앱의 CHECKSUM 값을 구할 수 있다.

apksigner verify -print-certs app-release.apk | grep -Po "(?<=SHA-256 digest:) .*" | xxd -r -p | openssl base64 | tr -d '=' | tr -- '+/=' '-_'

PROVISIONING_SKIP_ENCRYPTION나 PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED은 이름에서 알 수 있듯이 암호화와 기존 시스템앱을 모두 사용할 수 있게 설정한다는 것이다.

위의 값으로 http://down-box.appspot.com/ 에서 위의 과정으로 만들어진 값을 사용해 아래와 같이 QR 코드를 쉽게 만들 수 있다.
위에서 샘플로 만들어본 QR 코드는 http://down-box.appspot.com/qr/GH1ayZg9 주소에서 확인할 수 있지만, 실제 기기에서는 동작하지 않는다.

4. QR 코드로 APK를 관리자 앱으로 설치

테스트할 수 있는 안드로이드 기기를 공장 초기화(Factory Reset)한다. 그리고, 첫 부팅 화면에서 시작 버튼이나 다른 버튼을 사용해서 안드로이드 기기를 시작하지 말고, 바탕 화면을 연속해서 6~7번 탭을 하면 QR 코드를 읽을 수 있는 앱을 실행하게 된다. 또는 안드로이드 7을 사용중인 경우에는 Wifi에 연결한 뒤에 QR 코드를 읽는 앱을 다운로드 해서 실행하는 경우가 있기에 조금 기다리면 QR 코드를 읽는 앱을 볼 수 있다.

이 앱을 사용해서 프로비저닝된 앱을 설치하면, 이 앱은 소유자 권한으로 설치가 되고 이 앱을 통해서 비교적 안전하게 키오스크 모드로 동작하는 앱을 배포할 수 있다.

Reference

https://developers.google.com/android/management/provision-device
https://github.com/googlesamples/android-testdpc