4월 28일 Google Developers Summit 행사가 광화문 근처에서 있었다.




어제 행사에서는 웹쪽 세션이 부족하다는 의견이 있어서 그쪽을 대폭 늘렸다고


처음 두개 공통 세션에서는,

Progressive Web App과 안드로이드 N 에 대해서 다뤘다.


저의 관점, 그리고 관심사 위주로 적은 것이기 때문에 이날 내용중에 빠지거나 부실한 면이 있을 수 있습니다.

Progressive Web App

앱을 만들지 않고도 충분히 완성도 높은 웹앱을 만들수 있다는 내용이었다.

예제 사례로 http://www.flipkart.com/ 를 소개했다.

모바일 폰으로 위 사이트를 들어가보는걸 추천한다. 




백그라운드 작업과 notification 은 Service Worker (javascript) 을 통해서 수행이 된다고.

푸시는 web push 를 사용하면 된다.




하지만 아직 크롬, 파폭, 오페라 브라우저만 Service work 를 지원한다고


(그렇다면 아이폰쓰는 사람중에 크롬이 아니라 사파리를 쓰는 사람에게는 서비스를 못하는것 이라는건가...?)


Android N 새로운것들

올해 가을에 나올 예정인 N .. 지난번 만큼은 아니지만 그래도 큰 변화가 있었다(고 한다)

(당장 멀티 윈도우만 해도 큰데 ..)


이번 버전에서는 예전과 다르게 빠르게 개발과 프리뷰 버전이 공개 되었다고

공개하고 개발자들에게 피드백을 받아서 완성도를 더 높이고자 한다고 한다.


N preview 신청을 하면 OTA로 이것을 받아볼수 있다고,

실제 사용하는 메인 폰인경우 권장하지 않는다고 강조했다.

nexus 5x 를 사용하고 있지만(메인폰), 5 까지 지원했다면 더 많은 개발자들이 N 테스트를 할 수 있었을텐데 아쉬운 점이었다. 


멀티 윈도우!


사진에서 보이는 세가지 다 지원을 할거라고 . 

현재는 맨 왼쪽의 스플릿 뷰 형태만 구현이 되었다고 한다. (아직 개발 중인 N)




안드로이드 가이드라인에 잘 맞춰서 개발 했다면, 별 문제 없이 멀티 윈도우 환경에서 사용이 가능하다고.


멀티 윈도우는 다음에 이어지는 안드로이드 세션에서 더 자세하게 이야기하기로 한다.


Doze Mode 개선


마시멜로에 도입된 Doze 모드인데, 이게 동작하기 위해서는

화면이 꺼져있고, 충전중이지 않으며, 일정 시간 이상 움직임이 없어야 Doze 로 전환이 된다.

(활성화 되는 상황이 밤에 잘때 충전기 연결 안해놓은 상황이랄까?)


하지만 실생활에서는 주머니나 가방에 넣어둔채 이동하는 경우가 많아 Doze 활성화가 잘 안된다고...

그래서 Doze like 상태를 추가한다고 한다. 진짜 Doze 는 아니지만 몇가지 기능(Network, Jobs,Sync)을 차단해서 배터리를 절약하게 한다. 






Doze 최적화


주의할점

GCMNetworkManager 는 compat쪽 클래스인데, gcm 과는 관계 없는 jobscheduler 클래스라고...

AlarmManager 의 setExactAndAllowWhileIdle 는 정확하게 동작할것 같은 느낌인데, 실제로는 doze 때문에 15분정도 딜레이 되어 실행이 될수 있다고 한다.

whiltelisting 은 사실상 안된다고 보는게 맞다고. (사례가 거의 없다고 한다)



백그라운드 데이터 제한을 더 잘 쓸수 있도록 개선되었다고 한다.

앱에서 확인할 수 있는 api 도 추가되었다고




네트워크 상태가 바뀌었을때 CONNECCTITY_CHANGE 라는 broadcast 가 발생하는데, 

문제는 이것을 받은 앱들이 수십개(?)이상 되어서, 동시에 깨어나 메모리와 자원을 많이 소모해 폰을 전반적으로 느리게 하는 현상이 있어서 N 부터는 이것을 사용이 안되게 한다고.

(manifest 에 receiver 등록하는 경우에는 안되고, 코드로 register 하는 경우에는 동작 한다고 한다)

 



사진 찍을때, NEW_PICTURE, NEW_VIDEO 같은 것도 broadcast 되어 사진 앱을 느리게 한다고 하는데, 이건 아예 제거 해버린다고 한다.





이 세션 이후에는 웹과 안드로이드 트랙으로 나뉘었다. 

행사장에서 카메라로 동영상 촬영도 했으니, 추후 영상으로 공개 될수도 있을것 같다.


안드로이드 세션

멀티 윈도우

자리를 옮겼는데, 가운데쯤에서 살짝 뒷편에 앉았는데, 

스크린이 좀 낮게 배치 되어있어서, 스크린의 절반부분 윗부분만 보여서 화면을 보는데 불편했다.

손을 번쩍 들고 찍어도 사람 머리들이...



기존 삼성 갤럭시 폰에서 보이던 그것과 매우 유사하다.


멀티 윈도우 사용 방법과,

삼성 멀티 윈도우와 N 의 멀티 윈도우의 같은점과 차이점에 대해 설명하는 부분도 있었고,

어떤경우 멀티 윈도우 사용이 가능하고, 안되는 것인지도 설명했었다.

(자세한 내용은 생략···· 뒤에 샘플 링크 참고)







쉬는 시간에 물어봤는데, 

기존 삼성 멀티 윈도우하고 N 하고, 겹치는 부분도 많고 다르게 동작하는 부분이 많아서 

개발 과정에서 협력하면서 진행하고 있다고 한다. 개발중인 삼성폰에 올려보면 삼성 멀티 윈도우와 N의 멀티 윈도우가 중첩해서 사용가능하다는 이야기도.. 


Android Studio 2.0

발표 당일 전날 2.1 이 공개되었다. 

2.1 이 되면서 instant run 등 많은 버그 수정과 성능 향상 (instant run 에서 25%정도 향상) 이 되었다고 한다.


android studio 메모리만 늘려주고 사용했었는데, 

내부의 gradle 돌아갈때도 넣어줄 수 있는 옵션이 있었다. 


안보여 안보인다구!!! (그래서 아래에 적어 놓았다)

gradle.properties 

org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m
android {
... ...

dexOptions{
incremental true
javaMaxHeapSize "3g"
}

메모리는 자신의 시스템에 맞춰서 넉넉히 적어주길..


취소선은 2.0에서 2.1로 바뀌면서 그어진 내용들


아참, 에뮬레이터 2.0이 최소 3배에서 10배는 빨라졌다고...


ExoPlayer 



독특한 발음으로 발표하시던 발표자분


용어 정리인데, ExoPlayer 는 위의 것들을 지원한다


몇년전 미디어 프로젝트를 할때 ios 쪽 videoview 는 dash 부분을 지원하는것을 보고 신기해 했었는데 이것은 지원한다.



그 다음 세션이었던 기술과 정책 세션은 별 내용이 없어서 패스


웹쪽 트랙 내용이 공유 되면 그쪽도 살펴 봐야겠다.


저작자 표시 비영리 동일 조건 변경 허락
신고

1.

gcm v3 에서 ios push 보낼수 있다고 해서 작업중인게 있었다.

기존 gcm은  data 에 message 를 실어 보내는데 (안드로이드),

iOS는 다르게 notification 에 message 를 보내줘야 aps 인식이 된다.


2. 

앱이 강제 종료 된 경우는 왜인지 push 를 못받길래, 검색해봤는데 이런 내용이 검색되었다.

https://github.com/googlesamples/google-services/issues/60#issuecomment-141958252


구글 샘플 프로젝트에서도 같은 증상인데, push 발송할때 priority: high 를 추가해서 보냈더니 잘 갔다는 댓글.


ios 쪽에 뭔가 많은 삽질을 하다가, 댓글대로 보내보니 push 를 잘 받았다.

저작자 표시 비영리 동일 조건 변경 허락
신고

버스 정류장 키트중에는 디스플레이 기능이 들어가있는 버전도 있다.


앱에서는 디스플레이 기능이 있는 정류장이 인식이 되면, 메시지를 보낼수 있는 아이콘이 나타나며

아래 사진과 같이 메시지를 보낼 수 있다.


라즈베리파이 2 에 LCD 가 안붙어서(??) 몇시간 삽질하다가,

혹시나하고 B 모델에 LCD 올려봤더니 동작한다 OTL..

(분명 몇달전엔 라즈베리파이 2 에 LCD 동작했었는데...)



메시지 보내기 관련 서버사이드 코드는 아래 링크에 등록되어있다.

https://github.com/team-flit/smart-busstop-chatter



저작자 표시 비영리 동일 조건 변경 허락
신고

구글 hackfair 에 제출할 앱에 Material Design 적용 작업을 진행하고 있다.


주로 테스트 올려서 테스트 하는 디바이스는 갤럭시 넥서스(kitkat 4.4- Cyanogen) 과 넥서스5 (marshmallow 6.0) 인데,  

루트 레이아웃부터 LinearLayout, RelativeLayout 로 되어있던걸 CoordinatorLayout 으로 바꾸고, 

아래쪽 목록뷰에도 스크롤 적용을 했다. ListView -> RecyclerView, CardView 적용.


design support library ( http://googledevkr.blogspot.kr/2015/06/designsupport.html ) 를 이용하면 하위버전에서도 Material Design 적용이 된다고는 하는데, 롤리팝 이후부터만 지원되는 기능들이 몇가지 있다.


StatusBar(시계랑 아이콘 표시되는 영역) 색상 적용은 Kitkat 에서도 이런 라이브러리를 쓰면 가능하나 시스템 기본은 지원하지않으므로(?) 그대로 뒀다 -_-


View 의 elevation 속성은 5.0부터 지원되는데, 그아래 버전에서는 평평하게(!!) 나타난다.

구분되는 부분을 elevation 속성으로 고쳐놨었는데, 구분되는(?)듯한 UI가 안보이니깐, 

롤리팝 아래 버전에는 구분선 뷰를 넣고 visible , 이후 버전에는 gone 으로 처리했다. 



앱 시작 스플래시 화면을 하위뷰로 두고 보여주는 식으로 처리했었는데, 루트레이아웃을 바꾸면서 넥서스5에서는 AppBar(ToolBar)아래부분에 - 그러니까 위에 AppBar 를 덮으면서 나와야되는데 - 나타난다, 갤럭시 넥서스에는 의도한대로 나오는데, 이부분은 Activity 방식으로 바꿔야 할 것 같다.




저작자 표시 비영리 동일 조건 변경 허락
신고

방금전 구글플레이 알파 테스트에 apk 를 업로드 하면서 나온 추가된 권한들 목록이다.


응(?)

저장소 쓰기 안쓰는데 뭐지... 찾아보니 AndroidManifest.xml 에 저장소 쓰기 권한이 들어가있었다.

프로젝트 생성할때 넣어두고 잊어버리고 있었나보다.


그 외에 권한에 변경점이라면 구글 맵 연동하면서 자동으로 추가된 내용인가보다.


build.gradle 의 defaultConfig 도 살펴보니 targetSdkVersion 21 로 되어있었다. 

여기도 만들때 그냥 그대로 두고 업데이트 안해놨나보다.


targetSdkVersion  23으로 바꿔놨으니 Runtime Permission 도 처리 해줘야겠군!


덧)

구글 플레이 서비스 (상위 모듈)을 넣어줬더니 의존성 걸려있었던 모듈에서 위의 추가되었던 기능들을 사용하는걸로 확인됐다.

아래코드로 수정한뒤 해당권한이 없어졌음.

compile 'com.google.android.gms:play-services-maps:8.3.0'

compile 'com.google.android.gms:play-services-location:8.3.0'


저작자 표시 비영리 동일 조건 변경 허락
신고

#1. 

이번 프로젝트에 gimbal beacon(사진 아래쪽 파란색) 도 이번 프로젝트에 쓸 수 있을까 해서

(기존 개발은 Light Blue Bean으로 진행됨 - 사진 위쪽), 

기존 코드를 수정해보고 stack overflow 등등을 찾아봤는데

제공해주는 SDK를 이용하지 않고서는 아마 어려울듯하다. 

BLE Scanner 앱을 이용해도 검색이 안되는걸로 보아 다른 방식으로 동작하는듯?


기존에 Light Blue Bean 을 사용하고 있었는데, 

데모 및 시연에서는 다른 팀원이 가지고 있는 것을 몇개 더 사용하는걸로 결정.


#2. 

위작업을 하면서 코드수정을 잘못 했나 Light Blue Bean(이하 LBB 로 표기) 가 인식이 안되었다.

git diff 를 봐도 그렇다할 수정사항을 못찾았는데, 

배터리를 교체하니깐 언제 그랬냐는듯이 정상 작동!

예전에 인텔 에디슨 프로젝트 하면서 LBB 에다가 아두이노 프로그램 올려놨던게 배터리를 빠르게 소모 했었을걸로 추측만 해본다. 


저작자 표시 비영리 동일 조건 변경 허락
신고

아랫글에서 이어지는 글

기존에 사용중인 개인 계정으로 구글 스토어에 등록을 해도 되지만,

FLIT 에서 앞으로도 무언가를 만들것이고, 이쪽에서 만드는 앱들만 따로 분류를 해야될것 같다는 생각이 들어, 계정을 새로 만들었다. 


팀 이름이 flit 이니깐, team.flit, dev.filt, project.flit 순서를 바꿔봐도 중복되는 아이디라고 나오길래, 가능했던 다른 조합(?)을 석준님께 보여주며 어떤걸로 할까요? 했더니 maker.flit 은 어떻겠냐며 ... 

오오 저 아이디는 가입이 가능했다.


이어서, 플레이 스토어에 개발자 등록을 했다. 몇년만(?)의 개발자 등록!

신용카드 체크용도로 1 USD가 빠져나갔다가 취소 되었다. (아마 일요일 01:00 쯤 AM) 

결제가 아직 진행 중이며 최대 48시간 걸립니다.

APK 업로드를 시작하고 스토어 목록을 준비할 수는 있지만 아직 애플리케이션을 출시할 수는 없습니다.

결제가 처리되고 애플리케이션을 출시할 수 있게 되면 알려드리겠습니다.


라는 문구가 나오다가, 아침에 일어나보니 새벽에 $25 USD 결제가 되었다는 문자가 와있었다.


몇달전 알파, 베타 테스트 기능이 쓸만하게(?) 업데이트 되었다는 소식은 들었는데, 

이번 프로젝트에서 이 기능을 써보기로 ...


안드로이드 프로젝트에 등록용 apk 를 만들어주는 gradle build task 에 releaseAPK 를 추가 했다.(gradle 스크립트 아직은 불편.... -_-)


테스트 APK 등록만으로, 테스트 URL 이 바로 나오는건 아니었고, 스토어 등록정보를 입력해서 게시됨 ! 상태가 되어야 테스트 항목을 사용할 수 있었다.

아는 사람은 알겠지만, 스토어 등록정보를 업데이트 하고나서 몇시간(?)동안 "업데이트 대기 중" 이란 문구가 나온다. 



  


알파,베타 테스트 링크로 접속하게 되면, 위와 같은 흐름으로 테스트 해볼 수 있다.


이런 방식의 장점이, 서버 어딘가에 apk 올려놓고 직접 다운받아 폰에 "알 수 없는 소스" 옵션(스미싱위험 노출)을 사용하지 않아도 된다는것, 업데이트가 있으면 매번 직접 배포하지 않고 스토어를 통해 업데이트가 가능하다는 점이 좋다. 


저작자 표시 비영리 동일 조건 변경 허락
신고

Google HackFair 공지글이 올라왔을때 ( http://googledevkr.blogspot.kr/2015/10/hack.html ) 내용을 보고,

몇달전 FLIT에서 만들었던 스마트 버스 정류장이 떠올랐다.


버스정류장에 설치하는 장치(비콘과 각종 센서들) 와 모바일 앱(Android, iOS)이었는데,

팀원들과 논의해본 결과 이것을 조금 더 발전시켜서 등록하자라는 방향으로 되었고

지난 주말 저녁 모임 시간때, 등록 신청을 했다.




FLIT 팀에서 만든 앱 올리기용 구글 계정과 플레이 스토어 결제도 했고,

기존에 만들어놨었던 코드가 android M 호환 문제가 있어서 코드수정을 좀 했다. 


소스코드는 github 에 등록되어 개발 진행중이다.

https://github.com/kfmes/SmartBusStop Android

https://github.com/colus001/SmartBustop iOS

https://github.com/team-flit/smart-busstop-chatter  Smart Busstop with Messaging Features


저작자 표시 비영리 동일 조건 변경 허락
신고

구글링해서 찾은 내용을 기록용으로 남겨둠.


http://davistechyinfo.blogspot.kr/2014/07/android-determining-if-wearable-device.html


위 블로그 코드 요약.


mGoogleApiClient = new GoogleApiClient.Builder(this)

           .addApi(Wearable.API)

           .addConnectionCallbacks(this)

           .addOnConnectionFailedListener(this)

           .build();


connection callback 이 오면

Wearable.NodeApi 를 이용, 

NodeApi.GetConnectedNodesResult nodes =

                  Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();

          if (nodes != null && nodes.getNodes().size() > 0) {

              isConnectedToWearable = true;

          }

 

연결된 node 가 있는경우, 연결된걸로 처리.



저작자 표시 비영리 동일 조건 변경 허락
신고

아파치나 nginx 웹서버의 경우 해당 경로에 index 페이지 파일 설정이 안되어있으면, 그 directory 의 파일 목록을 보여주는 기능이 있다.


tomcat 에도 있을까 하고 살펴봤더니 옵션 한곳만 바꿔주면 된다.


conf/web.xml

<servlet> 

        <servlet-name>default</servlet-name> 

        <servlet-class> 

          org.apache.catalina.servlets.DefaultServlet 

        </servlet-class> 

        <init-param> 

            <param-name>debug</param-name> 

            <param-value>0</param-value> 

        </init-param> 

        <init-param> 

            <param-name>listings</param-name> 

            <param-value>false</param-value> 

        </init-param> 

        <load-on-startup>1</load-on-startup> 

</servlet> 

listings 의 false 를 true 로 바꿔주고,
tomcat을 재시작해주면 파일 목록을 볼 수 있다 :)


(아마 운영 서버에서는 이렇게 쓰진 않겠지...)

저작자 표시 비영리 동일 조건 변경 허락
신고




티스토리 툴바