소개


안드로이드 어플리케이션은 클래스 파일, 레이아웃, 문자열 데이터, 해상도 별 이미지 등 수많은 데이터 조합으로 이루어져 있었다. 하지만 안드로이드가 발전하면서 새롭게 등장하는 앱들의 평균 사이즈 또한 증가하면서 사용자들이 용량이 큰 앱은 설치하지 않거나 설치 후에도 용량 확보를 위해 금방 삭제하는 현상이 증가하고 있다고 발표했다.



용량이 큰 앱은 다운로드와 설치 시간이 길고 업데이트 설치 비율이 낮아진다.


기존 안드로이드 앱 설치 방식은 모든 데이터를 시스템에 복사한다. 해상도 별 이미지, 제공하는 모든 국가별 문자열 데이터 등 모두 같이 설치한다. 해상도를 변경하거나 시스템 언어를 변경하지 않은 이상 현재 사용하는 설정 이외의 모든 데이터를 쓸모가 없어진다. 즉 사용자는 쓰지도 않는 이미지나 문자열 데이터를 앱 때문에 가지고 있는 것이다. 


안드로이드 개발팀은 이러한 단점을 보완하고자 새로운 앱 모델을 선보였는데 바로 앱 번들이다. 앱 번들은 구글 플레이 서비스에서 시스템이 사용하는 설정 데이터(해상도나 언어)만을 조합하여 앱을 설치하는 형태로 진행된다. 필요한 데이터로만 구성된 앱을 설치하기 때문에 앱 크기를 줄일 수 있고 다운로드, 설치, 업데이트 시간을 단축할 수 있게 된다.



좌측은 기존의 방식으로 모든 데이터를 가져와 설치한다.

우측의 경우 앱 번들에서 시스템 해상도, 언어, 아키텍처의 데이터만 가져와 설치한다.


이로 인해 같은 앱이더라도 기존 방식에 비해 최대 35%까지 앱 크기를 줄일 수 있게 된다. 그런데 만약 앱을 사용하다가 중간에 시스템 언어를 바꾸거나 해상도를 변경할 경우 새로 설치해야 하나? 답은 아니다. 언어나 해상도나 변경될 경우 구글 플레이 서비스가 인식하여 알아서 필요한 파일을 다운로드한다. 때문에 시스템 설정이 변경되어도 재설치 없이 그대로 사용할 수 있게 된다.


앱 번들은 Split APK 방식으로 설치하기 때문에 구글 플레이 서비스에서 앱 번들에서 필요한 데이터만 조합한 뒤 재-서명 과정을 거치게 되는데 이를 위해 개발자 키가 개발자 콘솔에 등록되어야 한다. 다만 보안 문제는 걱정할 것이 없는 이유가 구글에서 개발자 키를 자신들이 사용하는 구글 키와 동일한 저장소에 보관한다고 하였기 때문이다.


구조 및 사용법


앱 번들은 안드로이드 스튜디오 3.2 이상부터 사용 가능하다. 앱 번들을 사용하기 위해 기존 개발 구조가 크게 바뀌거나 추가할 필요는 없다. 간단하게 APK로 서명하던 것을 Bundle 형태로 서명하면 된다. Bundle로 빌드 시 기존 APK 파일 형태가 아닌 AAB(Android App Bundle)로 배포되며 APK와 다른 구조를 가지게 된다.



출처

https://developers-kr.googleblog.com/2018/05/google-io-2018-whats-new-in-android.html

https://developer.android.com/guide/app-bundle/

https://www.youtube.com/watch?v=QdoEcfibGs&list=PLWz5rJ2EKKc8WFYCR9esqGGY0vOZm2l6e&index=15

by JamesY 2018. 11. 12. 23:36

소개


웹사이트에서 계정 또는 개인 정보 조회를 위해서는 본인 인증 과정을 거쳐야 한다.


공인인증서, 이메일, 핸드폰, 힌트 등 다양한 방식의 인증 방식이 존재하는데


이 중 핸드폰 인증은 본인 명의의 핸드폰으로 문자메세지를 전송해 메세지 내


존재하는 인증 번호를 화면에 입력하는 인증 과정을 거친다.


한두번이야 직접 입력할 수 있지만 일정 횟수를 넘어가면 짜증이 난다.


거의 그럴일도 없겠지만 간혹 반복해야 하는 경우가 생기는데 이로 인해 발생하는 짜증을


조금 덜어내고자 안드로이드 앱과 프로그램을 개발하였다.


소켓 기반으로 작성되었고 한 개의 서버는 한 개의 기기(스마트폰)만 연결 가능하다.


때문에 가장 먼저 연결하는 기기만 사용 가능하며 혹시 모를 외부 기기 접속을 방지하기 위해


간단한 인증도 가능하다. 또한 서버에서 직접 접속한 기기를 끊을 수도 있다.


Copy Pack.zip


위 압축 파일에는 윈도우 실행 프로그램과 안드로이드용 설치 파일이 있다.


아래는 소스 코드이며 Checksum도 존재하니 의심스러울 경우 확인 가능하다.


서버 프로그램 소스 코드 (Java)

https://github.com/Hot6ix/CopyServer


안드로이드 앱 소스 코드 (Kotlin + Java)

https://github.com/Hot6ix/CopyClient



주의 사항


  • 공공에서 제공하는 네트워크 접속 후 사용하는 것을 권장하지 않습니다.
  • 추가 설정 시 외부에서도 접속은 가능하지만 인증번호는 노출 시 위험한 정보이므로 같은 네트워크 안에서만 사용하는 것을 권장합니다.
  • 개발자는 프로그램 사용으로 인해 발생하는 피해를 책임지지 않습니다.


간단 사용 방법


서버 프로그램


실행 시



아이콘 오른쪽 클릭 시


가장 위쪽의 IP(192.168.1.23)를 기억해두자


IP는 컴퓨터마다 다르므로 직접 확인




클라이언트 프로그램


앱 실행 시 (권한 허가 필수)



IP 메뉴를 눌러 아까 기억해둔 IP를 입력



IP 입력 후 연결하기를 누르면 다음과 같이 연결되었다고 뜬다.




연결되었다고 뜰 경우 끝난다.


테스트로 자신한테 숫자를 포함한 메세지를 보내면 PC에 인증번호가 복사되었다고 메세지가 뜰 것이다.


메세지가 뜬 후 Ctrl + V 를 눌러 복사해보면 숫자가 복사된 것을 알 수 있다.



기타 설정


- 서버 프로그램


첫 실행 시 같은 폴더에 설정 파일인 setting.ini 파일을 생성한다.


설정 파일은 비밀번호, 포트, 문자 허용 여부를 수정할 수 있다.


비밀번호(password)의 기본 값은 빈칸으로 인증 과정을 거치지 않느다.


인증을 추가하려면 원하는 비밀번호를 입력하면 된다.


다만 비밀번호는 별도로 암호화되지 않고 또한 통신 과정에서도 plain text로 교환한다.


port는 앱과 서버가 통신하기 위한 통로로 특별한 경우가 아닌 경우 그대로 둘 것을 권장한다.


allowCharacter는 문자 허용 여부로 앱으로부터 받은 데이터 내 숫자아 아닌 문자가 포함되있을 경우


복사할지 말지 결정하는 값으로 false는 복사하지 않고 true 변경 시 복사한다.


설정 파일을 수정/저장 뒤 메뉴 중 서버 재시작을 누르거나 직접 프로그램을 재시작하면 적용된다.



- 클라이언트 앱


부팅 시 연결은 부팅 시 자동으로 서버와 연결할지 결정하는 옵션이다.


필터는 받은 문자메세지에서 인증번호를 추출하는 필터로 정규 표현식(Regex)를 사용하기 때문에


좀 더 정확한 필터링을 원할 경우 수정할 수 있다.


IP와 Port는 서버 프로그램을 실행 중인 기기와 맞춰주면 된다.


비밀번호의 경우 위의 설정 파일에서 비밀번호를 설정한 경우 입력해주면 된다.


by JamesY 2018. 10. 25. 17:17

Oreo 버전부터는 일반적인 Background 서비스를 사용하기 까다로워 졌다.


일단 서비스 실행 후 앱이 보이지 않거나 (액티비티가 화면에 나오지 않는 등) 


Foreground 서비스를 사용하지 않거나


IME, 배경화면 서비스, 알림 리스너, 음성 또는 텍스트 서비스 중 하나를 사용하지 않는 이상


서비스는 오래가지 않아 종료된다.


Foreground 서비스는 서비스 실행과 동시에 알림(Notification)을 보여주어 사용자가 서비스가 동작 중이라는 것을 인지시켜 주며 실행을 유지한다.


- Foreground 서비스를 실행

startService(Intent(context, Service::class.java))

- 서비스 내에서 Foreground 실행 함수를 호출해야한다.

startForeground(FOREGROUND_ID, notification)

이렇게 사용하면 서비스는 알림을 띄우며 동작하게 된다.


이후 서비스를 종료하기 위해서는 서비스 클래스 내에서 stopSelf() 함수를 호출하거나


외부에서 context.stopService(intent)를 호출하면 된다.


종료하는 과정에서는 알림 역시 제거된다. 하지만 알림을 제거하지 않고 서비스를 종료하기 위해서는 클래스에서 또는 클래스 내에서 onDestroy 함수에서 

stopForeground(Service.STOP_FOREGROUND_DETACH)

를 추가하면 된다.


주의해야할 사항은 위 함수는 Nougat(API 24)이상부터 사용가능하다.


또한 boolean값을 받는 같은 함수가 존재하는데 false를 주어도 서비스 종료 시 알림이 제거된다.

by JamesY 2018. 10. 23. 22:56
| 1 2 3 4 ··· 8 |