안드로이드 프로그래밍을 하다보면 UI 변경은 UI쓰레드에서 작업을 해야만 합니다. 그렇게 하지 않으면 Exception이 발생하게 되죠.

실제로 프로그래밍을 하다보면 서버와의 통신같이 IO가 오래 걸리는 작업은 새로운 쓰레드를 생성해서 작업을 하게 됩니다. 그런데 이 작업 도중에 UI를 변경해야하는 경우도 있죠. 그럴 때 UI를 변경하는 작업만은 UI쓰레드에서 동작하도록 해줘야하죠.

이렇게 UI쓰레드에서 특정 작업을 수행하려면 Activity의 runOnUiThread()메서드를 사용하면 되는데요.
activity.runOnUiThread(new Runnable() {
   @Override
   public void run() {
      // work
   }
});

그런데 이런 메서드를 사용하면서 의문점이 하나 생겼죠.
runOnUiThread() 안에 함수를 넣어주는데 그게 어떻게 UI쓰레드에서 실행되는 것을 보장할까?

이 질문에 대한 답은 샤워를 하다가 문득 떠올랐습니다.


기본 아이디어는 다음과 같습니다.

1. UI쓰레드처럼 나만의 특별한 쓰레드(이하 myThread)가 무한 루프를 돌고 있다.
2. myThread는 ArrayList(이하 myList)를 가지고 있고, myList에는 특정 인터페이스(이하 MyExcutable)를 담는다.
3. 새로운 임의의 쓰레드에서는  myList에 myThread에서 수행하고 싶은 작업(MyExcutable 구현체)을 등록한다.
4. myThread에서 loop을 돌며 myList에 있는 MyExcutable을 수행한다.

무슨 말인지 이해하셨나요??


이해가 잘 안된다면 예제를 들어보겠습니다.

먼저 특정 인터페이스를 정의하겠습니다.

public interface MyExcutable {
   public void excute();
}

그리고 이 인터페이스를 담을 수 있는 List를 만들겠습니다.
 
private List<MyExcutable> myList = new ArrayList<MyExcutable>();




그리고 나서 작업을 등록할 임의의 쓰레드를 생성하겠습니다.
new Thread("temp - thread") {
   @Override
   public void run() {
      while(true) {
         MyExcutable myExcutable = new MyExcutable() {
            @Override
            public void excute() {
               Log.e(TAG, "created in temp-thread");
               Log.e(TAG, "excuting in " + Thread.currentThread().toString());
            }
         };
         myList.add(myExcutable);
					
         try {
            Thread.sleep(1000);
         } catch (InterruptedException e) {
         }
      }
   }
}.start();


이 임의의 쓰레드는 무한 루프를 돌면서 MyExcutable 구현체를 생성하고 이를 myList에 add합니다. 그리고나서 1초간 쉽니다. 
즉 1초마다 myList에 myThread에서 실행하고 싶은 함수들을 추가한다고 보면됩니다.


이제 myThread를 보겠습니다.
new Thread("myThread") {
   @Override
   public void run() {
      while(true) {
         if(myList.size() > 0) {
            MyExcutable myExcutable = myList.get(0);
            myList.remove(0);
            myExcutable.excute();
         }
         try {
            Thread.sleep(1000);
         } catch (InterruptedException e) {
         }
      }
   }
}.start();

myThread 는 무한 루프를 돌며 myList를 체크합니다. myList에 처리할 항목이 있으면 첫번째 항목을 가져오고 myList에서 삭제한 뒤 해당 항목을 실행(excute)합니다. 그리고나서 1초간 쉽니다. 



이렇게 작성한 코드를 디버그 모드로 실행해 보겠습니다. 

아래는 임의의 쓰레드(temp-thread)에서 작업을 생성하는 부분에서 break-point를 건 모습입니다.

 

여기에서 쓰레드 상태를 보면 아래와 같습니다. 주목해서 봐야할 부분은 temp-thread에서 작업이 수행 중이라는 것입니다.

 


계속 실행을 해보면 아래와 같이 myThread의 안으로 들어갑니다.

 
아래의 쓰레드 상태를 보면 현재 break-point가 걸린 부분이 myThread안이라는 것을 알 수 있습니다.




계속 수행해 보겠습니다.

계속 수행하면 아래와 같이 MyExcutable의 excute()안으로 들어오게 됩니다.
즉,  원하는 작업을 수행하게 되는 상황입니다. 이때 이 작업이 temp-thread 에서 이뤄질까요? 아니면 myThread 에서 이뤄질까요?
가만히 들여다보면 분명히 myExcutable을 생성한 곳은 temp-thread입니다. 그래서 temp-thread에서 수행되지 않을까 생각하기 쉽죠.

 

하지만 결과는 아래와 같습니다.

excute()가 myThread에서 동작하고 있음을 알 수 있습니다.




즉, 제 아이디어가 맞다는 것을 의미하죠.

이해가 잘 안된다면 곰곰히 위의 내용을 다시 한번 읽어보시고 곰곰히 생각을 해보시길 바랍니다.^^

저작자 표시
신고
Posted by Code-Moon

댓글을 달아 주세요

안드로이드 개발을 하다가 보면 많은 어려움에 힘들어할 때가 있습니다.ㅎ

저도 그러한 많은 어려움을 겪어왔고, 오늘도 어려움에 부딪혔죠.
원래 폰 화면을 끄면 Activity는 당연히 onPause()와 onStop()이 호출되어야하는데, 이상하게 onDestroy()까지 호출되더군요..;;

한참을 찾아 헤매다가 알아낸 결과입니다.

메니페스트에서 폰 화면을 한쪽으로 지정해 둘 경우(어쩌면 가로 모드일때만의 문제일 수도 있습니다. 이 부분은 테스트해보지 않았습니다.), 화면이 꺼지면 onDestroy()가 호출되고 다시 onCreate()가 호출되어 액티비티가 새로 생성됩니다.

이렇게 가로 세로 이동 때 액티비티가 재생성되지 않도록 하려면
아래 한 줄을 메니페스트에 삽입해주면 됩니다.
(물론 액티비티 속성으로요)

android:configChanges="orientation|keyboardHidden" 
저작자 표시
신고
Posted by Code-Moon

댓글을 달아 주세요


안드로이드에서 back버튼에 대한 처리를 해줘야하는 경우가 있습니다.
일반적으로는 back버튼을 누르면 그 activity가 종료되게 되죠.

저는 activity에서 onBackPressed()메서드를 오버라이드해서 사용했었는데요, 이게 2.0버전부터 지원되는 메서드더군요-_-;;;
그래서 1.6이하의 버전에서는 에러가 나고 종료되더라구요.

1.6이하의 버전에서도 back버튼에 대한 처리를 원활히 해주기 위해서는 onBackPressed() 메서드를 오버라이드 하기 보다는, onKeyDown() 메서드를 오버라이드해서 쓰는 것이 좋습니다. 


@Override    
public boolean onKeyDown(int keyCode, KeyEvent event) {    
    if(keyCode == KeyEvent.KEYCODE_BACK) {
         thread.interrupt();    	
    }
    return false;    
}

위와 같은 식으로 오버라이드해서 사용하면 됩니다.


return을 true로 하면 activity가 종료되지 않고, 
return을 false로 하면 activity가 종료됩니다. 
저작자 표시
신고
Posted by Code-Moon

댓글을 달아 주세요

안드로이드 버전 2.2 이상부터는 앱을 외부 저장장치에도 저장할 수 있게 됐습니다.




위의 링크를 따라가 보시면, 인스톨 위치를 설정하는 방법에 대한 원문을 보실 수 있습니다.


저는 좀 간단하게 설명을 드리죠.
인스톨 위치를 설정하기 위해서는 manifest 파일을 수정하시면 됩니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
... >

위에서 보면 android:installLocation="preferExternal" 부분이 중요한 부분이죠.


android:installLocation의 값을 무엇으로 주냐에 따라 인스톨 위치가 결정됩니다.
여기 예제에서는 preferExternal 였구요, 이는 외부 저장 장치(SD카드 등)에 기본적으로 저장을 하고, 만약 외부 저장 장치가 꽉 차면 내부에 저장을 하겠다는 뜻입니다.

preferExternal 말고도 autointernalOnly도 값으로 들어갈 수 있습니다.

auto는 기본적으로 내부에 저장을 하고, 내부에 공간이 없으면 외부에 저장을 하겠다는 뜻입니다.
internalOnly는 무조건 내부에만 저장을 하겠다는 뜻이죠.



참고!!! 

현재 개발 중인 안드로이드 라이브러리 버전이 2.2보다 낮다면 android:installLocation을 넣어주면 없는 속성이라고 에러를 발생시킵니다. 
그래서 프로젝트 오른 클릭 - Properties - Android - Project Build Target을 2.2 이상으로 해줘야합니다.
또한 manifest에서 android:minSdkVersion을 4정도로 해주는게 좋습니다. 보통 3이하로 하게 되면 필터링 문제가 생기기 때문에 4이상이 좋은 것 같습니다.


즉, 최종적인 메니페스트는 다음과 같이 구성되겠죠?

<manifest android:installLocation="preferExternal"
.......>
<application .......>
</application>
<user-sdk android:minSdkVersion="4" />
</manifest>
저작자 표시
신고
Posted by Code-Moon

댓글을 달아 주세요



안드로이드 마켓에서는 핸드폰의 특징에 맞게 검색할 때 앱을 필터링해서 보여줍니다.
그래서 분명 안드로이드 마켓에 앱을 올렸는데도,, 어떤 사람은 받을 수 있고, 어떤 사람은 받을 수 없는 거죠.

처음에는 이게 필터링 정책인지 모르고, 안드로이드 마켓의 버그인 줄 알았습니다.^^;;;;
그런데 검색을 해보니 안드로이드 마켓 필터링이란게 있더군요..ㅎ 
그래서 제가 아무것도 모르고 고생했던 과거를 회상하며, 저처럼 고생하실 다른 분들을 위해 이 글을 씁니다.



일단 이 필터링이 힘들었던게,, 앱을 만들 때에는 절대 알 수 없습니다.;; 이 앱이 어떤 디바이스에서 필터링 될지,,;;
에러도 아니고, 워닝(warning)도 안뜨고 그냥 당연한 정책일 뿐이죠..ㅎ 그래서 모르고 넘어가기 쉽습니다.

그런데 이게 apk 파일을 마켓에 올릴 때 뭔가 알려주더군요.. 마켓에서 말이죠.ㅎ
저는 별말 아닌줄 알고 그냥 넘겼었습니다...

참고 문서 : http://developer.android.com/guide/appendix/market-filters.html



마켓은 앱을 검색할 때 해당 핸드폰의 하드웨어와 소프트웨어 특성에 맞는 앱만을 보여줍니다. 

예를들어, 내가 가지고 있는 핸드폰이 가속도 센서를 지원하지 않는다고 가정해 보겠습니다.
하루는 친구가 하고 있는 "레이디 버그"라는 게임이 재미있어 보이길래 마켓에서 검색을 합니다. 그런데 한글, 영문을 통틀어 검색을 해도 도저히 해당 앱을 찾을 수가 없습니다. 
이러한 결과가 나오는 이유는 "레이디 버그"라는 게임은 가속도 센서가 지원되는 폰에서만 검색이 되도록 설정이 되어 있기 때문입니다. 

그렇다면 어디에서 어떻게 설정을 해야하는 걸까요? 바로 manifest파일입니다.
안드로이드 앱을 마켓에 올릴 정도까지 개발을 하신 경험이 있다면 manifest에 대해는 모를리 없다고 생각되므로 이 파일에 대한 설명은 제외하겠습니다.



이제 본격적으로 manifest의 어떤 앨리먼트를 신경써야하는지 알아보겠습니다.


1. <supports-screens>
이 엘리먼트는 어떤 스크린 사이즈를 지원하고 또 지원하지 않는지 명시해주는 부분입니다. 
안드로이드에서 스크린 사이즈는 large, normal, small 이렇게 3개로 나뉘고 디바이스마다 이 3개 중 하나의 스크린 사이즈를 가지게 되겠죠?
마켓은 더 큰 스크린 사이즈의 디바이스에서 더 작은 스크린 레이아웃이 잘 보일거라고 가정합니다. 그래서 large 사이즈의 핸드폰에서는 당연히 large 레이아웃을 지원하는 앱이 검색되고, 뿐만아니라 normal이나 small 레이아웃을 지원하는 앱도 검색이 됩니다.

만약 <supports-screens>속성을 manifest에서 사용하지 않는다면 어떻게 될까요? 마켓은 API의 레벨에 따라서 다르게 처리한다고 합니다.(manifest파일에 <uses-sdk android:minSdkVersion = "4"/>와 같이 삽입함으로써 API 레벨을 설정할 수 있습니다.)

  • 먼저, API 레벨 3에서는 <supports-screens>속성 자체가 정의되지 않았습니다. 그래서 마켓은 자동으로 이러한 레벨의 앱을 normal 사이즈 스크린이라고 보고, 검색시에 normal이나 large 스크린 디바이스에만 노출되도록 합니다. 만약 여러분이 manifest 파일에서 android:minSdkVersion을 3 이하로 해두셨다면, 마켓은 기본적으로 해당 앱을 small 스크린 디바이스에서는 검색되지 않도록 하겠죠. 이러한 앱을 small스크린 디바이스에서도 보이게 하고 싶으시다면, manifest파일의 <uses-sdk>android:minSdkVersion을 4 이상으로 설정하셔야 합니다.
  • 다음으로, API 레벨 4에서는 기본적으로 <supports-screens>의 모든 속성이 "true"로 되어 있습니다. 따라서 이러한 레벨의 앱은 마켓에서 기본적으로 모든 디바이스에 노출이 되겠죠. 즉, 하나도 필터링이 되지 않는 것입니다. 

<support-screens>에 대한 안드로이드 문서


2. <uses-configuration>
어떤 앱은 특정 하드웨어 기능을 요구할 수 있습니다. 이럴 경우에 마켓은 해당 기능을 가진 디바이스에서만 보이도록 해줍니다. 

  • 만약 개발자가 <uses-configuration android:reqFiveWayNav="true" /> 를 manifest에 추가한 앱을 마켓에 올렸다면,  five-way navigational control이 없는 디바이스에서 해당 앱을 검색해도 사용자는 그 앱을 찾을 수가 없습니다. 
  • 만약 <uses-configuration>을 사용하지 않는다면 필터링이 일어나지 않게되고, 모든 사용자가 해당 앱을 검색 결과로 볼 수 있습니다.
<uses-configuration>에 대한 안드로이드 문서


3. <uses-feature>
어떤 앱은 센서와 같이 디바이스의 특정 기능을 요구할 수도 있습니다. 이 기능은 Android 2.0(API 레벨 5)부터 적용됐습니다. 

<uses-feature>는 디바이스 특징과 관련된 것과 OpenGL-ES의 버전과 관련된 부분으로 나눌 수 있습니다.
먼저 디바이스의 특징과 관련된 부분을 살펴보겠습니다.
  • 만약 <uses-feature android:name="android.hardware.sensor.light" />를 manifest에 포함시켰다면, 마켓에서 검색할 때 light센서를 가지고 있는 디바이스만 해당 앱을 검색할 수 있을 겁니다.
  • <uses-feature> 를 사용하지 않는다면 모든 디바이스에서 검색에 노출됩니다.
다음으로 OpenGL-ES의 버전과 관련된 부분을 살펴보겠습니다.
  • 만약 여러개의 OpenGL-ES 버전을 지원하고 있어서 openGlEsVersion 속성을 여러번 사용했다면, 마켓에서는 사용한 버전 중 가장 높은 버전에 맞춰 검색 결과를 보여줄 것입니다.
  • 만약 openGlEsVersion 속성을 1.1로 지정한 앱이 있고, 사용자의 디바이스는 OpenGL-ES 2.0을 지원한다고 하겠습니다. 이럴 경우에 사용자가 마켓에서 해당 앱을 검색하면 당연히 필터링되지 않고 볼 수 있습니다.
  • manifest에 openGlEsVersion 속성을 지정하지 않으면, 해당 앱은 모든 유저에게 노출됩니다.
그런데 여기에서는 조금 주의해야할 부분이 있습니다! 
안드로이드의 센서같은 하드웨어적인 특징을 사용하는 앱은 manifest에 명시적으로 <uses-feature>를 적지 않아도 마켓에서 어떤 하드웨어 특징을 사용하는지 안다는 것입니다.
그래서 여러분의 앱이 모든 사용자에게 노출되게 하기 위해서는 이를 manifest에 명시할 필요가 있죠.

예를 들어 보겠습니다.
여러분의 앱이 빛 센서를 사용한다고 가정하겠습니다. 그런데 이 앱은 빛 센서가 없어도 동작하는데 큰 문제는 없습니다. 그래서 빛센서가 없는 디바이스에서도 사용할 수 있고, 그러한 사람들에게도 마켓에서 검색할 수 있도록 하고 싶습니다. 
이때 여러분은 manifest에 <uses-feature android:name="android.hardware.sensor.light" android:required="false"/>를 포함시켜야 합니다. 
만약에 이 부분을 쓰지 않거나 <uses-feature android:name="android.hardware.sensor.light" />라고만 쓴다면 빛 센서가 없는 장치에서는 마켓 검색이 안될 겁니다.

<uses-feature>에 대한 안드로이드 문서



3. <uses-library>
특정 라이브러리를 사용하는 경우에 사용하는 엘리먼트입니다.
  • com.google.android.maps 라이브러리를 사용하는 앱이 있고, 어떤 사용자의 디바이스에는 com.google.android.maps가 없다고 하면, 이 사용자한테는 해당 앱이 마켓에서 검색되지 않을 것 입니다.
  • manifest에 <uses-library>엘리먼트를 포함시키지 않은 경우에는 모든 사용자들에게 해당 앱을 노출시킬 것입니다.
<uses-library>에 대한 안드로이드 문서



4. <uses-permission>
정확히 말하자면 안드로이드 마켓에서 <uses-permission> 엘리먼트에 대한 필터링은 하지 않습니다. 하지만 하드웨어적인 permission을 요구하는 경우에는 <uses-feature>에 명시하지 않은 부분이라 하더라도 필터링을 하게 됩니다.



5. <uses-sdk>
이 엘리먼트는 API 레벨이 얼마인가를 명시하는 부분입니다. 
  • manifest 파일에  <uses-sdk android:minSdkVersion="3">이라고 명시되어 있는 앱이 있고, 사용자의 디바이스는 API 레벨이 2라면 해당 유저는 그 앱을 마켓에서 검색할 수 없습니다.
  • manifest 파일에 minSdkVersion을 명시하지 않았고, 앱에서는 API 레벨 3을 라이브러리로 사용한 앱이 있다고 가정하겠습니다. API 레벨이 2인 사용자가 이 앱을 검색한다면 이 앱을 검색 결과로 볼 수 있습니다. 이렇게 되는 이유는  minSdkVersion을 명시하지 않은 경우에 마켓에서는 기본적으로  minSdkVersion에 1을 대입하게 됩니다. 그리고  minSdkVersion이 이라는 것은 모든 버전에 다 지원이 된다는 말이므로 모든 사용자가 다 볼 수 있는 겁니다. 하지만 이런 경우에는 조심해야겠죠. 사용자의 API 레벨이 앱의 API 레벨보다 낮기때문에 런타임시에 오류가 발생할 가능성이 있습니다.
<uses-sdk>에 대한 안드로이드 문서


이상 안드로이드 개발자 사이트에서 참고한 부분이구요.
저는 실제로 앱을 등록할 때 <uses-sdk>에 minSdkVersion을 명시하지 않으니까 등록이 안됐던 것 같은데,, 이 문서에는 명시하지 않아도 된다고 되어있군요.


어쨌든 이러한 필터링 규칙들을 잘 알고 manifest를 작성하시면 원하시는 사용자 층에게 보이는 앱을 제작하실 수 있을 겁니다.^^
저작자 표시
신고
Posted by Code-Moon

댓글을 달아 주세요


어도비가 써드-파티 개발자에게 photoshop.com mobile for android 1.1을 사용하여 개발자의 애플리케이션에 포토샵 모바일의 기능을 넣을 수 있도록 한다고 밝혔다. photoshop.com mobile을 릴리즈한지 4달만에 나온 뉴스이다 . 물론 예전보다 더 업그레이드 되었다.



어도비의 Digital Imaging Rich Media Solutions의 부사장이자 general manager인 Doug Mack가 다음과 같이 말했다.
아이폰과는 다르게 안드로이드 플랫폼에서는 photoshop.com 에디터를 개발자가 넓게 활용할 수 있도록 해주었다.


photoshop.com mobile for android 1.1의 업데이트 버전에서는 Vibrant(boost photo colors), Pop(팝 아트 스타일) 같은 효과들이 추가된다. Soft Black and White, Warm Vintage 툴은 클래식적이고 고풍의 느낌을 내기 위해 사용될 수 있다. 다른 새로운 효과에는 Vignette Blur, White Glow, Rainbow 등이 포함된다.

photoshop.com mobile for android 1.1은 안드로이드 마켓에서 모든 나라에 무료로 제공된다.(물론 영어버전만 있다)
안드로이드 마켓에서 "photoshop.com"을 검색해보자.



원문 사이트 : http://www.mobilecrunch.com/2010/03/05/photoshop-editor-android/
안드로이드 앱에 포토샵 모바일을 통합하는 방법 : http://mobile.photoshop.com/android/developers.html
신고
Posted by Code-Moon

댓글을 달아 주세요

안드로이드 application을 만들기 위한 개발 환경을 구축해보자.

  1. 먼저 최신 버전의 Eclipse를 다운로드 한다.
    다운로드 링크 : http://www.eclipse.org/downloads/

    Eclipse홈페이지에서 Downloads 페이지를 보면 여러 개의 Eclipse Packages를 볼 수 있다.
    이 중에서 자바 개발자용 통합 팩인 Eclipse IDE for Java Developers를 다운받으면 된다.

    위 그림에서 오른쪽 빨간 사각형 부분을 보면 OS 선택하는 부분이 있는데 만약 자신의 운영체제가 Windows라면 Windows를 클릭하면 된다.

     

  2. 다음으로 할 일은 안드로이드 SDK를 다운받는 것이다.
    다운로드 링크 : http://developer.android.com/sdk/index.html

    여기에서도 마찬가지로 자신의 OS에 맞는 버전을 다운로드하면 된다.

     

  3. SDK의 다운로드가 끝났으면 Eclipse를 적절한 폴더에 압축을 풀고, 마찬가지로 SDK도 적절한 폴더에 압축을 푼다. (왠만하면 Eclipse 폴더 안에 Android SDK를 넣어두자)

     

  4. (내컴퓨터-오른클릭-속성-고급 탭-환경변수-시스템 변수) 에서 Path라는 변수를 찾은 다음에 그 안의 값에 내용을 추가해야 한다.
    이때 Path에는 여러 개의 값들이 존재하는데 이 값들을 구분지어 주는 것이 ;(세미콜론)이다. 따라서 Path 변수 값의 맨 마지막 부분에 ;이 없다면 ;을 적고 나서 아래의 내용을 추가해 주자.
    SDK가 있는 폴더\android-sdk-windows\tools
    (위의 경로는 버전에 따라 약간 다를 수도 있다. 중요한 것은 SDK가 있는 폴더의 tools폴더를 경로로 입력한다는 것이다.)

     

  5. 이클립스를 실행하여 (Help-Install New Software…)에 들어가서 Work With란에 https://dl-ssl.google.com/android/eclipse/ 를 입력한다.(안될 경우에는 https에서 s를 빼고 http://dl-ssl.google.com/android/eclipse/ 를 입력한다.)
    사이트가 추가되면 체크 박스를 체크하고 Next 버튼을 눌려서 install을 진행한다.

     

  6. 업데이트가 끝나면 이클립스를 재시작한다.

     

  7. (Window-Preferences)에 들어가서 왼쪽 패널의 Android를 선택하고 Browse버튼을 눌러서 안드로이드SDK가 설치된 폴더 경로를 입력한다. 제대로 입력되어도 별다른 변화가 없을 것이다.


  8. 위와 같은 화면이 나왔다면 제대로 입력을 한 것이고, 아래와 같은 화면이 나왔다면 경로를 다시 수정해야한다.(위쪽의 빨간 x표시가 안나오도록...)


    그리고 나서 OK를 눌러서 이클립스 메인 화면으로 돌아가면 툴바에 검은색의 핸드폰 모양 버튼이 있다. 그 버튼을 클릭하자.

    그러면 아래와 같은 화면을 볼 수 있다. 여기에서 Available Packages 로 간 다음에 체크 박스에 체크를 하고 Install Selected 버튼을 눌러 설치를 하면된다.




    이렇게 함으로써 안드로이드 개발 환경이 모두 구축된다. 이제 신나게 개발하는 일만 남았다!!!

신고
Posted by Code-Moon

댓글을 달아 주세요

  1. daisy 2010.03.17 15:20 신고 Address Modify/Delete Reply

    안드로이드 개발 공모전도 도전해보세요
    상금도 2천만원이나 된다니깐......참여상도 있구요
    글구 국내 이동통신회사 후원받는걸 보니 아마 나중에 취업할때도 특전이 주어질지도..
    www.twittpop.com에서 접수하면 된다네요...

  2. BlogIcon Code-Moon 2010.03.23 11:10 신고 Address Modify/Delete Reply

    네^^ 정보 감사합니다.
    얼마 전에 들은 정보인데 다른 분들도 보실 수 있게 올려둬야겠네요

안드로이드 역사이다.
한번 둘러보는 것도 괜찮을 듯.

사용자 삽입 이미지
출처 : http://itviewpoint.com/153275
신고
Posted by Code-Moon

댓글을 달아 주세요

  1. BlogIcon repair iphone 2011.06.15 22:11 신고 Address Modify/Delete Reply

    좋은 글 잘 보고 갑니다. 다음에도 또 좋은 글 기대 할께요. 퍼가도 되죠?

  

윈도우 모바일

(WM)

안드로이드

(Android)

아이폰

(iPhone)

개발 OS

Windows Only

Windows,
MacOSX,
Linux

MacOSX Only (include Hackintosh)

개발툴

Visual Studio 2005, 2008

Eclipse 3.3, 3.4

Xcode 3.1,
Interface Builder

프로그래밍 언어

Visual C++, C#,
VB.NET

Java

Objective-C

프레임워크
 or 런타임

MFC,
.NET Compact Framework

Android Application Framework,

Dalvik

Cocoa Touch

바이너리

.exe
(CLR)

.dex
(Dalvik executable)

.app

패키징

.cab

.apk

.zip

표에서 볼 수 있듯이 윈도우 모바일은 윈도우에서 Visual Studio를 사용해서 개발해야 한다.
즉, 윈도우를 OS로 채택하지 않은 개발자는 개발을 할 수 없고 Visual Studio가 없는 개발자 또한 개발에 참여할 수 없다. 우리나라의 입장에서 본다면 이러한 윈도우 모바일의 개발 환경은 그렇게 다가가기 어려운 개발환경은 아니라고 생각한다.


아이폰은 MacOSX에서 작업을 해야 하는데 윈도우가 판을 치는 우리나라에서는 이런 개발 환경은 정말 접하기 힘든 환경이다.


이에 비해 안드로이드의 경우에는 OS가 윈도우, MacOSX, 리눅스 중 하나라면 일단은 개발할 수 있는 환경이 된다. 그리고 개발 툴 또한 무료로 손쉽게 얻을 수 있는 Eclipse를 사용하기 때문에 개발 환경 구축에 아주 용이한 장점을 가지고 있다.


이렇게 개발 환경 상의 막강한 장점을 가지고 있는 안드로이드,

안드로이드는 open되어 있다. 언제든지 개발하고 싶다면 쉽게 뛰어들 수 있다!!!



당신도 이 대열에 참여해보지 않겠는가?!

신고
Posted by Code-Moon

댓글을 달아 주세요

티스토리 툴바