Big을 했으니 Small도 해야지~ 

얼마전 페북을 열심히 보다가 유명 개발자께서 새로운 무언가를 소개한 글을 잠깐 보았다. 바로 구글에서 자사의
안드로이드를 기반으로 추진하는 IoT 프로젝트인 Android Things라는 프로젝트였다. 구글의 개발자 사이트를
가보면 HOME 메뉴 아래 Android, Wear, TV, Auto에 이어 5번째로 자리잡고있다.


마침 작년부터 아두이노에 관심을 갖게 되었고 또 올해 추진하고 있는 아두이노로 스마트 미러를 만드는 계획에
차질을 빚고 있던 차에 이런 정보를 접하니 관심이 안갈 수 없다. 아쉽게도 Android 자체가 고수준 언어인 JAVA에
기반을 하고 있다보니 아두이노는 지원 기기에 없지만 라즈베리 파이를 지원한다고 하니 안그래도 기웃거리고 있던
라즈베리 파이를 시작해 볼 좋은 핑계가 생긴 셈이다.


그래서 오늘은 이 Android Things에 대해 간단하게 알아보고자 한다.
이 글은 Android Things의 메인 페이지를 정리한 것이다.

참조 링크 : https://developer.android.com/things/index.html


예정된 수순?

뭐 애초에 전방위적으로 손을 안뻗친 곳이 없는 구글이다보니 IoT에 눈을 돌렸다 해도 이상할 것도 없고 또 자율
주행 차를 연구하고 있었다 하면 당연히 그 과정에서 IoT가 빠져있었을리가 만무하다. 더군다나 이미 모바일 OS인
Android를 통해 소형 기기에 대한 생태계를 확실하게 굳히고 있는 마당에 사실상 일반 개발자에게 공개된 시점이
최근일 뿐 이미 오래 전에 준비는 다 되어 있었다고 봐야 할 것이다(그렇다면 곧 애플도?).


결국 올 것이 온 것이니 우리는 아~주 자연스럽게 이용만 하면 된다 ^^. 그러기 위해서는 차근 차근 하나씩 그 속을
들여다 보아야겠지.


Android Things 소개

그래서인지 Android Things의 소개에는 Android가 가지고 있는 장점들을 활용할 수 있다는 점을 유독 강조하고
있는 느낌이다. 이름 자체가 Android로 시작하니 두말하면 잔소리인가? 어쨌든 메인 페이지의 표제어가 바로
‘안드로이드의 용이성과 힘’이다. 


여기서 강조하고 있는 것은 기존에 구축된 Android의 개발 툴, API들, 리소스들과 개발자 커뮤니티를 마음껏 이용할
수 있다는 것, 새로운 IoT 기기들을 위해 저수준의 I/O와 라이브러리를 제공하는 새로운 API가 추가되었다는 것,
마지막으로 IoT의 가장 큰 약점인 보안 부분을 Android OS 수준에서 제공할 수 있다는 것 등이다.



다음으로 강조하는 것은 프로토타입의 개발에서부터 실제 상품 개발까지의 과정을 빠르게 진행할 수 있다는 것이다.
기존에 생산된 많은 디바이스들에 대해 인증 받았고 이러한 기기들 덕분에 커널 개발, 펌웨어 개발, 보드 자체의
개발 등 어려운 과정을 거치지 않고도 바로 프로토타입 제품을 생산할 수 있으며 이렇게 개발된 프로토타입 자체가
이미 상용 제품의 수준이기 때문에 상용제품 개발에도 큰 힘이 들지 않는다는 것이다.



그리고 마지막으로 기존에 구굴이 이루어 놓은 많은 것들을 사용할 수 있다는 것이다. 구글 플레이를 이용한 앱의 
배포라든지 Weave라는 IoT 프로토콜을 이용할 수 있다는 것, 각종 시스템 이미지나 업데이트 혹은 버그 픽스등을 
안정적으로 제공받을 수 있다는 점, 그리고 OS와 앱의 업데이트를 OTA 인프라를 이용해 진행할 수 있다는 것 등이
그것이다.



정리

길게 늘어놨지만 요점은 안드로이드 생태계를 기반으로 이미 구축된 구글의 다양한 서비스와 인프라들을 마음껏
이용할 수 있다는 것이다. 그럼 과연 이 것이 구체적으로 무엇을 의미하는가? 하는 것은 Android Things 사이트에
있는 내용을 차근차근 정리하면서 알아보도록 하자 (사실 가장 먼저 손대고 싶은 것은 샘플 프로젝트 중 텐서플로우를
이용하여 이미지 처리를 하는 예제인데 천리길도 한 걸음 부터…차근차근 나가자~^^).



블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


GCM으로 전환 후 C2DM이 적용된 단말 처리


현재 일하고 있는 곳에서 운영하고 있는 모바일 시스템이 아직도
C2DM을 사용하고 있다.


최근 다른 PUSH 솔루션을 이용할 계획이 수립됨에 따라 GCM을
사용하는 PUSH 솔루션에 맞추어서 우리도 GCM으로 migration을 해야하는데
모바일 기기를 일괄로 GCM으로 업데이트 못할 경우 서버는 GCM으로 모바일 기기는
C2DM으로 서로 안맞는 경우가 발생을 할 것 같으니 혹시 C2DM을 통해 받은 
auth token을 GCM에서 바로 사용할 수는 없는지 확인해 달라고 한다.


진작에 구글 개발자 사이트로 갔어야 하는데 괜히 여기저기 기웃거리느라 
시간만 뺐겼다…-.-


결론은 다음과 같다.


GCM의 API key와 C2DM의 token을 파라미터로 
https://android.apis.google.com/c2dm/migrate API를 호출하면
응답이 오는데 이 응답에 새로은 auth token이 포함되어있으니 이 auth token을
이용하여 push를 전송하면 된다.

출처 : https://developers.google.com/cloud-messaging/c2dm#supporting-legacy-client-apps


이게 뭔 뻘짓거리인가…-.-
어차피 GCM 등록은 해야 하고…새로운 토큰을 별도로 받아서 처리를 해야 한다니…-.-
그냥 GCM이 설치된 버전의 앱을 일괄 배포하고 강제 업데이트 하도록 진행하는 것이
백번 낫겠다…


암튼 별로 권장할만한 방법이 아닌 것은 분명하다…

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

일단 기본적인 세팅으로는 화면 회전을 할 경우 onSaveInstanceState, onCreate 등이 모두 다시 호출이 된다.

이러한 동작을 막고 onConfigurationChanged를 호출하여 끝내고 싶을 경우 해당 Activity에 

onConfigurationChanged (Configuration newConfig)를 오버라이드하여 구현하고 AndroidManifest.xml의 

Activity 설정에 다음 내용을 추가해주어야 한다.


android:configChanges="orientation|keyboardHidden|screenSize"


단, 이 때 안드로이드 펌웨어 구버전에서는 screenSize가 없어도 가능했던 모양인데

최근 버전에서는 screenSize도 같이 적어줘야 이 내용이 반영이 되므로 주의해야 한다.

자세한 내용은 API 참고...^^;;;



블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

일단 이 내용은 공식적인 기술 문서에 의한 것이 아니라

전적으로 개발상의 경험으로 정리한 내용이니 착오 없으시길 바랍니다.


문제의 발단은

현재 회사에서 운영 중인 앱의 안드로이드 버전에서

이전 버전은 홈버튼을 놀러 앱을 종료한 후 재실행 할 경우 바로 직전 화면으로 들어가는데

가장 최근 배포한 버전은 위와 같은 경우 다시 처음 로그인 화면부터 뜬다는 것이다.


로그를 확인해보니 이전 버전에서는 홈 버튼을 누른 후 재실행시 onCreate(), onResume() 어느 함수도

실행되지 않았는데 최근 배포버전은 onCreate()와 onResume()을 차례로 호출하고 있었다.


계속 검색하고 소스 코드 분석 하고 하던 중 마지막으로 확인하게 된 것이 AndroidManifest.xml 파일의

메인 Activity에 설정되어있는 android:launchMode 속성...


이전 버전 소스와 비교를 해보니 이전 버전은 이 설정 값이 singleTop으로 되어있는데

최신 배포버전에는 이 설정값이 singleTask로 되어있었다.


검색한 내용으로는

singleTop의 경우 이 값이 설정된 Activity는 호출되면 호출된 것 만큼 생성을 하는데 

다만 기존에 생성된 것이 있다면 이 것을 재활용 하게 된다고 한다. 

따라서 이 경우에는 기존에 떠있는 프로세스를 그대로 사용하기에 onCreate()가 호출되지 않는 것이다.


하지만 singleTask의 경우 이 값이 설정된 Activity는 호출되면 기존 Activity를 죽이고 새로 instance를

생성하기 때문에 항상 onCreate()부터 시작하게 되는 것이다.


이렇게 홈 버튼으로 앱 종료 후 재실행 할 때 onCreate()의 호출 여부로도 singleTop과 singleTask의 차이를

확인할 수 있다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/02/08 18:03 


긴 글 싫어하시는 분들을 위한 3줄 요약

1. ADT Errors running builder 'Android Pre Compiler' on project 문제 발생
2. Android SDK Tool 21.0.1에는 버그가 있으므로 Android SDK Tool 21.1 rc 설치
3. Android SDK Tool 21.1 rc 설치 후 반드시 https://dl-ssl.google.com/android/eclipse-preview/에서
관련 패키지들 업데이트

=============================================

현재 맥북 프로에서 이클립스를 이용하여 안드로이드를 개발(사실은 운영)하고 있다.
이클립스 버전은 JUNO를 사용 중인데...얼마전 뭔가를 잘못 업데이트 했는지
이클립스를 실행시키면 항상 Loading Workbench에서 이클립스가 멈춰버리는
문제가 생겼다.

이 문제에 대해 이것 저것 검색도 하고 검색한 것을 적용도 해보았지만
완전한 해결책은 찾지를 못했고 이클립스를 실행하기 전에 항상 metadata 디렉토리를
삭제한 후 실행을 시켰다. 물론 프로젝트 설정은 다 날아가서 늘 프로젝트를
새로 import해야 하는 문제가 있었지만...ㅠ.ㅠ

오늘 이 문제를 제대로 고쳐보고자 맘먹고 전체 세팅을 바꾸기로 했다.

그런데...빈대 잡다가 초가삼간 태운다고...몇가지 업데이트를 하는 과정에서
더 심각한 문제가 발생을 하였다.

프로젝트를 import한 후 clean이나 build를 수행하니 에러가 발생을 하는 것이었다.
아래의 메시지를 출력하면서 빌드가 되지 않았는데 증상은 aidl 파일들이 java 파일로
변화되지 않는 것이었다.

ADT Errors running builder 'Android Pre Compiler' on project

역시 구글링을 통해 문제를 해결하고자 열심히 검색하고 몇가지 해법을 찾았으나
요지부동...

그 과정에서 얻은 것은 Android SDK를 새로 받았더니...
오호라! 이클립스가 ADT라는 이름의 번들로 추가되어 있는 것이었다.
이제는 번거롭게 이클립스 다운받고 또  ADT 설정하고 할 필요가 없어졌다.
그냥 SDK 하나 다운로드 받으면 만사 땡~

암튼...
이렇게 까지 했는데도 문제가 해결되지 않았다.
가장 확실해보이는 해법은 현재 적용된 Android SDK Tool 21.0.1 버전에 버그가
있기 때문에 아직 Preview 단계인 Android SDK Tool 21.1 rc 버전을 받아야 한다는
것이었다.

다음은 stackoverflow에 달린 답변 전문이다.

I always hate answering my own questsions, but this is a genuine solution.

The 21.0.1 version of the ADT tools has a bug that prevents a project building if you have any files without extensions in them. This is a particular problem for users (like me) using subversion with has extenion-less files.

One recommended solution is to install these 'subversive' Eclipse plugins (Help > Install new Software > Work with your Eclipse version site > Expand 'Collaboration' > Choose 'Subversive SVN JDT Ignore Extensions' and 'Subversive SVN Team Provider') but this didn't work for me (I'm on Indigo, perhaps on Juno it works).

The solution is to install the 21.1 preview version of the ADT tools and SDK manager from Google. Clear instructions can be found here and you can read all the background add your voice to the angry mob of developers here.


그래서 시키는대로 했는데도 불구하고 이번에는 SDK를 못찾는 문제가 생겼다.
분명 설정 화면에서 SDK 위치를 지정을 해 주었는데도 불구하고 SDK를 인식하지
못하는 것이었다.

요기서 얼마간 삽질이 있었다.
결국 생각해보면 Android SDK Tool 21.1 rc이라는 새 버전을 사용하게 된만큼
관련된 다른 패키지들도 업데이트를 해주어야 하는 것이 당연지사인데 그것을
생각지 못한 것이다.

그리고 드디어 새로운 소프트웨어 설치를 통해 아래 링크를 이용하여 다른 패키지를
모두 업데이트한 이후에야 모든 문제가 해결되었다.


정말 힘든 하루였다...ㅠ.ㅠ

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2012/10/08 15:10





직찍사

12일 배송이라고 들어서 아무 생각 없이 기다리고 있었는데
오늘 떡하니 도착을 했다.

현재 일하고 있는 곳에서는 Wi-Fi가 차단되어있어서 달리 만져볼게 없었고
1층 커피숍 Wi-Fi를 이용하여 구글 계정 등록하고 몇가지 설치를 해보았다.

외형만으로 봤을 때 일단 7인치도 만만한 사이즈가 아니라는 것.
(역시 휴대 기기의 맥시멈 사이즈는 5인치대인 것 같다.)

화면이 정말 깨끗하다는 것.

재질은 아이패드를 만지다 봐서 그런지 그리 고급스럽지는 못하다는 점.

Wi-Fi 전용 기기는 정말 Wi-Fi 없으면 그냥 게임기라는 점...ㅠ.ㅠ
(그나마도 설치된 게임이 없다면 그냥 깡통이라는 거...-.-)

하지만 뭐니뭐니해도 새 기계는 정말 마음을 즐겁게 해준다는 점~

일단 첫인상은 이정도.

생각나는대로 사용기를 올려보도록 하겠다~

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2012/07/20 16:05


현재 송해 아저씨 광고하는 모 은행에서 모바일 관련 운영 업무를 맡고있다.


최근 아이폰은 괜찮은데 안드로이드쪽의 푸시가 잘 안온다는 고객측의 클레임이 있어
조치를 하다가 C2DM 계정이 이전 개발당시의 테스트용 계정인 것 같아 새 계정을
만들어 다시 테스트를 해보기로 결정하고 C2DM 계정을 등록하려는데...

이게 웬일...

2012년 6월 26일자로 기존의 C2DM 서비스는 deprecated 되었단다...ㅠ.ㅠ
다음은 구글의 개발자 페이지에 있는 안내문이다.




위 내용 하단에 링크되어있는 GCM 서비스가 C2DM을 대체한다.
아이폰 개발이 메인이다보니 안드로이드쪽 정보에 너무 둔감했나보다.

그나저나 기존 소스를 GCM에 맞춰 수정해야 하나...
일거리가 늘어버렸다...ㅠ.ㅠ

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2012/02/13 09:32 


그동안 프로가드를 이용하여 난독화를 진행해왔는데 최근 신규 라이브러리를

추가하면서 아래와 같은 에러가 발생하였다.

[2012-02-13 09:27:14 - IBKLauncher_Dev] Proguard returned with error code 1. See console

[2012-02-13 09:27:14 - IBKLauncher_Dev] Note: there were 993 duplicate class definitions.

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find superclass or interface java.awt.Frame

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find superclass or interface java.awt.event.ActionListener

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find superclass or interface java.awt.event.WindowListener

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.SocksDialog: can't find superclass or interface java.awt.Dialog

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.SocksDialog: can't find superclass or interface java.awt.event.WindowListener

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.SocksDialog: can't find superclass or interface java.awt.event.ItemListener

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.SocksDialog: can't find superclass or interface java.awt.event.ActionListener

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.UDPRelayServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.UDPRelayServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.UDPRelayServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.UDPRelayServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find referenced class java.awt.Frame

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find referenced class java.awt.image.ImageProducer

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find referenced method 'java.awt.Image createImage(java.awt.image.ImageProducer)' in class net.sourceforge.jsocks.SocksEcho

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.SocksEcho: can't find referenced method 'void setIconImage(java.awt.Image)' in class net.sourceforge.jsocks.SocksEcho

.

.

.

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.ProxyServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.ProxyServer: can't find referenced class org.apache.commons.lang.RandomStringUtils

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: net.sourceforge.jsocks.socks.ProxyServer: can't find referenced class org.apache.log4j.Logger

[2012-02-13 09:27:14 - IBKLauncher_Dev]       You should check if you need to specify additional program jars.

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: there were 241 unresolved references to classes or interfaces.

[2012-02-13 09:27:14 - IBKLauncher_Dev]          You may need to specify additional library jars (using '-libraryjars'),

[2012-02-13 09:27:14 - IBKLauncher_Dev]          or perhaps the '-dontskipnonpubliclibraryclasses' option.

[2012-02-13 09:27:14 - IBKLauncher_Dev] Warning: there were 14 unresolved references to program class members.

[2012-02-13 09:27:14 - IBKLauncher_Dev]          Your input classes appear to be inconsistent.

[2012-02-13 09:27:14 - IBKLauncher_Dev]          You may need to recompile them and try again.

[2012-02-13 09:27:14 - IBKLauncher_Dev]          Alternatively, you may have to specify the options

[2012-02-13 09:27:14 - IBKLauncher_Dev]          '-dontskipnonpubliclibraryclasses' and/or

[2012-02-13 09:27:14 - IBKLauncher_Dev]          '-dontskipnonpubliclibraryclassmembers'.

[2012-02-13 09:27:14 - IBKLauncher_Dev] java.io.IOException: Please correct the above warnings first.

[2012-02-13 09:27:14 - IBKLauncher_Dev]  at proguard.Initializer.execute(Initializer.java:308)

[2012-02-13 09:27:14 - IBKLauncher_Dev]  at proguard.ProGuard.initialize(ProGuard.java:210)

[2012-02-13 09:27:14 - IBKLauncher_Dev]  at proguard.ProGuard.execute(ProGuard.java:85)

[2012-02-13 09:27:14 - IBKLauncher_Dev]  at proguard.ProGuard.main(ProGuard.java:499)


안드로이드 개발 경험이 일천한지라 무지 당황하였다.
답은 역시 구글링~
그러 문제가 발생한 패키지에 -dontwarn 옵션을 주면 해결되는 문제였다.

-dontwarn net.sourceforge.jsocks.**

어렵지 않게 해결되어 다행이다...ㅠ.ㅠ

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2011/12/28 15:37 


현재 운영중인 하이브리드 형태의 private app store에서

일반 http로 다운로드를 받던 것을 보안 강화를 위해 다운로드 URL도
SSL을 적용하여 https로 다운로드 받도록 수정하였다.

수정 후 일부 단말에서 특정 앱을 받을 때 아래와 같은 에러가 발생하였다.

12-23 09:15:59.425: W/System.err(1818): javax.net.ssl.SSLProtocolException: Read error: ssl=0x337c48: Failure in SSL library, usually a protocol error
12-23 09:15:59.425: W/System.err(1818):  at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(Native Method)
12-23 09:15:59.425: W/System.err(1818):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:788)
12-23 09:15:59.425: W/System.err(1818):  at org.apache.harmony.luni.internal.net.www.protocol.http.ChunkedInputStream.read(ChunkedInputStream.java:50)
12-23 09:15:59.425: W/System.err(1818):  at java.io.DataInputStream.read(DataInputStream.java:69)
12-23 09:15:59.425: W/System.err(1818):  at com.sds.mdmain.ui.bizinstaller.BizAppInstaller$DownloadTask.Download(BizAppInstaller.java:242)
12-23 09:15:59.425: W/System.err(1818):  at com.sds.mdmain.ui.bizinstaller.BizAppInstaller$DownloadTask.doInBackground(BizAppInstaller.java:160)
12-23 09:15:59.425: W/System.err(1818):  at com.sds.mdmain.ui.bizinstaller.BizAppInstaller$DownloadTask.doInBackground(BizAppInstaller.java:1)
12-23 09:15:59.429: W/System.err(1818):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-23 09:15:59.429: W/System.err(1818):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-23 09:15:59.429: W/System.err(1818):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-23 09:15:59.433: W/System.err(1818):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-23 09:15:59.433: W/System.err(1818):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-23 09:15:59.433: W/System.err(1818):  at java.lang.Thread.run(Thread.java:1019)

일단 명확하게 원인을 확인할 수 없는 것이
아래 적은 것과 같이 일관되지 않은 증상 때문이었다.

1. 일부 단말에서만 발생하며 주로 안드로이드(갤럭시 S)에서 발생함
2. 같은 환경에서 정상적으로 다운로드 되는 앱이 있음

아직도 명확한 원인은 발견하지 못한상태이며 다만 구글링을 통한 참고 자료만
검색해 놓은 상태이다.

http://code.google.com/p/android/issues/detail?id=16121&can=1&q=sslexception&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

http://stackoverflow.com/questions/6852492/sslprotocolexception-when-reading-https-responses-on-android-2-3-3-devices/6950339#6950339

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2010/08/14 16:32 



최근 북미 시장에서는 안드로이폰 점유율이 아이폰과 블랙베리를 넘어섰다고

합니다.


모바일 애플리케이션을 개발하고자 하는 사람들은 두 가지 모두 할 수 있는 여건이

아니라면 전통(?)의 강자 아이폰과 신흥(?) 강자 안드로이드 중에 선택을 해야할

입장이다보니 어느쪽이 성공 확률이 높을 것인지에 대해 관심을 갖게 되는 것은

당연한 일일 것입니다. 그래서 흔히 하는 질문 중에 하나가 '시장의 규모'에 대한

것들입니다.


시장 규모만을 놓고 본다면 분명 안드로이드쪽 시장이 커질 것은 분명합니다.


일단 안드로이드를 개발한 구글은 개방성과 자유로움을 모토로 하고 있고 그에따라

특별한 제약 없이 대다수의 모바일 디바이스 제조업체들이 원한다면 안드로이드

기반의 모바일 디바이스를 만들어 낼 수 있습니다.


여기에서 발생하는 다양성으로 인해 많은 사용자들이 오로지 한 가지 선택권 밖에는

없는 아이폰 보다는 여러 브랜드의 안드로이드 기반 스마트폰을 구미와 취향에 맞게

선택하게 될 것으로 보여지네요.


이런 면에서 아이폰의 경우 단일 업체의 단일 기기라는 점이 

장점이자 약점으로서 작용을 하게 되겠죠.


하지만 아이러니컬  것은 시장이 커진다고 해서 

그만큼 가능성도 같이 커지는 것은 아니라는 점입니다.

 

이미 아이폰 시장에서 경험하고 있는 것이지만 왠만한 아이디어들은 

모두 앱으로 구현이 되어있으니까요모바일 디바이스가 현재와 같은 형태를 

계속 유지한다고 보면 후발 업체들이나 개발자들이   있는 영역은 상당히 

제한적일 것입니다.


사람들의 아이디어라는 것도 실현 가능한 기술에 기반하는 것이고 

새로운 기술적인 혁신이 나오기 전까지는 새로운 아이디어의 상승 곡선도 

어느 선에서 정체될테니까요.


아무리 시장 규모가 커도 대부분 소비자들의 선택은 소수의 활용도 높은 앱에 편중된다는 것이 문제인 것이죠.

 소수의 활용도 높은 앱들은 이미 나올만큼 나왔고...-.-


결국 중요한 것은 다음 2가지라고 보여집니다.(물론 쉬운 일은 아니겠습니다만...)


1. 우선 가장 쉽고 확실한 전략은 현재 모바일 기기가 사용되고 있지는 않지만 

충분히 활용 가능한 영역(혹은 산업 분야) 찾는 것이 중요하겠네요.

그런 영역만 확실히 찾아낼  있다면 시장의  부분에서 어느 정도는 

성공을 거둘  있을 것입니다.

2. 앞으로 모바일 디바이스가 어떻게 변화할 것인지를 예측하는 것에서 

시작해야  것입니다.

현재 센서로는 GPS, 가속도 센서조도 센서근접 센서, 3 자이로센서 등이 

탑재되어있고 카메라 기능, 3G WiFi 2가지 통신 기능 등이 모바일 디바이스를 

구성한다고 보아도 과언이 아니겠지요.

여기에서 가까운 미래에는 어떤 센서어떤 기능들이  추가  것인지...

 경우에는 기술적인 지식과 상상력이  필요하겠네요.


암튼 결론은

시장의 규모와 상관없이 새롭게 모바일  개발에 뛰어들고자 하는 업체나 개발자들은

초기 진입이 쉽지 않을 것이라는 점입니다.

 말은 거꾸로 해석하면 모바일  개발에 뛰어들고자 하는 사람이라면 시장의 규모를

판단 기준으로 삼을 것이 아니라 본인이 앞서 말한 2가지 전략적인 측면을 얼마나 

준비할  있을까를 먼저 생각해보아야  것입니다.


이렇게 본다면 아이폰을 선택하느냐 안드로이드를 선택하느냐는 사실상  문제가 안되겠네요.

다만 시장 규모가  경우에는 틈새시장을 노리는 전략도 나름 가능성이 있고 

 성공적인 앱을 만들었을 경우  많이 팔릴 수는 있겠죠...^^;;;

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^