<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>GOODAY &gt; board &gt; 안드로이드</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android</link>
<description>테스트 버전 0.2 (2004-04-26)</description>
<language>ko</language>
<item>
<title>cordova (PhoneGap)</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=137</link>
<description><![CDATA[<span style="font-family: gulim; font-size: 9pt; line-height: 17px;">Cordova 설치 :&nbsp;</span><a href="http://skssk0909.blog.me/220073495575" target="_blank" style="font-size: 9pt;">http://skssk0909.blog.me/220073495575</a><div><br></div><div><h2 class="postTitle"><a href="http://helloworld.naver.com/helloworld/8180" target="_blank">PhoneGap을 이용한 앱 개발</a></h2></div>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:date>Fri, 06 Mar 2015 11:09:54 +0900</dc:date>
</item>
<item>
<title>안드로이드용 오픈소스 카메라 코드</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=136</link>
<description><![CDATA[안녕하세요 ~<BR><BR>최근 안드로이드 카메라를 작업할 일이 생겼습니다.<BR>(처음부터 만들자니 빡세고.. ㅠㅠ<BR>진행중인 프로젝트 성격이 사용자의 UX가 중요해서, <BR>메뉴만 약간 커스텀 할수 있고 기본 기능이 모두 구현되어있는 것을 찾다보니 구글 플랫폼소스 쪽의 카메라 앱이었습니다..)<BR><BR>마침 깃헙에 능력자느님이 이클립스에서 작업 할수 있도록 올려놓으셨네요..(QuickSnap 이라는 어플과 동일합니다)<BR>올려놓은 사람도 구글 2.3.3 플랫폼 소스에서 뽑아냈다고 합니다. (비디오기능은 제거)<BR><BR>라이센스는 아파치 2.0 입니다~<BR><BR>관련된 작업 하시는분들 참고하세요 ~]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Thu, 04 Apr 2013 09:31:22 +0900</dc:date>
</item>
<item>
<title> 웹페이지 소스 텍스트파일로 저장하기 </title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=134</link>
<description><![CDATA[<P>//넘겨주는 url인데 한글을 넘겨줄때 인코딩을 해서 넘겨줘야 한다는것!</P>
<P>String url_str = "<A href="http://map.naver.com/local/search.nhn?query" target=_blank><FONT color=#ff9900>http://map.naver.com/local/search.nhn?query</FONT></A>=";<BR>String searchName = URLEncoder.encode("부산 남구&nbsp; 감만2동 경명중국관");<BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; try {<BR>&nbsp; &nbsp; &nbsp;InputStream inputStream = new URL(url_str+searchName).openStream();<BR>&nbsp; &nbsp; &nbsp;InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8");<BR>&nbsp; &nbsp; &nbsp;BufferedReader br = new BufferedReader(isr);<BR>&nbsp; &nbsp; &nbsp;<BR>&nbsp; &nbsp; &nbsp;File file = new File("/mnt/sdcard/url.txt");<BR>&nbsp; &nbsp; &nbsp;OutputStream out = new FileOutputStream(file);<BR>&nbsp; &nbsp; &nbsp;writeFile(br, out);<BR>&nbsp; &nbsp; &nbsp;out.close();<BR>&nbsp; &nbsp; }<BR>&nbsp; &nbsp; catch (Exception e) {<BR>&nbsp; &nbsp; &nbsp;<BR>&nbsp; &nbsp; }<BR>&nbsp; &nbsp; finally {<BR>&nbsp; &nbsp; &nbsp;Toast.makeText(parsingtest.this, "저장완료", Toast.LENGTH_SHORT).show();<BR>&nbsp; &nbsp; }</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>//AndroidManifest.xml에 권한 추가하기</P>
<P>&lt;!-- 외부메모리에 저장할때 작성 --&gt;</P>
<P>&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; </P>
<P>&nbsp;</P>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Tue, 02 Apr 2013 16:59:13 +0900</dc:date>
</item>
<item>
<title>안드로이드 하이브리드 앱 - 1. WebView로 로컬 파일(HTML) 로드하기</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=133</link>
<description><![CDATA[<H2 class=title><A class=con_link href="http://devian.tistory.com/158" target=_blank _cssquery_UID="57"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 9pt">안드로이드 하이브리드 앱 - 1. WebView로 로컬 파일(HTML) 로드하기</SPAN></SPAN></A></H2>
<P>자료출처 : <A class=con_link href="http://devian.tistory.com/159" target=_blank>http://devian.tistory.com/159</A></P>
<P><BR></P>
<P>로컬 HTML(Java&#115;&#99;ript)과 App 영역이 통신(함수호출)을 함으로써 간단한 하이브리드 앱을 만들어볼 수 있다.<BR><BR><SPAN style="FONT-WEIGHT: bold">1. HTML에서 App 함수 호출</SPAN><BR>&nbsp;&nbsp; 1) 멤버로 android.os.Handler 를 생성한다. 호출 시 thread 처리를 위해서 이용된다.<BR>&nbsp; &nbsp; &nbsp; &nbsp; private final Handler handler = new Handler();<BR><BR>&nbsp;&nbsp; 2) App과 Java&#115;&#99;ript간 Bridge 클래스를 생성하고, 호출될 함수를 implement 한다.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (이 때 파리메터는 반드시 final로 선언)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java&#115;&#99;ript에서 호출시 별도의 Thread로 구동될 수 있도록 아래와 같이 구현한다.<BR><BR style="COLOR: rgb(17,42,117)"></P>
<DIV style="MARGIN-LEFT: 4em"><SPAN style="COLOR: rgb(25,61,169)">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; private class AndroidBridge {</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setMessage(final String arg) { // must be final</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler.post(new Runnable() {</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() {</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log.d("HybridApp", "setMessage("+arg+")");</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mTextView.setText(arg);</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN><BR><SPAN id=callbacknestdeviantistorycom1596775 style="HEIGHT: 1px; FLOAT: right; WIDTH: 1px"></SPAN><BR></DIV>
<DIV>&nbsp;&nbsp; 3) onCreate 함수에서 WebView에서 Java&#115;&#99;ript를 Enable 하고, Java&#115;&#99;riptInterface로 Bridge 인스턴스를 등록한다.<BR></DIV>
<DIV style="MARGIN-LEFT: 4em"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 웹뷰에서 자바스크립트실행가능</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mWebView.getSettings().setJava&#115;&#99;riptEnabled(true);</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Bridge 인스턴스 등록</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mWebView.addJava&#115;&#99;riptInterface(new AndroidBridge(), "HybridApp");</SPAN><BR></DIV>
<DIV><BR>&nbsp;&nbsp;&nbsp; 4) HTML 내에서 Java&#115;&#99;ript에서 선언된 함수를 다음과 같이 호출 한다.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.&lt;interfaceName&gt;.&lt;functionName&gt;<BR><BR></DIV>
<DIV style="MARGIN-LEFT: 4em"><SPAN style="COLOR: rgb(25,61,169)">&nbsp; window.HybridApp.setMessage(msg);</SPAN><BR></DIV>
<DIV><BR><BR style="FONT-WEIGHT: bold"><SPAN style="FONT-WEIGHT: bold">2. App에서 HTML의 Java&#115;&#99;ript 함수 호출</SPAN><BR>&nbsp;&nbsp; 이부분은 간단하다....HTML에거 링크걸 때를 생각하면 되는데....<BR>&nbsp;&nbsp; 그냥 버튼을 눌렀을 때 다음과 같이 호출하면 된다.<BR>&nbsp;&nbsp;&nbsp; mWebView.loadUrl("java&#115;&#99;ript:&lt;함수명&gt;('&lt;arg&gt;')");<BR><BR>&nbsp;&nbsp;&nbsp; 실제 구현은 다음과 같이 된다.<BR></DIV>
<DIV style="MARGIN-LEFT: 4em"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mButton.setOnClickListener( new OnClickListener(){</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void onClick(View view) {</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mWebView.loadUrl("java&#115;&#99;ript:setMessage('"+mEditText.getText()+"')");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</SPAN><BR style="COLOR: rgb(25,61,169)"><SPAN style="COLOR: rgb(25,61,169)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</SPAN><BR></DIV><BR>위의 방법으로 연결된 간단한 하이브리드 어플리케이션이다...<BR>
<DIV class="imageblock center" style="TEXT-ALIGN: center; CLEAR: both"><A class=con_link href="http://cfile29.uf.tistory.com/original/18107D114B9FA37D2A67B7" rel=lightbox target=_blank _cssquery_UID="59"><IMG id=image/18107D114B9FA37D2A67B7 style="CURSOR: pointer" alt="" src="http://cfile29.uf.tistory.com/image/18107D114B9FA37D2A67B7" width=336 height=496></A></DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Tue, 02 Apr 2013 16:58:44 +0900</dc:date>
</item>
<item>
<title>용어사전 참고에 바로갈수있는 링크 만들기 참조(javascript)</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=132</link>
<description><![CDATA[<P>&lt;&#115;&#99;ript&gt;<BR>var Str = "(111) (222) 경계값 분석(boundary value analysis) 참고.";</P>
<P>var name = Str.split("(");<BR>for(var i=0;i&lt;name.length; i++)<BR>{<BR>&nbsp;var tmp = name[i].split(") 참고");<BR>&nbsp;if(tmp.length &gt; 1){&nbsp;<BR>&nbsp;&nbsp;var link = "&lt;a href=''&gt;"+tmp[0]+"&lt;/a&gt;";<BR>&nbsp;&nbsp;document.write(link);<BR>&nbsp;&nbsp;document.write("&lt;br&gt;");<BR>&nbsp;}<BR>}<BR>&lt;/&#115;&#99;ript&gt;</P>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Thu, 07 Mar 2013 18:30:07 +0900</dc:date>
</item>
<item>
<title>page Curl(책장 넘기기 효과)</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=131</link>
<description><![CDATA[<DIV class=document_top_navy><A class=orange href="http://www.shop-wiz.com/document/android/index" target=_blank>Document Home</A></DIV>
<DIV class=explain>[설명]<BR>참조 : http://code.google.com/p/android-page-curl/<BR>상기사이트는 현재 리스트로 구현되어 있는 것을 아래처럼 viewer로서 구현해 보았습니다.<BR></DIV>pageCurlSample1.java <PRE class=highlight>package com.pageCurlSample1;

import android.app.Activity;
import android.os.Bundle;

public class pageCurlSample1 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        PageCurlView curlView;
        curlView = new PageCurlView(this);
        setContentView(curlView);
    }
    
    @Override
    public void onDestroy(){
    	super.onDestroy();
    	System.gc();
    	finish();
    }
}
	</PRE>PageCurlView.java <PRE class=highlight>package com.pageCurlSample1;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import android.text.TextPaint;
import android.view.MotionEvent;
import android.view.View;

/**
 * 
 * @author Moritz 'Moss' Wundke (b.thax.dcg@gmail.com)
 *
 */
public class PageCurlView extends View {
	
	/** Our Log tag */
	//private final static String TAG = "PageCurlView";
	
	// Debug text paint stuff
	private Paint mTextPaint;
	private TextPaint mTextPaintShadow;
	
	/** Px / Draw call */
	private int mCurlSpeed;
	
	/** Fixed update time used to create a smooth curl animation */
	private int mUpdateRate;
	
	/** The initial offset for x and y axis movements */
	private int mInitialEdgeOffset;
	
	/** The mode we will use */
	private int mCurlMode;
	
	/** Simple curl mode. Curl target will move only in one axis. */
	public static final int CURLMODE_SIMPLE = 0;
	
	/** Dynamic curl mode. Curl target will move on both X and Y axis. */
	public static final int CURLMODE_DYNAMIC = 1;
	
	/** Enable/Disable debug mode */
	private boolean bEnableDebugMode = false;
	
	/** The context which owns us */
	//private WeakReference<CONTEXT> mContext;
	
	/** Handler used to auto flip time based */
	private FlipAnimationHandler mAnimationHandler;
	
	/** Maximum radius a page can be flipped, by default it's the width of the view */
	private float mFlipRadius;
	
	/** Point used to move */
	private Vector2D mMovement;
	
	/** The finger position */
	private Vector2D mFinger;
	
	/** Movement point form the last frame */
	private Vector2D mOldMovement;
	
	/** Page curl edge */
	private Paint mCurlEdgePaint;
	
	/** Our points used to define the current clipping paths in our draw call */
	private Vector2D mA, mB, mC, mD, mE, mF, mOldF, mOrigin;
	
	/** Left and top offset to be applied when drawing */
	//private int mCurrentLeft, mCurrentTop;
	
	/** If false no draw call has been done */
	private boolean bViewDrawn;
	
	/** Defines the flip direction that is currently considered */
	private boolean bFlipRight;
	
	/** If TRUE we are currently auto-flipping */
	private boolean bFlipping;
	
	/** TRUE if the user moves the pages */
	//private boolean bUserMoves;

	/** Used to control touch input blocking */
	private boolean bBlockTouchInput = false;
	
	/** Enable input after the next draw event */
	private boolean bEnableInputAfterDraw = false;
	
	/** LAGACY The current foreground */
	private Bitmap mForeground;
	
	/** LAGACY The current background */
	private Bitmap mBackground;
	
	/** LAGACY List of pages, this is just temporal */
	private ArrayList<BITMAP> mPages;
	
	/** LAGACY Current selected page */
	private int mIndex = 0;
	
	/**
	 * Inner class used to represent a 2D point.
	 */
	private class Vector2D
	{
		public float x,y;
		public Vector2D(float x, float y)
		{
			this.x = x;
			this.y = y;
		}
		
		@Override
		public String toString() {
			// TODO Auto-generated method stub
			return "("+this.x+","+this.y+")";
		}
		
		public boolean equals(Object o) {
			if (o instanceof Vector2D) {
				Vector2D p = (Vector2D) o;
				return p.x == x &amp;&amp; p.y == y;
	        }
	        return false;
		}

		
		public Vector2D sum(Vector2D b) {
            return new Vector2D(x+b.x,y+b.y);
		}
		
		public Vector2D sub(Vector2D b) {
            return new Vector2D(x-b.x,y-b.y);
		}		

	    public float distanceSquared(Vector2D other) {
	    	float dx = other.x - x;
	    	float dy = other.y - y;

            return (dx * dx) + (dy * dy);
	    }
	
	    public float distance(Vector2D other) {
	            return (float) Math.sqrt(distanceSquared(other));
	    }
	    
	    public float dotProduct(Vector2D other) {
            return other.x * x + other.y * y;
	    }
		

		public Vector2D normalize() {
			float magnitude = (float) Math.sqrt(dotProduct(this));
            return new Vector2D(x / magnitude, y / magnitude);
		}
		
		public Vector2D mult(float scalar) {
	            return new Vector2D(x*scalar,y*scalar);
	    }
	}

	/**
	 * Inner class used to make a fixed timed animation of the curl effect.
	 */
	class FlipAnimationHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			PageCurlView.this.FlipAnimationStep();
		}

		public void sleep(long millis) {
			this.removeMessages(0);
			sendMessageDelayed(obtainMessage(0), millis);
		}
	}
    
	/**
	 * Base
	 * @param context
	 */
	public PageCurlView(Context context) {
		super(context);
		init(context);
		ResetClipEdge();
	}
	
	
	/**
	 * Initialize the view
	 */
	private final void init(Context context) {
		// Foreground text paint
		mTextPaint = new Paint();
		mTextPaint.setAntiAlias(true);
		mTextPaint.setTextSize(16);
		mTextPaint.setColor(0xFF000000);
		
		// The shadow
		mTextPaintShadow = new TextPaint();
		mTextPaintShadow.setAntiAlias(true);
		mTextPaintShadow.setTextSize(16);
		mTextPaintShadow.setColor(0x00000000);
		
		// Cache the context
		//mC&#111;&#110;text = new WeakReference<CONTEXT>(context);
		
		// Base padding
		setPadding(3, 3, 3, 3);
		
		// The focus flags are needed
		setFocusable(true);
		setFocusableInTouchMode(true);
		
		mMovement =  new Vector2D(0,0);
		mFinger = new Vector2D(0,0);
		mOldMovement = new Vector2D(0,0);
		
		// Create our curl animation handler
		mAnimati&#111;&#110;Handler = new FlipAnimationHandler();
		
		// Create our edge paint
		mCurlEdgePaint = new Paint();
		mCurlEdgePaint.setColor(Color.WHITE);
		mCurlEdgePaint.setAntiAlias(true);
		mCurlEdgePaint.setStyle(Paint.Style.FILL);
		mCurlEdgePaint.setShadowLayer(10, -5, 5, 0x99000000);
		
		// Set the default props, those come from an XML :D
		mCurlSpeed = 30;//30
		mUpdateRate = 33;//33
		mInitialEdgeOffset = 50;//20//초기 edge 부분의 값
		mCurlMode = 1;
		
		// LEGACY PAGE HANDLING!
		
		// Create pages
		mPages = new ArrayList<BITMAP>();
		mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.page1));
		mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.page2));
		
		// Create some sample images
		mForeground = mPages.get(0);
		mBackground = mPages.get(1);
	}
	
	/**
	 * Reset points to it's initial clip edge state
	 */
	public void ResetClipEdge()
	{
		// Set our base movement
		mMovement.x = mInitialEdgeOffset;
		mMovement.y = mInitialEdgeOffset;		
		mOldMovement.x = 0;
		mOldMovement.y = 0;		
		
		// Now set the points
		// TODO: OK, those points MUST come from our measures and
		// the actual bounds of the view!
		mA = new Vector2D(mInitialEdgeOffset, 0);
		mB = new Vector2D(this.getWidth(), this.getHeight());
		mC = new Vector2D(this.getWidth(), 0);
		mD = new Vector2D(0, 0);
		mE = new Vector2D(0, 0);
		mF = new Vector2D(0, 0);		
		mOldF = new Vector2D(0, 0);
		
		// The movement origin point
		mOrigin = new Vector2D(this.getWidth(), 0);
	}
	

	/**
	 * See if the current curl mode is dynamic
	 * @return TRUE if the mode is CURLMODE_DYNAMIC, FALSE otherwise
	 */
	public boolean IsCurlModeDynamic()
	{
		return mCurlMode == CURLMODE_DYNAMIC;
	}
	
	/**
	 * Set the curl speed.
	 * @param curlSpeed - New speed in px/frame
	 * @throws IllegalArgumentException if curlspeed &lt; 1
	 */
	public void SetCurlSpeed(int curlSpeed)
	{
		if ( curlSpeed &lt; 1 )
			throw new IllegalArgumentException("curlSpeed must be greated than 0");
		mCurlSpeed = curlSpeed;
	}
	
	/**
	 * Get the current curl speed
	 * @return int - Curl speed in px/frame
	 */
	public int GetCurlSpeed()
	{
		return mCurlSpeed;
	}
	
	/**
	 * Set the update rate for the curl animation
	 * @param updateRate - Fixed animation update rate in fps
	 * @throws IllegalArgumentException if updateRate &lt; 1
	 */
	public void SetUpdateRate(int updateRate)
	{
		if ( updateRate &lt; 1 )
			throw new IllegalArgumentException("updateRate must be greated than 0");
		mUpdateRate = updateRate;
	}
	
	/**
	 * Get the current animation update rate
	 * @return int - Fixed animation update rate in fps
	 */
	public int GetUpdateRate()
	{
		return mUpdateRate;
	}
	
	/**
	 * Set the initial pixel offset for the curl edge
	 * @param initialEdgeOffset - px offset for curl edge
	 * @throws IllegalArgumentException if initialEdgeOffset &lt; 0
	 */
	public void SetInitialEdgeOffset(int initialEdgeOffset)
	{
		if ( initialEdgeOffset &lt; 0 )
			throw new IllegalArgumentException("initialEdgeOffset can not negative");
		mInitialEdgeOffset = initialEdgeOffset;
	}
	
	/**
	 * Get the initial pixel offset for the curl edge
	 * @return int - px
	 */
	public int GetInitialEdgeOffset()
	{
		return mInitialEdgeOffset;
	}
	
	/**
	 * Set the curl mode.
     * @see #CURLMODE_SIMPLE
     * @see #CURLMODE_DYNAMIC
	 * @param curlMode
	 * @throws IllegalArgumentException if curlMode is invalid
	 */
	public void SetCurlMode(int curlMode)
	{
		if ( curlMode != CURLMODE_SIMPLE &amp;&amp;
			 curlMode != CURLMODE_DYNAMIC )
			throw new IllegalArgumentException("Invalid curlMode");
		mCurlMode = curlMode;
	}
	
	/**
	 * Return an integer that represents the current curl mode.
     * @see #CURLMODE_SIMPLE
     * @see #CURLMODE_DYNAMIC
     * @return int - current curl mode
	 */
	public int GetCurlMode()
	{
		return mCurlMode;
	}
	
	/**
	 * Enable debug mode. This will draw a lot of data in the view so you can track what is happening
	 * @param bFlag - boolean flag
	 */
	public void SetEnableDebugMode(boolean bFlag)
	{
		bEnableDebugMode = bFlag;
	}
	
	/**
	 * Check if we are currently in debug mode.
	 * @return boolean - If TRUE debug mode is on, FALSE otherwise.
	 */
	public boolean IsDebugModeEnabled()
	{
		return bEnableDebugMode;
	}

	/**
	 * @see android.view.View#measure(int, int)
	 */
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int finalWidth, finalHeight;
		finalWidth = measureWidth(widthMeasureSpec);
		finalHeight = measureHeight(heightMeasureSpec);
		setMeasuredDimension(finalWidth, finalHeight);
	}

	/**
	 * Determines the width of this view
	 * @param measureSpec A measureSpec packed into an int
	 * @return The width of the view, honoring constraints from measureSpec
	 */
	private int measureWidth(int measureSpec) {
		int result = 0;
		int specMode = MeasureSpec.getMode(measureSpec);
		int specSize = MeasureSpec.getSize(measureSpec);
		
		if (specMode == MeasureSpec.EXACTLY) {
			// We were told how big to be
			result = specSize;
		} else {
			// Measure the text
			result = specSize;
		}
		
		return result;
	}

	/**
	 * Determines the height of this view
	 * @param measureSpec A measureSpec packed into an int
	 * @return The height of the view, honoring constraints from measureSpec
	 */
	private int measureHeight(int measureSpec) {
		int result = 0;
		int specMode = MeasureSpec.getMode(measureSpec);
		int specSize = MeasureSpec.getSize(measureSpec);
		
		if (specMode == MeasureSpec.EXACTLY) {
			// We were told how big to be
			result = specSize;
		} else {
			// Measure the text (beware: ascent is a negative number)
			result = specSize;
		}
		return result;
	}

	
	//---------------------------------------------------------------
	// Curling. This handles touch events, the actual curling
	// implementations and so on.
	//---------------------------------------------------------------
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (!bBlockTouchInput) {
			
			// Get our finger position
			mFinger.x = event.getX();
			mFinger.y = event.getY();
			int width = getWidth();
			
			// Depending on the action do what we need to
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:				
				mOldMovement.x = mFinger.x;
				mOldMovement.y = mFinger.y;
				
				// If we moved over the half of the display flip to next
				if (mOldMovement.x &gt; (width &gt;&gt; 1)) {
					mMovement.x = mInitialEdgeOffset;
					mMovement.y = mInitialEdgeOffset;
					
					// Set the right movement flag
					bFlipRight = true;
				} else {
					// Set the left movement flag
					bFlipRight = false;
					
					// go to next previous page
					previousView();
					
					// Set new movement
					mMovement.x = IsCurlModeDynamic()?width&lt;&lt;1:width;
					mMovement.y = mInitialEdgeOffset;
				}
				
				break;
			case MotionEvent.ACTION_UP:				
				//bUserMoves=false;
				bFlipping=true;
				FlipAnimationStep();
				break;
			case MotionEvent.ACTION_MOVE:
				//bUserMoves=true;
				
				// Get movement
				mMovement.x -= mFinger.x - mOldMovement.x;
				mMovement.y -= mFinger.y - mOldMovement.y;
				mMovement = CapMovement(mMovement, true);
				
				// Make sure the y value get's locked at a nice level
				if ( mMovement.y  &lt;= 1 )
					mMovement.y = 1;
				
				// Get movement direction
				if (mFinger.x &lt; mOldMovement.x ) {
					bFlipRight = true;
				} else {
					bFlipRight = false;
				}
				
				// Save old movement values
				mOldMovement.x  = mFinger.x;
				mOldMovement.y  = mFinger.y;
				
				// Force a new draw call
				DoPageCurl();
				this.invalidate();
				break;
			}

		}
		
		// TODO: Only consume event if we need to.
		return true;
	}
	
	/**
	 * Make sure we never move too much, and make sure that if we 
	 * move too much to add a displacement so that the movement will 
	 * be still in our radius.
	 * @param radius - radius form the flip origin
	 * @param bMaintainMoveDir - Cap movement but do not change the
	 * current movement direction
	 * @return Corrected point
	 */
	private Vector2D CapMovement(Vector2D point, boolean bMaintainMoveDir)
	{
		// Make sure we never ever move too much
		if (point.distance(mOrigin) &gt; mFlipRadius)
		{
			if ( bMaintainMoveDir )
			{
				// Maintain the direction
				point = mOrigin.sum(point.sub(mOrigin).normalize().mult(mFlipRadius));
			}
			else
			{
				// Change direction
				if ( point.x &gt; (mOrigin.x+mFlipRadius))
					point.x = (mOrigin.x+mFlipRadius);
				else if ( point.x &lt; (mOrigin.x-mFlipRadius) )
					point.x = (mOrigin.x-mFlipRadius);
				point.y = (float) (Math.sin(Math.acos(Math.abs(point.x-mOrigin.x)/mFlipRadius))*mFlipRadius);
			}
		}
		return point;
	}
	
	/**
	 * Execute a step of the flip animation
	 */
	public void FlipAnimationStep() {
		if ( !bFlipping )
			return;
		
		int width = getWidth();
			
		// No input when flipping
		bBlockTouchInput = true;
		
		// Handle speed
		float curlSpeed = mCurlSpeed;
		if ( !bFlipRight )
			curlSpeed *= -1;
		
		// Move us
		mMovement.x += curlSpeed;
		mMovement = CapMovement(mMovement, false);
		
		// Create values
		DoPageCurl();
		
		// Check for endings :D
		if (mA.x &lt; 1 || mA.x &gt; width - 1) {
			bFlipping = false;
			if (bFlipRight) {
				//SwapViews();
				nextView();
			} 
			ResetClipEdge();
			
			// Create values
			DoPageCurl();

			// Enable touch input after the next draw event
			bEnableInputAfterDraw = true;
		}
		else
		{
			mAnimationHandler.sleep(mUpdateRate);
		}
		
		// Force a new draw call
		this.invalidate();
	}
	
	/**
	 * Do the page curl depending on the methods we are using
	 */
	private void DoPageCurl()
	{
		if(bFlipping){
			if ( IsCurlModeDynamic() )
				doDynamicCurl();
			else
				doSimpleCurl();
			
		} else {
			if ( IsCurlModeDynamic() )
				doDynamicCurl();
			else
				doSimpleCurl();
		}
	}
	
	/**
	 * Do a simple page curl effect
	 */
	private void doSimpleCurl() {
		int width = getWidth();
		int height = getHeight();
		
		// Calculate point A
		mA.x = width - mMovement.x;
		mA.y = height;

		// Calculate point D
		mD.x = 0;
		mD.y = 0;
		if (mA.x &gt; width / 2) {
			mD.x = width;
			mD.y = height - (width - mA.x) * height / mA.x;
		} else {
			mD.x = 2 * mA.x;
			mD.y = 0;
		}
		
		// Now calculate E and F taking into account that the line
		// AD is perpendicular to FB and EC. B and C are fixed points.
		double angle = Math.atan((height - mD.y) / (mD.x + mMovement.x - width));
		double _cos = Math.cos(2 * angle);
		double _sin = Math.sin(2 * angle);

		// And get F
		mF.x = (float) (width - mMovement.x + _cos * mMovement.x);
		mF.y = (float) (height - _sin * mMovement.x);
		
		// If the x position of A is above half of the page we are still not
		// folding the upper-right edge and so E and D are equal.
		if (mA.x &gt; width / 2) {
			mE.x = mD.x;
			mE.y = mD.y;
		}
		else
		{
			// So get E
			mE.x = (float) (mD.x + _cos * (width - mD.x));
			mE.y = (float) -(_sin * (width - mD.x));
		}
	}

	/**
	 * Calculate the dynamic effect, that one that follows the users finger
	 */
	private void doDynamicCurl() {
		int width = getWidth();
		int height = getHeight();

		// F will follow the finger, we add a small displacement
		// So that we can see the edge
		mF.x = width - mMovement.x+0.1f;
		mF.y = height - mMovement.y+0.1f;
		
		// Set min points
		if(mA.x==0) {
			mF.x= Math.min(mF.x, mOldF.x);
			mF.y= Math.max(mF.y, mOldF.y);
		}
		
		// Get diffs
		float deltaX = width-mF.x;
		float deltaY = height-mF.y;

		float BH = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY) / 2);
		double tangAlpha = deltaY / deltaX;
		double alpha = Math.atan(deltaY / deltaX);
		double _cos = Math.cos(alpha);
		double _sin = Math.sin(alpha);
		
		mA.x = (float) (width - (BH / _cos));
		mA.y = height;
		
		mD.y = (float) (height - (BH / _sin));
		mD.x = width;

		mA.x = Math.max(0,mA.x);
		if(mA.x==0) {
			mOldF.x = mF.x;
			mOldF.y = mF.y;
		}
		
		// Get W
		mE.x = mD.x;
		mE.y = mD.y;
		
		// Correct
		if (mD.y &lt; 0) {
			mD.x = width + (float) (tangAlpha * mD.y);
			mE.y = 0;
			mE.x = width + (float) (Math.tan(2 * alpha) * mD.y);
		}
	}

	/**
	 * Swap between the fore and back-ground.
	 */
	/*
	@Deprecated
	private void SwapViews() {
		Bitmap temp = mForeground;
		mForeground = mBackground;
		mBackground = temp;
	}
	*/
	/**
	 * Swap to next view
	 */
	private void nextView() {
		int foreIndex = mIndex + 1;
		if(foreIndex &gt;= mPages.size()) {
			foreIndex = 0;
		}
		int backIndex = foreIndex + 1;
		if(backIndex &gt;= mPages.size()) {
			backIndex = 0;
		}
		mIndex = foreIndex;
		setViews(foreIndex, backIndex);
	}
	
	/**
	 * Swap to previous view
	 */
	private void previousView() {
		int backIndex = mIndex;
		int foreIndex = backIndex - 1;
		if(foreIndex &lt; 0) {
			foreIndex = mPages.size()-1;
		}
		mIndex = foreIndex;
		setViews(foreIndex, backIndex);
	}
	
	/**
	 * Set current fore and background
	 * @param foreground - Foreground view index
	 * @param background - Background view index
	 */
	private void setViews(int foreground, int background) {
		mForeground = mPages.get(foreground);
		mBackground = mPages.get(background);
	}
	
	//---------------------------------------------------------------
	// Drawing methods
	//---------------------------------------------------------------

	@Override
	protected void onDraw(Canvas canvas) {
		// Always refresh offsets
		//mCurrentLeft = getLeft();
		//mCurrentTop = getTop();
		
		// Translate the whole canvas
		//canvas.translate(mCurrentLeft, mCurrentTop);
		
		// We need to initialize all size data when we first draw the view
		if ( !bViewDrawn ) {
			bViewDrawn = true;
			onFirstDrawEvent(canvas);
		}
		
		canvas.drawColor(Color.WHITE);
		
		// Curl pages
		//DoPageCurl();
		
		// TODO: This just scales the views to the current
		// width and height. We should add some logic for:
		//  1) Maintain aspect ratio
		//  2) Uniform scale
		//  3) ...
		Rect rect = new Rect();
		rect.left = 0;
		rect.top = 0;
		rect.bottom = getHeight();
		rect.right = getWidth();
		
		// First Page render
		Paint paint = new Paint();
		
		// Draw our elements
		drawForeground(canvas, rect, paint);
		drawBackground(canvas, rect, paint);
		drawCurlEdge(canvas);
		
		// Draw any debug info once we are done
		if ( bEnableDebugMode )

			drawDebug(canvas);

		// Check if we can re-enable input
		if ( bEnableInputAfterDraw )
		{
			bBlockTouchInput = false;
			bEnableInputAfterDraw = false;
		}
		
		// Restore canvas
		//canvas.restore();
	}
	
	/**
	 * Called on the first draw event of the view
	 * @param canvas
	 */
	protected void onFirstDrawEvent(Canvas canvas) {
		
		mFlipRadius = getWidth();
		
		ResetClipEdge();
		DoPageCurl();
	}
	
	/**
	 * Draw the foreground
	 * @param canvas
	 * @param rect
	 * @param paint
	 */
	private void drawForeground( Canvas canvas, Rect rect, Paint paint ) {
		canvas.drawBitmap(mForeground, null, rect, paint);
		
		// Draw the page number (first page is 1 in real life :D 
		// there is no page number 0 hehe)
		drawPageNum(canvas, mIndex);
	}
	
	/**
	 * Create a Path used as a mask to draw the background page
	 * @return
	 */
	private Path createBackgroundPath() {
		Path path = new Path();
		path.moveTo(mA.x, mA.y);
		path.lineTo(mB.x, mB.y);
		path.lineTo(mC.x, mC.y);
		path.lineTo(mD.x, mD.y);
		path.lineTo(mA.x, mA.y);
		return path;
	}
	
	/**
	 * Draw the background image.
	 * @param canvas
	 * @param rect
	 * @param paint
	 */
	private void drawBackground( Canvas canvas, Rect rect, Paint paint ) {
		Path mask = createBackgroundPath();
		
		// Save current canvas so we do not mess it up
		canvas.save();
		canvas.clipPath(mask);
		canvas.drawBitmap(mBackground, null, rect, paint);
		
		// Draw the page number (first page is 1 in real life :D 
		// there is no page number 0 hehe)
		drawPageNum(canvas, mIndex);
		
		canvas.restore();
	}
	
	/**
	 * Creates a path used to draw the curl edge in.
	 * @return
	 */
	private Path createCurlEdgePath() {
		Path path = new Path();
		path.moveTo(mA.x, mA.y);
		path.lineTo(mD.x, mD.y);
		path.lineTo(mE.x, mE.y);
		path.lineTo(mF.x, mF.y);
		path.lineTo(mA.x, mA.y);
		return path;
	}
	
	/**
	 * Draw the curl page edge
	 * @param canvas
	 */
	private void drawCurlEdge( Canvas canvas )
	{
		Path path = createCurlEdgePath();
		canvas.drawPath(path, mCurlEdgePaint);
	}
	
	/**
	 * Draw page num (let this be a bit more custom)
	 * @param canvas
	 * @param pageNum
	 */
	private void drawPageNum(Canvas canvas, int pageNum)
	{
		mTextPaint.setColor(Color.WHITE);
		String pageNumText = "- "+pageNum+" -";
		drawCentered(canvas, pageNumText,canvas.getHeight()-mTextPaint.getTextSize()-5,mTextPaint,mTextPaintShadow);
	}
	
	//---------------------------------------------------------------
	// Debug draw methods
	//---------------------------------------------------------------
	
	/**
	 * Draw a text with a nice shadow
	 */
	public static void drawTextShadowed(Canvas canvas, String text, float x, float y, Paint textPain, Paint shadowPaint) {
    	canvas.drawText(text, x-1, y, shadowPaint);
    	canvas.drawText(text, x, y+1, shadowPaint);
    	canvas.drawText(text, x+1, y, shadowPaint);
    	canvas.drawText(text, x, y-1, shadowPaint);    	
    	canvas.drawText(text, x, y, textPain);
    }
	
	/**
	 * Draw a text with a nice shadow centered in the X axis
	 * @param canvas
	 * @param text
	 * @param y
	 * @param textPain
	 * @param shadowPaint
	 */
	public static void drawCentered(Canvas canvas, String text, float y, Paint textPain, Paint shadowPaint)
	{
		float posx = (canvas.getWidth() - textPain.measureText(text))/2;
		drawTextShadowed(canvas, text, posx, y, textPain, shadowPaint);
	}
	
	/**
	 * Draw debug info
	 * @param canvas
	 */
	private void drawDebug(Canvas canvas)
	{
		float posX = 10;
		float posY = 20;
		
		Paint paint = new Paint();
		paint.setStrokeWidth(5);
		paint.setStyle(Style.STROKE);
		
		paint.setColor(Color.BLACK);		
		canvas.drawCircle(mOrigin.x, mOrigin.y, getWidth(), paint);
		
		paint.setStrokeWidth(3);
		paint.setColor(Color.RED);		
		canvas.drawCircle(mOrigin.x, mOrigin.y, getWidth(), paint);
		
		paint.setStrokeWidth(5);
		paint.setColor(Color.BLACK);
		canvas.drawLine(mOrigin.x, mOrigin.y, mMovement.x, mMovement.y, paint);
		
		paint.setStrokeWidth(3);
		paint.setColor(Color.RED);
		canvas.drawLine(mOrigin.x, mOrigin.y, mMovement.x, mMovement.y, paint);
		
		posY = debugDrawPoint(canvas,"A",mA,Color.RED,posX,posY);
		posY = debugDrawPoint(canvas,"B",mB,Color.GREEN,posX,posY);
		posY = debugDrawPoint(canvas,"C",mC,Color.BLUE,posX,posY);
		posY = debugDrawPoint(canvas,"D",mD,Color.CYAN,posX,posY);
		posY = debugDrawPoint(canvas,"E",mE,Color.YELLOW,posX,posY);
		posY = debugDrawPoint(canvas,"F",mF,Color.LTGRAY,posX,posY);
		posY = debugDrawPoint(canvas,"Mov",mMovement,Color.DKGRAY,posX,posY);
		posY = debugDrawPoint(canvas,"Origin",mOrigin,Color.MAGENTA,posX,posY);
		posY = debugDrawPoint(canvas,"Finger",mFinger,Color.GREEN,posX,posY);
		
	}
	
	private float debugDrawPoint(Canvas canvas, String name, Vector2D point, int color, float posX, float posY) {	
		return debugDrawPoint(canvas,name+" "+point.toString(),point.x, point.y, color, posX, posY);
	}
	
	private float debugDrawPoint(Canvas canvas, String name, float X, float Y, int color, float posX, float posY) {
		mTextPaint.setColor(color);
		drawTextShadowed(canvas,name,posX , posY, mTextPaint,mTextPaintShadow);
		Paint paint = new Paint();
		paint.setStrokeWidth(5);
		paint.setColor(color);	
		canvas.drawPoint(X, Y, paint);
		return posY+15;
	}

}
</PRE>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Wed, 23 Jan 2013 16:07:24 +0900</dc:date>
</item>
<item>
<title>Cocos2D</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=130</link>
<description><![CDATA[* Android<BR>Cocos2D-Android를 사용하기 위한 준비 작업<BR><A href="http://blaswan.wordpress.com/2012/12/18/%EA%B0%95%EC%A2%8C-cocos2d-android%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%A4%80%EB%B9%84-%EC%9E%91%EC%97%85/" target=_blank>http://blaswan.wordpress.com/2012/12/18/%EA%B0%95%EC%A2%8C-cocos2d-android%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%A4%80%EB%B9%84-%EC%9E%91%EC%97%85/</A>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Mon, 07 Jan 2013 13:04:40 +0900</dc:date>
</item>
<item>
<title>주옥같은 안드로이드 팁</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=127</link>
<description><![CDATA[<P>
<TABLE style="TEXT-ALIGN: left; WIDTH: 569pt; BORDER-COLLAPSE: collapse" border=0 cellSpacing=0 cellPadding=0 width=757 cssquery_uid="262">
<TBODY>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); WIDTH: 327pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" width=435 colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">스크린(screen) On / OFF 인덴트 수신하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); WIDTH: 219pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68 width=292><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5391&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">스크린(screen) On / OFF 인덴트 수신하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">ScrollView에 ListView 넣을수 없다.</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5385&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">ScrollView에 ListView 넣을수 없다.</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">View.getTag/setTag and IllegalArgumentException 가 발생하면...</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5384&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">View.getTag/setTag and IllegalArgumentException 가 발생하면...</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">View에 뭔가 데이터를 집어넣을때 setTag / getTag</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5381&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">View에 뭔가 데이터를 집어넣을때 setTag / getTag</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">태그 설명</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5350&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">태그 설명</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">멀티터치(Multi Touch) 상태 여부</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5349&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">멀티터치(Multi Touch) 상태 여부</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">Android Orientation System 이미지</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5334&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Android Orientation System 이미지</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">Orientation Sensor Tips in Android</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5333&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Orientation Sensor Tips in Android</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">액티버티 상태 정보 저장</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5331&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">액티버티 상태 정보 저장</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">동적으로 Locale 설정 변경하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5330&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">동적으로 Locale 설정 변경하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 샘플 예제</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5325&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 샘플 예제</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">아이폰용 OpenGL ES 강좌</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5312&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">아이폰용 OpenGL ES 강좌</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">OpenGL ES 함수정리</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5311&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">OpenGL ES 함수정리</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">openGL ES 관련 내용 링크</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5308&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">openGL ES 관련 내용 링크</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">버튼 클릭하기(프로그래밍 상에서..)</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=7&amp;menuid=14&amp;boardtype=L&amp;articleid=5305&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">버튼 클릭하기(프로그래밍 상에서..)</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">동적으로 외부의 jar 파일 로딩하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3774&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">동적으로 외부의 jar 파일 로딩하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">Parcelable Interface를 이용한 Activity 간에 데이터 전송</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3721&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Parcelable Interface를 이용한 Activity 간에 데이터 전송</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">여러 다이얼로그 사용예제</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3716&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">여러 다이얼로그 사용예제</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 멀티랭귀지 구현</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3712&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 멀티랭귀지 구현</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">화면 해상도 구하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3708&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">화면 해상도 구하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">Service내 비동기 호출 가능한 oneway 메소드 선언</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3695&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Service내 비동기 호출 가능한 oneway 메소드 선언</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">WebView, SimpleGestureListener 사용예</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3686&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">WebView, SimpleGestureListener 사용예</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">부팅시 서비스 실행하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3685&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">부팅시 서비스 실행하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">android 용 package와 jar 어떻게 만드나요.. !</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3669&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">android 용 package와 jar 어떻게 만드나요.. !</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 애플리케이션 배포방법</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3668&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 애플리케이션 배포방법</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">Toolchain 이란</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3664&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Toolchain 이란</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 AIDL 문법(Android AIDL Syntax)</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3650&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">안드로이드 AIDL 문법(Android AIDL Syntax)</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">NDK (JNI) 설치 관련 정보</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3637&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">NDK (JNI) 설치 관련 정보</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">전화 수신 감지하기 (recognize incoming phonecall)</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3613&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">전화 수신 감지하기 (recognize incoming phonecall)</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">inbox내 SMS 문자 삭제하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=16&amp;menuid=14&amp;boardtype=L&amp;articleid=3612&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">inbox내 SMS 문자 삭제하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">onSaveInstanceState / onRestoreInstanceState</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5552&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">onSaveInstanceState / onRestoreInstanceState</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">안테나 영역 없애기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5551&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">안테나 영역 없애기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">View mode를 Portrait 나 Landscape로 고정하고 싶을때</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5550&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">View mode를 Portrait 나 Landscape로 고정하고 싶을때</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">화면이 가로/세로 모드로 전환시 onDestroy()가 호출되지 않도록 하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5549&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">화면이 가로/세로 모드로 전환시 onDestroy()가 호출되지 않도록 하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">OpenGL ES 관련 자료 링크</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5534&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">OpenGL ES 관련 자료 링크</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">WebView에서 Html 태그 추출하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5519&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">WebView에서 Html 태그 추출하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">WebView에서 alert 기능 추가</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5516&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">WebView에서 alert 기능 추가</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">WebView 페이지가 로딩되었을때 처리</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5515&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">WebView 페이지가 로딩되었을때 처리</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">개발시 성능에 대해서 고려해야 할사항</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5484&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">개발시 성능에 대해서 고려해야 할사항</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">WebView를 사용한 앨범 구현</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5482&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">WebView를 사용한 앨범 구현</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">GestureDetector 사용예</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5479&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">GestureDetector 사용예</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">SAXParser (XML 파서) 사용예제</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5469&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">SAXParser (XML 파서) 사용예제</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">ViewSwitcher 사용예</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5423&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">ViewSwitcher 사용예</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">Traceview (Graphical Log Viewer)</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5413&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">Traceview (Graphical Log Viewer)</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">실행중인 프로세스 목록 알아내기 (ActivityManager)</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=6&amp;menuid=14&amp;boardtype=L&amp;articleid=5394&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">실행중인 프로세스 목록 알아내기 (ActivityManager)</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3><SPAN style="FONT-SIZE: 8pt">단말기 폰번호 알아내기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)"><FONT size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=15&amp;menuid=14&amp;boardtype=L&amp;articleid=3958&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">단말기 폰번호 알아내기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">네트웍 연결, 와이파이, 3G 설정하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=15&amp;menuid=14&amp;boardtype=L&amp;articleid=3957&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">네트웍 연결, 와이파이, 3G 설정하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">MediaStore 사용하여 이미지의 폴더명 알아내기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=15&amp;menuid=14&amp;boardtype=L&amp;articleid=3904&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">MediaStore 사용하여 이미지의 폴더명 알아내기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE: 8pt">애플리케이션내 아이콘 추가하기</SPAN></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" class=xl68><A style="WORD-WRAP: break-word; TEXT-DECORATION: none" class=con_link href="http://cafe.naver.com/ArticleRead.nhn?clubid=17198535&amp;page=15&amp;menuid=14&amp;boardtype=L&amp;articleid=3903&amp;referrerAllArticles=false" target=_blank><FONT color=#3649ae size=3><SPAN style="FONT-SIZE: 8pt">애플리케이션내 아이콘 추가하기</SPAN></FONT></A></TD></TR>
<TR style="HEIGHT: 13.5pt" height=18>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); HEIGHT: 13.5pt; BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" height=18><FONT color=#3649ae size=3></FONT></TD>
<TD style="BORDER-BOTTOM-COLOR: rgb(236,233,216); BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: rgb(236,233,216); BORDER-RIGHT-COLOR: rgb(236,233,216); FONT-SIZE: 12px; BORDER-LEFT-COLOR: rgb(236,233,216)" colSpan=2><FONT size=3><SPAN style="FONT-SIZE:</table>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Fri, 14 Dec 2012 13:39:50 +0900</dc:date>
</item>
<item>
<title>안드로이드 apk 디컴파일(Decompile)하기</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=124</link>
<description><![CDATA[<P style="MARGIN-LEFT: 0px"><SPAN style="COLOR: rgb(0,0,0); FONT-SIZE: 11pt"><STRONG><SPAN style="COLOR: rgb(255,108,0)">* APK파일 디컴파일(Decompile)하는 방법</SPAN></STRONG></SPAN></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">1. 디컴파일을 위한 툴 설치</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">1.ApkTool</P>
<P style="MARGIN-LEFT: 80px">- 다운로드 : <A class=con_link href="http://code.google.com/p/android-apktool/downloads/list" target=_blank>http://code.google.com/p/android-apktool/downloads/list</A></P>
<P style="MARGIN-LEFT: 120px"><IMG style="CURSOR: pointer; rwidth: 480px; rheight: 216px" id=20110623_119/man8408_1308808497035g1Tgz_JPEG/android-apktool.jpg class=_photoImage src="http://postfiles8.naver.net/20110623_119/man8408_1308808497035g1Tgz_JPEG/android-apktool.jpg?type=w2" width=480 height=216></P>
<P style="MARGIN-LEFT: 80px">- 압축풀기 : android-sdk가 설치된 platform-tools디렉토리안에 apktool디렉토리를 만들어 압축을 푼다.</P>
<P style="MARGIN-LEFT: 80px">apktool1.4.1.tar.bz2</P>
<P style="MARGIN-LEFT: 80px">apktool-install-windows-r04-brut1.tar.bz2</P>
<P style="MARGIN-LEFT: 120px"><IMG style="CURSOR: pointer; rwidth: 480px; rheight: 238px" id=20110623_86/man8408_1308809504690On3LV_JPEG/directory1.jpg class=_photoImage src="http://postfiles7.naver.net/20110623_86/man8408_1308809504690On3LV_JPEG/directory1.jpg?type=w2" width=480 height=238></P>
<P style="MARGIN-LEFT: 40px"></P>
<P style="MARGIN-LEFT: 40px">2.Dex2Jar</P>
<P style="MARGIN-LEFT: 80px">- 다운로드 : <A class=con_link href="http://code.google.com/p/dex2jar/downloads/list" target=_blank>http://code.google.com/p/dex2jar/downloads/list</A></P>
<P style="MARGIN-LEFT: 120px"><IMG style="CURSOR: pointer; rwidth: 480px; rheight: 176px" id=20110623_21/man8408_1308808678669CnvIy_JPEG/dex2jar.jpg class=_photoImage src="http://postfiles6.naver.net/20110623_21/man8408_1308808678669CnvIy_JPEG/dex2jar.jpg?type=w2" width=480 height=176><BR></P>
<P style="MARGIN-LEFT: 80px">- 압축풀기 : android-sdk가 설치된 platform-tools디렉토리안에 dex2jar디렉토리를 만들어 압축을 푼다.</P>
<P style="MARGIN-LEFT: 80px">dex2jar-0.0.7.10-SNAPSHOT.zip</P>
<P style="MARGIN-LEFT: 120px"><IMG style="CURSOR: pointer; rwidth: 480px; rheight: 238px" id=20110623_142/man8408_1308809674978SxqlC_JPEG/directory2.jpg class=_photoImage src="http://postfiles15.naver.net/20110623_142/man8408_1308809674978SxqlC_JPEG/directory2.jpg?type=w2" width=480 height=238></P>
<P style="MARGIN-LEFT: 80px"></P>
<P style="MARGIN-LEFT: 40px">3.Java Decompiler</P>
<P style="MARGIN-LEFT: 80px">- 다운로드 : <A class=con_link href="http://java.decompiler.free.fr/?q=jdgui" target=_blank>http://java.decompiler.free.fr/?q=jdgui</A></P>
<P style="MARGIN-LEFT: 120px"><IMG style="CURSOR: pointer; rwidth: 320px; rheight: 180px" id=20110623_43/man8408_1308808866339ybCr3_JPEG/jd-gui.jpg class=_photoImage src="http://postfiles12.naver.net/20110623_43/man8408_1308808866339ybCr3_JPEG/jd-gui.jpg?type=w2" width=320 height=180></P>
<P style="MARGIN-LEFT: 80px">- 압축풀기 : 실행하기 편한 곳에 압축을 풀어 놓는다.</P>
<P style="MARGIN-LEFT: 80px"></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">2. 환경변수 잡기</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">- adb, apktool, dex2jar 명령어를 사용하기 위한 환경변수를 잡는다.</P>
<P style="MARGIN-LEFT: 40px">%ANDROID_SDK%\platform-tools</P>
<P style="MARGIN-LEFT: 40px">%ANDROID_SDK%\platform-tools\apktool</P>
<P style="MARGIN-LEFT: 40px">%ANDROID_SDK%\platform-tools\dex2jar</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 320px; rheight: 286px" id=20110623_127/man8408_1308811609880FRRNG_JPEG/path2.jpg class=_photoImage src="http://postfiles16.naver.net/20110623_127/man8408_1308811609880FRRNG_JPEG/path2.jpg?type=w2" width=320 height=286> <IMG style="CURSOR: pointer; rwidth: 320px; rheight: 286px" id=20110623_219/man8408_1308810234937QnasS_JPEG/path.jpg class=_photoImage src="http://postfiles12.naver.net/20110623_219/man8408_1308810234937QnasS_JPEG/path.jpg?type=w2" width=320 height=286></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">3. apk 파일 추출</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">- 폰에 설치된 모든 패키리를 리스트로 보인다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 130px" id=20110623_230/man8408_1308813571511Gbjta_JPEG/adb1.jpg class=_photoImage src="http://postfiles7.naver.net/20110623_230/man8408_1308813571511Gbjta_JPEG/adb1.jpg?type=w2" width=650 height=130></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 40px">- 리스트 중에 디컴파일 할 APK파일을 정한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 314px" id=20110623_150/man8408_1308813635937OAF9V_JPEG/adb2.jpg class=_photoImage src="http://postfiles7.naver.net/20110623_150/man8408_1308813635937OAF9V_JPEG/adb2.jpg?type=w2" width=650 height=314></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 40px">- APK파일을 추출한다. (adb shell을 종료 후 수행한다.)</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 112px" id=20110623_91/man8408_13088158462349aSkv_JPEG/jd-qui1_00000.jpg class=_photoImage src="http://postfiles12.naver.net/20110623_91/man8408_13088158462349aSkv_JPEG/jd-qui1_00000.jpg?type=w2" width=650 height=112></P>
<P style="MARGIN-LEFT: 80px"></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">4. ApkTool 실행 (java파일 외 xml, image, db등을 추출할 수 있다.)</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">- apktool 명령어를 사용하여 apk파일에 있는 파일을 디코딩하여 out폴더에 내보낸다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 284px" id=20110623_203/man8408_1308816108585FFdVD_JPEG/jd-qui1_00001.jpg class=_photoImage src="http://postfiles12.naver.net/20110623_203/man8408_1308816108585FFdVD_JPEG/jd-qui1_00001.jpg?type=w2" width=650 height=284></P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 268px" id=20110623_250/man8408_1308816283591uXGc4_JPEG/jd-qui1_00002.jpg class=_photoImage src="http://postfiles11.naver.net/20110623_250/man8408_1308816283591uXGc4_JPEG/jd-qui1_00002.jpg?type=w2" width=650 height=268></P>
<P style="MARGIN-LEFT: 40px"></P>
<P style="MARGIN-LEFT: 40px">- xml파일을 열어 내용을 확인한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 263px" id=20110623_152/man8408_1308816466046IDd1R_JPEG/jd-qui1_00003.jpg class=_photoImage src="http://postfiles9.naver.net/20110623_152/man8408_1308816466046IDd1R_JPEG/jd-qui1_00003.jpg?type=w2" width=650 height=263></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">5. Dex2Jar 실행 (Java파일을 추출할 수 있다.)</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">- apk파일의 확장자를 zip으로 변경한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 437px; rheight: 64px" id=20110623_106/man8408_13088166371716cY07_JPEG/jd-qui1_00004.jpg class=_photoImage src="http://postfiles11.naver.net/20110623_106/man8408_13088166371716cY07_JPEG/jd-qui1_00004.jpg?type=w2" width=437 height=64></P>
<P style="MARGIN-LEFT: 40px"></P>
<P style="MARGIN-LEFT: 40px">- 추출한 zip파일의 압축을 풀어 classes.dex 파일을 추출한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 482px; rheight: 175px" id=20110623_8/man8408_13088127496520DvJ8_JPEG/dex.jpg class=_photoImage src="http://postfiles9.naver.net/20110623_8/man8408_13088127496520DvJ8_JPEG/dex.jpg?type=w2" width=482 height=175></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 40px">- Dex2Jar를 실행한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 172px" id=20110623_56/man8408_1308813706877yhqtg_JPEG/dex2jar2.jpg class=_photoImage src="http://postfiles9.naver.net/20110623_56/man8408_1308813706877yhqtg_JPEG/dex2jar2.jpg?type=w2" width=650 height=172></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 40px">- Dex2Jar를 실행하면 아래 jar파일이 생긴다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 190px; rheight: 57px" id=20110623_217/man8408_1308813077007O5wCG_JPEG/classes.dex.dex2jar.jpg class=_photoImage src="http://postfiles10.naver.net/20110623_217/man8408_1308813077007O5wCG_JPEG/classes.dex.dex2jar.jpg?type=w2" width=190 height=57></P>
<P style="MARGIN-LEFT: 0px"></P>
<P style="MARGIN-LEFT: 0px"><STRONG><SPAN style="FONT-SIZE: 11pt">6. JD-GDI 실행</SPAN></STRONG></P>
<P style="MARGIN-LEFT: 40px">- JD-GDI실행하여 classes.dex.dex2jar파일을 열어 소스를 분석한다.</P>
<P style="MARGIN-LEFT: 40px"><IMG style="CURSOR: pointer; rwidth: 650px; rheight: 529px" id=20110623_63/man8408_1308813448828TnHKk_JPEG/jd-qui1.jpg class=_photoImage src="http://postfiles16.naver.net/20110623_63/man8408_1308813448828TnHKk_JPEG/jd-qui1.jpg?type=w2" width=650 height=529></P>
<P style="MARGIN-LEFT: 40px"></P>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Wed, 12 Dec 2012 14:41:55 +0900</dc:date>
</item>
<item>
<title>실시간 영상 전송</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=123</link>
<description><![CDATA[<SPAN itemprop="name">[sipdroid</SPAN> ] <SPAN itemprop="de&#115;&#99;ription">무료 SIP / Android 용 VoIP를 클라이언트</SPAN> <A href="http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ko&amp;langpair=en%7Cko&amp;rurl=translate.google.co.kr&amp;u=http://code.google.com/p/sipdroid/&amp;usg=ALkJrhiQQJqnYJ3YRT5EEMTJhUsjXH_yoQ" target=_blank><BR>http://translate.googleusercontent.com/translate_c?depth=1&amp;hl=ko&amp;langpair=en%7Cko&amp;rurl=translate.google.co.kr&amp;u=http://code.google.com/p/sipdroid/&amp;usg=ALkJrhiQQJqnYJ3YRT5EEMTJhUsjXH_yoQ</A><BR><BR><FONT color=#000000>[android] 에뮬레이터(emul) 에서 웹캠(webcam) 사용하기 </FONT><BR><A href="http://airspace.egloos.com/3837637" target=_blank>http://airspace.egloos.com/3837637</A><BR><BR><SPAN itemprop="name">spydroid-ipcamera</SPAN> 
<DIV id=psum><SPAN itemprop="de&#115;&#99;ription">Turns your android powered device into a nice ip camera</SPAN><BR><A href="http://code.google.com/p/spydroid-ipcamera/" target=_blank>http://code.google.com/p/spydroid-ipcamera/</A><BR><BR>How to stream over RTMP on Android?<BR><A href="http://stackoverflow.com/questions/6006043/how-to-stream-over-rtmp-on-android" target=_blank>http://stackoverflow.com/questions/6006043/how-to-stream-over-rtmp-on-android</A><BR><BR>rtsp<BR><A href="http://www.androidpub.com/2346438" target=_blank>http://www.androidpub.com/2346438</A></DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Thu, 22 Nov 2012 13:44:08 +0900</dc:date>
</item>
<item>
<title>안드로이드 apk decompile</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=122</link>
<description><![CDATA[<FONT color=#333333>APK 파일을 decompile 해서 .java 파일로 변환 하는 방법 입니다.. </FONT>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">구글링 하시면 방법이 나와 있지만 기억 하기 위해서 올려 봅니다.. </DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; FONT-SIZE: 9pt"><FONT class=Apple-style-span color=#333333>일단 apk 를 추출 하는 방법은 </FONT><FONT class=Apple-style-span color=#5c7fb0>ES탐색기</FONT><FONT class=Apple-style-span color=#333333> &amp;</FONT><FONT class=Apple-style-span color=#5c7fb0> Astro 파일매니저</FONT><FONT class=Apple-style-span color=#333333> 등을 이용하셔서</FONT></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">추출 하시면 됩니다..</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">저는 ES탐색기를 사용 하므로 ES 탐색기에서 apk 를 추출하는 방법을 간단하게 </DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">올려 봅니다..</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">일단 ES 파일 탐색기를 실행 하신후에 아래 방법 대로 하시면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><SPAN rel="lightbox" target="_blank"><IMG style="CURSOR: pointer" alt="" src="http://cfile25.uf.tistory.com/image/167DEF394D6B279A0F506B" width=710 height=355></SPAN></DIV><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">1. ES탐색기 실행</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">2. 메뉴 -&gt; 관리자 -&gt; 설치도니 애플리케이션 선택</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">3. APP 선택 (길게 누르고 계시면 메뉴 나옵니다) -&gt; 백업</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">apk 파일은 SD Card 에 backups/apps 에 생깁니다.. backup받은 apk 를 PC 로 가져 오시면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">이제 decompile 을 할건데 아래의 파일이 필요 합니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR><SPAN style="WIDTH: 1px; FLOAT: right; HEIGHT: 1px" id=callbacknesthkebitistorycom886951></SPAN></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><A href="http://hkebi.tistory.com/attachment/cfile29.uf@203FF8334D6B29172EE824.jar" target=_blank><IMG style="VERTICAL-ALIGN: middle" alt="" src="http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif"> AXMLPrinter2.jar</A></DIV>
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><A href="http://hkebi.tistory.com/attachment/cfile24.uf@143979334D6B2917408CBD.exe" target=_blank><IMG style="VERTICAL-ALIGN: middle" alt="" src="http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/exe.gif"> dexdump.exe</A></DIV>
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><A href="http://hkebi.tistory.com/attachment/cfile8.uf@1455B8334D6B2919049BF8.exe" target=_blank><IMG style="VERTICAL-ALIGN: middle" alt="" src="http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/exe.gif"> jad.exe</A></DIV>
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><A href="http://hkebi.tistory.com/attachment/cfile29.uf@2040B6334D6B291A2B4786.jar" target=_blank><IMG style="VERTICAL-ALIGN: middle" alt="" src="http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif"> undx.jar</A></DIV><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">Backup 받으신 apk 를 알집 등의 압축 Application 을 사용하셔서 압축을 풀어 놓습니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">방법은 간단하게 확장자를 apk -&gt; zip 으로 변경 하시면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">
<DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"><SPAN rel="lightbox" target="_blank"><IMG alt="" src="http://cfile23.uf.tistory.com/image/172C37374D6B2A100C9536" width=660 height=484></SPAN></DIV><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">작업 하실 위치에 푸신후에 이제 cmd 를 뛰우신후 아래처럼 하시면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><B>1. classes.dex -&gt; classes.jar 변경 하기</B></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">일작 작업 하시는 위치에서 gen 폴더를 만들어 둡니다.</DIV>
<DIV>
<DIV style="BORDER-BOTTOM: rgb(193,193,193) 1px dashed; BORDER-LEFT: rgb(193,193,193) 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(193,193,193) 1px dashed; BORDER-RIGHT: rgb(193,193,193) 1px dashed; PADDING-TOP: 10px" class=txc-textbox><FONT class=Apple-style-span color=#333333 face=굴림><SPAN style="FONT-FAMILY: 굴림, gulim, tahoma, sans-serif; COLOR: rgb(0,0,0)" class=Apple-style-span>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">&gt; java -DASDKLoc=. -jar undx.jar classes.dex</DIV>
<DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>false</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>2011. 2. 28 오후 1:57:12 org.illegalaccess.undx.APKAccess &lt;init&gt;</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>심각: ./dexdump -dfh classes.dex</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>2011. 2. 28 오후 1:57:13 org.illegalaccess.undx.APKAccess &lt;init&gt;</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>정보: avail=255492</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>2011. 2. 28 오후 1:57:13 org.illegalaccess.undx.DalvikToJVM doConvert</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>정보: Classes count=731</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>false</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>false</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>true</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>2011. 2. 28 오후 1:57:13 org.illegalaccess.undx.ClassHandler &lt;init&gt;</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>정보: class:com.google.android.apps.analytics.AnalyticsParameterEncoder</FONT></DIV></DIV></SPAN></FONT></DIV><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">심각, 정보등의 메세지가 쭈욱~~~ 나옵니다.. 일단 무시하고 진행 하면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><B>2. classes -&gt; java 로 변경 </B></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">위 작업이 끝나시면 gen 밑에 classes.dex, classes.dex.jar 파일이 생겨 납니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">classes.dex.jar 파일 역시 알집등을 이용하셔서 풀어 버리시면 됩니다.</DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><BR></DIV>
<DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">
<DIV style="BORDER-BOTTOM: rgb(193,193,193) 1px dashed; BORDER-LEFT: rgb(193,193,193) 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(193,193,193) 1px dashed; BORDER-RIGHT: rgb(193,193,193) 1px dashed; PADDING-TOP: 10px" class=txc-textbox><SPAN style="FONT-FAMILY: 굴림, gulim, tahoma, sans-serif; COLOR: rgb(0,0,0)" class=Apple-style-span>
<DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">&gt; jad -sjava *</DIV></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>Parsing ./com/google/android/apps/analytics/AnalyticsParameterEncoder.class..</FONT></DIV>
<DIV><FONT class=Apple-style-span color=#333333 face=굴림>Generating AnalyticsParameterEncoder.java</FONT></DIV></SPAN></DIV><BR></DIV></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt"><B>3. binary xml -&gt; xml 변경 하기</B></DIV>
<DIV style="LINE-HEIGHT: 1.5; FONT-FAMILY: 굴림; COLOR: rgb(51,51,51); FONT-SIZE: 9pt">binary XML 파일을 볼수 있도록 변경 하는 방법입니다.</DIV>
<DIV>
<DIV style="BORDER-BOTTOM: rgb(193,193,193) 1px dashed; BORDER-LEFT: rgb(193,193,193) 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(193,193,193) 1px dashed; BORDER-RIGHT: rgb(193,193,193) 1px dashed; PADDING-TOP: 10px" class=txc-textbox><FONT class=Apple-style-span color=#333333 face=굴림>&gt; java -jar AXMLPrinter2.jar AndroidManifest.xml &gt; AndroidManifest.txt</FONT></DIV><BR></DIV>
<DIV>이상 APK decompile 하는 방법 이였습니다.. ㅎㅎ</DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Mon, 19 Nov 2012 16:26:11 +0900</dc:date>
</item>
<item>
<title>안드로이드 Intent에서 앱 호출하는 방법을 정리</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=121</link>
<description><![CDATA[안드로이드 Intent에서 앱을 호출하는 방법을 정리 합니다.<BR><BR>
<H3><SPAN class=mw-headline>연락처 Intent</SPAN></H3>
<UL>
<LI>연락처 조회 </LI></UL><PRE>intent = new Intent(Intent.ACTION_VIEW, <BR>
    Uri.parse("content://contacts/people/" + <BR>
              String.valueOf(contact.getId())));<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>연락처 등록 </LI></UL><PRE>intent = new Intent(Intent.ACTION_INSERT, <BR>
    Uri.parse("content://contacts/people"));<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>연락처 수정 </LI></UL><PRE>intent = new Intent(Intent.ACTION_EDIT, <BR>
  Uri.parse("content://contacts/people/" + <BR>
            String.valueOf(contact.getId())));<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>연락처 삭제 </LI></UL><PRE>intent = new Intent(Intent.ACTION_DELETE, <BR>
    Uri.parse("content://contacts/people/" + <BR>
              String.valueOf(contact.getId())));<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>전화 Intent</SPAN></H3>
<UL>
<LI>권한 설정 (AndroidManifest.xml) </LI></UL><PRE>전화 걸기         : CALL_PH&#111;&#110;E = "android.permission.CALL_PHONE"<BR>
긴급 통화         : CALL_PRIVILEGED = <BR>
                     "android.permission.CALL_PRIVILEGED"<BR>
폰 상태 읽기      : READ_PHONE_STATE = <BR>
                    "android.permission.READ_PHONE_STATE"<BR>
폰 상태 수정      : MODIFY_PHONE_STATE = <BR>
                    "android.permission.MODIFY_PHONE_STATE"<BR>
브로드케스팅 수신 : PROCESS_OUTGOING_CALLS = <BR>
                    "android.permission.PROCESS_OUTGOING_CALLS"<BR>
전화 걸기 이전    : ACTION_NEW_OUTGOING_CALL = <BR>
                    "android.intent.action.NEW_OUTGOING_CALL"<BR>
</PRE>
<UL>
<LI>전화걸기 화면 </LI></UL><PRE>Intent intent = new Intent(Intent.ACTION_DIAL, <BR>
      Uri.parse("tel:" + TelNumber));<BR><SPAN style="WIDTH: 1px; FLOAT: right; HEIGHT: 1px" id=callbacknestnuninayatistorycom5807773></SPAN>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>전화걸기 </LI></UL><PRE>Intent intent = new Intent(Intent.ACTION_CALL, <BR>
       Uri.parse("tel:" + TelNumber));<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>SMS Intent</SPAN></H3>
<UL>
<LI>권한 설정 (AndroidManifest.xml) </LI></UL><PRE>수신 모니터링       : RECEIVE_SMS = "android.permission.RECEIVE_SMS"<BR>
읽기 가능           : READ_SMS = "android.permission.READ_SMS" <BR>
발송 가능           : SEND_SMS = "android.permission.SEND_SMS"<BR>
SMS Provider로 전송 : WRITE_SMS = "android.permission.WRITE_SMS"<BR>
                    : BROADCAST_SMS = "android.permission.BROADCAST_SMS"<BR>
</PRE>
<UL>
<LI>SMS 발송 화면 </LI></UL><PRE>Intent intent = new Intent(Intent.ACTION_VIEW);<BR>
intent.putExtra("sms_body", "The SMS text");<BR>
intent.setType("vnd.android-dir/mms-sms");<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>SMS 보내기 </LI></UL><PRE>Intent intent = new Intent(Intent.ACTION_SENDTO, <BR>
       Uri.parse("smsto://" + contact.getHandphone()));<BR>
intent.putExtra("sms_body", "The SMS text");<BR>
intent.setType("vnd.android-dir/mms-sms");<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>이메일 Intent</SPAN></H3>
<UL>
<LI>이메일 발송 화면 </LI></UL><PRE>Intent intent = new Intent(Intent.ACTION_SENDTO, <BR>
       Uri.parse("mailto:" + contact.getEmail()));<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>브라우저 Intent</SPAN></H3>
<UL>
<LI>Browser에서 URL 호출하기 </LI></UL><PRE>new Intent(Intent.ACTION_VIEW, Uri.parse("<A class="external free" title=http://www.google.com/ href="http://www.google.com/" rel=nofollow target=_blank>http://www.google.com/</A>"));<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>브라우저에서 검색 </LI></UL><PRE>Intent intent = new Intent(Intent.ACT ION_WEB_SEARCH);<BR>
intent.putExtra(SearchManager.QUERY, "검색어");<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>지도 Intent</SPAN></H3>
<UL>
<LI>지도 보기 </LI></UL><PRE>Uri uri = Uri.parse ("geo: 38.00, -35.03");<BR>
Intent intent = new Intent(Intent.ACTION_VIEW, uri);<BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>안드로이드 마켓 Intent</SPAN></H3>
<UL>
<LI>안드로이드 마켓에서 Apps 검색 </LI></UL><PRE>Uri uri = Uri.parse("market://search?q=pname:전제_패키지_명");  <BR>
//--- 예) market://search?q=pname:com.jopenbusiness.android.smartsearch<BR>
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  <BR>
startActivity(intent);  <BR>
</PRE>
<UL>
<LI>안드로이드 마켓의 App 상세 화면 </LI></UL><PRE>Uri uri = Uri.parse("market://details?id=전제_패키지_명");<BR>
//--- 예) market://details?id=com.jopenbusiness.android.smartsearch<BR>
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  <BR>
startActivity(intent);<BR>
</PRE>
<H3><SPAN class=mw-headline>갤럭시S의 Intent</SPAN></H3>
<UL>
<LI>패키지명과 클래스명으로 App 호출 </LI></UL><PRE>intent = new Intent(Intent.ACTION_MAIN);<BR>
intent.setComponent(new ComponentName("패키지명", "전체_클래스명"));<BR>
startActivity(intent);<BR>
</PRE>
<UL>
<LI>전화, SMS </LI></UL>
<DL>
<DD>
<UL>
<LI>전화번호부 : com.android.contacts, com.sec.android.app.contacts.PhoneBookTopMenuActivity </LI>
<LI>전화 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabActivity </LI>
<LI>최근기록 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabDialerActivity </LI>
<LI>메시지 : com.sec.mms, com.sec.mms.Mms </LI></UL></DD></DL>
<UL>
<LI>이메일 : com.android.email, com.android.email.activity.Welcome </LI>
<LI>일정 : com.android.calendar, com.android.calendar.LaunchActivity </LI>
<LI>인터넷 : com.android.browser, com.android.browser.BrowserActivity </LI></UL>
<UL>
<LI>Google의 Android용 앱 </LI></UL>
<DL>
<DD>
<UL>
<LI>검색 : com.google.android.googlequicksearchbox, com.google.android.googlequicksearchbox.SearchActivity </LI>
<LI>음성 검색 : com.google.android.voicesearch, com.google.android.voicesearch.RecognitionActivity </LI>
<LI>Gmail : com.google.android.gm, com.google.android.gm.ConversationListActivityGmail </LI>
<LI>지도 : com.google.android.apps.maps, com.google.android.maps.MapsActivity </LI>
<LI>위치찾기 : com.google.android.apps.maps, com.google.android.maps.LatitudeActivity </LI>
<LI>YouTube : com.google.android.youtube, com.google.android.youtube.HomeActivity </LI>
<LI>토크 : com.google.android.talk, com.google.android.talk.SigningInActivity </LI>
<LI>Goggles : com.google.android.apps.unveil, com.google.android.apps.unveil.CaptureActivity </LI>
<LI>Google 번역 : com.google.android.apps.translate, com.google.android.apps.translate.HomeActivity </LI>
<LI>Reader : com.google.android.apps.reader, com.google.android.apps.unveil.CaptureActivity </LI>
<LI>Voice : com.google.android.apps.googlevoice, com.google.android.apps.googlevoice.SplashActivity </LI>
<LI>Google 별지도 : com.google.android.stardroid, com.google.android.stardroid.activities.SplashScreenActivity </LI></UL></DD></DL>
<UL>
<LI>카메라 : com.sec.android.app.camera, com.sec.android.app.camera.Camera </LI>
<LI>TV : com.sec.android.app.dmb, com.sec.android.app.dmb.activity.DMBFullScreenView </LI></UL>
<UL>
<LI>Android 관리 </LI></UL>
<DL>
<DD>
<UL>
<LI>환경 설정 : com.android.settings, com.android.settings.Settings </LI>
<LI>작업 관리자 : com.sec.android.app.controlpanel, com.sec.android.app.controlpanel.activity.JobManagerActivity </LI></UL></DD></DL>
<UL>
<LI>마켓 : com.android.vending, com.android.vending.AssetBrowserActivity </LI></UL>
<H3></H3><BR><BR>출처 : <A href="http://www.jopenbusiness.com/tc/oss/entry/Android-Intent-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80" target=_blank>http://www.jopenbusiness.com/tc/oss/entry/Android-Intent-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80</A><BR>
<DIV style="TEXT-ALIGN: right; MARGIN-BOTTOM: 10px; CLEAR: both" class=entry-ccl></DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Thu, 15 Nov 2012 20:45:23 +0900</dc:date>
</item>
<item>
<title>C++로 만든 코드 안드로이드로 마이그레이션 하기</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=117</link>
<description><![CDATA[<DIV class="textyleContent xe_content"><!--BeforeDocument(697421,65768)-->
<DIV class="document_697421_65768 xe_content">
<DIV class="eArea xe_content xe_dr_blockquote">
<BLOCKQUOTE>
<P>요즘 소프트웨어 개발하는 사람치고 아이폰이나 안드로이드 개발과 전혀 무관할 수 있는 분이 드물텐데요. 그런데 갑좌~기 회사에서 떨어진 프로젝트가 기존에 만들어서 사용중인 C++ 코드를 안드로이드로 마이그레이션 하는 일이라면? 아 이거 참 만만찮게 난감한 일일텐데요. 월간 마이크로소프트웨어의 필자 이상욱 님이 이런 난감한 상황에 대처할 수 있는 방법을 재미있게 설명한 글이 있어 옮겨봅니다. 아직 정식으로 인사 드리진 못했는데 조만간 한번 꼭 뵙고 싶어지는 분이네요. 좋은 글 주신 상욱 님께 감사드립니다. 그리고 이 글이 많은 개발자분들께 도움이 되길 바라겠습니다.</P><CITE><A href="http://www.imaso.co.kr/" target=_blank>출처| 아이마소</A></CITE></BLOCKQUOTE></DIV>
<DIV class="eArea xe_content xe_dr_hr">
<HR noShade>
</DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H3 id=h1264117534613>안드로이드 네이티브 라이브러리Ⅰ</H3></DIV>
<DIV class="eArea xe_content xe_dr_blockquote">
<BLOCKQUOTE>
<P>이번 컬럼에서는 기존에 C/C++ 로 개발한 코드가 안드로이드 플랫폼에서 어떻게 동작하는지 안드로이드 플랫폼 구조를 통해 알아보고, Java 응용프로그램과 연동하기 위한 다양한 방법을 소개한다. 또 C/C++ 코드를 안드로이드 플랫폼에서 동작하는 바이너리로 빌드할 수 있는 툴체인 안드로이드 NDK에 대해 알아보고 간단한 사용법에 대해 알아보도록 하겠다. </P></BLOCKQUOTE></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>이상욱 bumwoogi@gmail.com｜새로운 기술을 배우는 것을 좋아하고 다방면에 관심이 많은 오지랍쟁이 개발자. 얼마전까지 무인잠수함을 만드는 것을 계획하였으나 도중하차 하였고, 지금은 전 인류에 공헌할 대단한 소프트웨어를 만드는 것을 꿈꾸고 있다.</STRONG></P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>이번 컬럼은 가상의 시나리오를 통해 실제 프로젝트 진행 중에 벌어질 수 있는 문제상황을 제시하고 동시에 이 문제를 해결해나가는 과정을 알아보도록 하겠다.</P>
<P></P>
<P><STRONG>등장인물</STRONG></P></DIV>
<DIV class="eArea xe_content xe_dr_list">
<UL style="LIST-STYLE-TYPE: disc">
<LI><SPAN>허우대 대리 : 몇달전 경력사원 공채로 새로 입사한 인물로 Java를 사용해봤다는 이유만으로 난생 처음으로 안드로이드 플랫폼에 기존에 C++로 작성한 소스를 마이그레이션 하는 업무를 맞는다. 허우대는 멀쩡 하지만 성과가 없다고 일정만 차장으로 부터 허우대라는 별명을 얻었다.</SPAN></LI>
<LI><SPAN>신익한 선배 : 허우대 대리의 학교 선배로 모바일 분야에서 안해본게 없는 대단한 실력자 이지만, 일을 너무 사랑하는 나머지 인간관계는 별로 소질이 없어 보이는 시니컬한 성격의 소유자, 허우대 대리의 질문에 매번 퉁명스럽게 대답 하지만 그 속마음에는 후배를 스스로 깨우치게 하려는 나름의 철학을 가지고 있다.</SPAN></LI>
<LI><SPAN>일정만 차장 : 이번 프로젝트의 책임자로, 일에 대한 책임감이 투철하지만 상냥한 성격은 아니다. 특히 일정을 어기는 사람을 무척 싫어한다.</SPAN></LI></UL></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>허우대 대리는 얼마전 일정만 차장으로 부터 1주일간의 시간동안 이전 누군가가 C++ 로 작성한 방대한 양의 xml 문서 parser를 이번 프로젝트에 재사용 할 수 있도록 안드로이드 플랫폼에 마이그레이션 하라는 지시를 받았다. 허우대 대리에게 주어진 시간은 고작 7일. 7일 동안 허우대 대리가 어떻게 이 프로젝트를 진행하는지 함께 지켜보도록 하자.</P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H4 id=h1264117673832>선배, 안드로이드 애플리케이션 개발은 Java로 하는거지?</H4></DIV>
<DIV class="eArea xe_content xe_dr_txt">생전 처음 안드로이드 플랫폼에서 개발을 시작하는 허우대 대리는 신익한 선배를 찾아가서 조언을 구하게 되었다. 
<BLOCKQUOTE style="MARGIN-RIGHT: 0px" dir=ltr>
<P><EM>“선배, 차장님께 안드로이드 플랫폼에 기존에 c++로 작성한 엄청난 양의 parser 소스를 마이그레이션 하라는 지시를 받았는데, 나 이거 다 java로 다시 만들어야 하는건가?”</EM></P></BLOCKQUOTE>
<P>선배는 한심하다는 반응으로 특유의 시니컬한 한숨을 내쉬며 이렇게 얘기한다.</P>
<BLOCKQUOTE style="MARGIN-RIGHT: 0px" dir=ltr>
<P><EM>“안드로이드= java의 공식은 아니야. 안드로이드 플랫폼이 어떻게 구성돼있는지 먼저 확인해 보는게 어때?”</EM></P></BLOCKQUOTE>
<P><BR>안드로이드 플랫폼은 크게 리눅스 커널과, C/C++로 작성한 라이브러리(보통 네이티브 라이브러리라 부른다), 안드로이드 응용프로그램의 뼈대를 제공하는 애플리케이션 프레임워크와 기본 애플리케이션으로 구성돼 있다. </P>
<P>리눅스 커널은 OS의 기본 기능인 태스크간의 스케줄링과 메모리, 디스크, 네트워크 등의 자원을 사용할 수 있도록 시스템 콜을 제공한다. 이는 리눅스 커널 윗부분에 초록색으로 표시된 네이티브 라이브러리를 통해 응용프로그램이 편하게 사용 할 수 있는 형태로 제공된다.</P>
<P>안드로이드 응용프로그램은 애플리케이션 프레임워크(응용프로그램의 구조를 제공하고 제작에 도움을 주는 Java class로 구성)을 이용하고 역시 Java언어로 작성한다.</P>
<P>이 Java파일을 안드로이드 SDK를 이용해 빌드하면 내부적으로 Java컴파일러와 dex converter를 거쳐 Dalvik VM(안드로이드 응용프로그램을 동작시키는 VM으로 일반적인 Java VM과는 다르다.) 위에서 동작하는 byte 코드로 변환하게 된다.</P>
<P>결론적으로 안드로이드 응용프로그램(Java로 작성)은 애플리케이션 프레임워크(.jar형태의 Java class.)를 이용해 VM에서 제공하는 코어 라이브러리(core library) 기능을 사용하게 되고, 이 코어 라이브러리는 리눅스 커널 위에서 동작하는 다양한 C/C++ 라이브러리(c/c++)를 호출하게 된다. 이 라이브러리는 필요에 따라 리눅스 커널의 system call을 호출하게 된다. 위 그림에서 화살표 방향을 따라 가면서 확인하자.</P>
<P>위 그림에서 안드로이드 런타임 계층과 라이브러리 계층을 연결하는 왼쪽 화살표로 표현된 부분에서 일반적인 함수호출 관계 외에 추가적으로 C/C++ ↔ java 호출 사이의 ‘glue’가 존재한다. 결국 이 덕분에 안드로이드 프레임워크는 자연스럽게 OS의 복잡한 기능을 리눅스 커널로부터 빌려 쓸 수 있는 것이다.</P>
<P>허우대 대리는 결국 C/C++ ↔ Java사이의 ‘glue’를 만들면 기존 소스를 리눅스 상에 포팅 하는 정도의 노력으로 재사용 할 수 있겠다는 결론을 내리고, 곧바로 Java ↔ C/C++ 를 호출 할 수 있는 방법을 찾아보기 시작했다. </P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697422 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/1.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H4 id=h1264117749422>Java ↔ C/C++ 사이의 glue는 어떤것을 사용할까?</H4></DIV>
<DIV class="eArea xe_content xe_dr_txt">일반적으로 Java에서 C/C++ 모듈을 사용하기 위해서는 다음과 같은 방법을 사용한다. 
<P><EM>1. Java Native Access (JNA)</EM> <BR><BR>자바 코드에서 네이티브 코드와 같은 형태로 네이티브 함수를 호출하는 방식으로 기존 코드의 최소한의 수정으로 응용이 가능해, 최상의 방법으로 생각되나 현재 안드로이드 Dalvik VM에서 지원하지 않는 방법이다.</P>
<P><EM>2. Java Native Interface (JNI)</EM><BR>Java 초창기부터 존재한 Java/Native interface 방법으로 안드로이드 Dalvik VM에서 지원하는 방법으로 실제 안드로이드 플랫폼 소스 여러 부분에서 사용되고 있다. 그러나 이 방식은 raw form을 다루는 형태로 개발해야 하기 때문에 개발 시간이 많이 소요되고 에러를 발생 시킬만한 요소가 많다.</P>
<P><EM>3. Simplified Wrapper and Interface Generator (SWIG)</EM><BR>JNI를 좀 더 쉽게 사용 할수 있도록 해주는 도구로 C/C++ 인터페이스를 정의한 파일을 입력 받아 C/C++ JNI wrapper 코드를 생성한다. 이 방법 역시 Dalvik VM과는 호환성 문제가 존재한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_hr">
<HR noShade>
</DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>Native library(C/C++) 로 개발할 것 인지에 대한 선택 기준</STRONG> </P>
<P>안드로이드에서는 J2SE의 대부분의 기능과, 애플리케이션 프레임워크를 통해 다양한 API 셋을 제공하고, Java를 사용하여 대부분의 응용프로그램을 제작 하는데 부족함이 없도록 배려하고 있다.</P>
<P>신규 개발시 애플리케이션 프레임워크를 통해 제공받을 수 없는 일부 기능(대부분 외부 기기 나 디바이스 종속적인) 부분과 성능이 아주 중요한 일부 기능을 제외하고는 Java를 사용하여 개발하는 것이 프로젝트 장기적인 관점에서는 나은 판단이라 생각된다.</P>
<P>C/C++로 코드로 개발은 유지보수와 디버깅 측면에서 번거롭고 불편한 부분이 있으며 JNI를 이용하여 Java 쪽으로 glue를 만드는 일이 예상하는 것만큼 간단한 일은 아니기 때문이다. 여기서 제시하는 가상의 시나리오 역시 주제를 이끌어 가기 위해 단순화시킨 예일 뿐이지 실제로 기존에 C/C++로 작성한 코드를 마이그레이션 하는 작업이 주어질 경우 얼마나 인터페이스가 단순한지, 기존코드에서 플랫폼 종속적인 부분이 얼마나 있으며 이것을 안드로이드(Linux kernel)에 포팅하기 위해서 얼마나 노력이 필요한지, 혹은 HTTP나 STL등 안드로이드 Native library단에서 충분히 제공하지 않는 기능을 사용한 부분이 있어서 재작업이나 추가 포팅 작업이 필요한지 충분히 고려하여 기존 모듈을 재활용할 것인지, Java코드로 다시 작업할 것인지 결정해야 할 것 이다.</P></DIV>
<DIV class="eArea xe_content xe_dr_hr">
<HR noShade>
</DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>허우대 대리는 Dalvik VM과의 호환성 문제와 보편적으로 사용하는 기술이라는 점을 감안해 JNI를 이용해 프로젝트를 진행하기로 했다.</P>
<P>점심시간에 허우대 대리는 자신이 JNI를 이용하여 기존 parser소스를 거의 재활용 할수있는 방법을 생각해 냈다고 신익한 선배에게 자랑을 늘어놓았다. 이때, 밥을 먹던 신익한 선배는 이런 이야기를 남긴 뒤, 아무일도 없었다는 듯 식사를 계속 했다. 신익한 선배가 남긴 말은 이렇다.</P>
<P>“그럼 안드로이드 시스템에 포함해서 빌드 하겠다는 얘기야? 배포는 어떻게 할건데?”</P>
<P>그렇다. 그림에서 보는 C/C++ 라이브러리는 안드로이드 시스템의 영역으로 허우대 대리는 배포방법에 대해 고려하지 못한 것이다. 안드로이드 에뮬레이터를 실행하고 &lt;화면 1&gt;에서 초록색으로 표시한 C/C++ 라이브러리 파일의 실제 위치를 확인해보자. 아래와 같이 커맨드 창에서 emulator를 실행하거나 이클립스 IDE를 통해 emulator를 실행한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697432 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/2.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>에뮬레이터가 정상적으로 실행되면 위와 같이 에뮬레이터 화면을 확인할 수 있는데, 이때 콘솔에서는 &lt;리스트 1&gt;과 같이 adb 명령을 이용하여 shell을 실행한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>&lt;리스트 1&gt; adb shell을 이용하여 네이티브 라이브러리 확인하기</STRONG><BR>----------------------------------------------------------------------------------------------------------<BR>&gt;adb shell<BR>adb shell 이 실행되면 아래와 같이 library path를 확인해보자<BR>#echo $LD_LIBRARY_PATH<BR>#/system/lib<BR>system/lib가 library path로 잡혀있는 것을 확인하고 /system/lib directory로 이동한다.<BR>#cd /system/lib<BR>----------------------------------------------------------------------------------------------------------</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>&lt;리스트 1&gt;의 내용을 &lt;화면 3&gt;를 통해 확인해보자.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697448 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/3.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>&lt;화면 3&gt;에서는 안드로이드 플랫폼에서 제공하는 네이티브 라이브러리가 위치하는 것을 확인할 수 있다.</P>
<P>허우대 대리가 준비하는 프로젝트의 결과물은 다운로드 가능한 형태로 배포되어야 하는데 /system 디렉토리는 다운로드한 애플리케이션이 설치할 수 있는 영역이 아니기 때문에 /system 디렉토리 대신 /data 디렉토리에서 동작 할 수 있는 방법을 찾아야 한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H5 id=h1264118005518>안드로이드 시스템 이미지</H5></DIV>
<DIV class="eArea xe_content xe_dr_txt">안드로이드 시스템 이미지는 리눅스 운영체제에서 파일시스템은 단순히 자료의 저장기능 뿐 아니라 운영체제 동작에 필요한 필수 정보를 포함하고 장치 관리 등의 특별한 용도로도 사용하므로 선택항목이 아니라 필수 항목이다. 시스템 이미지는 안드로이드 프레임워크를 구동하기 위해 필수적인 항목으로 &lt;안드로이드 SDK설치 디렉토리&gt;/platforms/&lt;플랫폼버전&gt;/images/system. img 에서 확인 할 수 있다. 
<P>이 이미지파일은 실제 에뮬레이터가 구동될 때 /system directory에 마운트하게 되는데, 이내용은 adb shell을 실행시킨 후 최상위 디렉토리의 init.rc파일에서 확인 할 수 있다.</P>
<P>/system 디렉토리는 임베디드하여 탑재할 기본 응용프로그램을 포함해 안드로이드 프레임워크에 필요한 라이브러리 설정파일 등이 들어있는 영역으로 추가로 다운로드받은 응용프로그램과는 구별된다. 다운로드 받은 응용프로그램은 /data 디렉토리에 위치하게 된다.<BR></P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H5 id=h1264118057763>안드로이드 SDK 설치</H5></DIV>
<DIV class="eArea xe_content xe_dr_txt">앞서 설명된 부분들을 실습하기 위해서는 안드로이드 SDK를 설치하고 버추얼 디바이스를 생성해야 하는데, 이 부분은 이번 컬럼의 주제와는 벗어나므로 아래 URL을 참고해 설치하기 바란다. 
<P><A href="http://developer.android.com/sdk/index.html" target=_blank>http://developer.android.com/sdk/index.html</A><BR></P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H4 id=h1264118082609>허우대 대리, NDK와 만나다</H4></DIV>
<DIV class="eArea xe_content xe_dr_txt">다음날 배포문제로 고민하던 허우대 대리는 아래의 안드로이드 개발자 웹사이트를 통해 NDK에 대한 내용을 접했다. <BR><BR><A href="http://developer.android.com/sdk/ndk/1.6_r1/index.html" target=_blank>http://developer.android.com/sdk/ndk/1.6_r1/index.html</A>
<P>NDK는 C/C++로 작성한 코드로 리눅스 OS 기반의 ARM binary를 생성하기 위한 크로스 툴체인을 제공한다. 여기서 ‘크로스 툴체인’이란 타깃머신과는 다른 환경에서 타깃 머신용으로 바이너리를 생성할 수 있도록 제공되는 툴인데 컴파일러 링커 그리고 기타 컴파일에 필요한 유틸리티를 포함하고 있다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>&lt;리스트 2&gt; Application.mk 파일</STRONG> <BR><BR><STRONG></STRONG>--------------------------------------------------------------<BR><STRONG></STRONG>APP_PROJECT_PATH := $(call my-dir)/project<BR><STRONG></STRONG>APP_MODULES := hello-jni<BR><STRONG></STRONG>--------------------------------------------------------------<BR></P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>일반적인 x86호환 CPU의 윈도우나 리눅스 PC기반 환경에서 ARM이나 MIPS등 임베디드 머신의 CPU에서 동작하는 바이너리를 컴파일 할 수 있도록 해준다.</P>
<P>그리고 아래와 같은 라이브러리를 사용할 수 있도록 header file을 제공하는데, 이 내용은 앞서 제시된 adb 쉘에서 확인한 /system/lib 디렉토리에 있는 라이브러리의 일부임을 확인할 수 있다.</P></DIV>
<DIV class="eArea xe_content xe_dr_list">
<UL style="LIST-STYLE-TYPE: decimal">
<LI><SPAN>libc(C library)</SPAN></LI>
<LI><SPAN>libm(math library)</SPAN></LI>
<LI><SPAN>JNI interface</SPAN></LI>
<LI><SPAN>libz (zip 압축 library)</SPAN></LI>
<LI><SPAN>liblog(Android logging library)</SPAN></LI>
<LI><SPAN>OpenGL ES library (3D graphic library, NDK 1.6버전부터)</SPAN></LI></UL></DIV>
<DIV class="eArea xe_content xe_dr_txt">추가적으로 안드로이드 응용프로그램 패키지 파일(.apk)에 native library를 포함할 수 있는 방법을 제공한다. 허우대 대리가 찾던 바로 그 방법이다. 그럼 이제 허우대 대리와 함께 NDK를 설치해 보도록 하자.<BR><BR>(1) <A href="http://developer.android.com/sdk/ndk/1.6_r1/index.html" target=_blank>http://developer.android.com/sdk/ndk/1.6_r1/index.html</A> 에서 윈도우용 패키지를 다운로드 받는다.<BR>(2) 적당한 위치에 (1)에서 다운로드 받은 압축파일을 푼다.<BR>(3) www.cygwin.com에서 최신 cygwin 을 설치한다.<BR>(4) 설치한 Cygwin bash shell을 실행하고 bash shell에서 /cygdrive/&lt;NDK 설치 경로&gt; 로 이동해 ‘Build/host-setup.sh’ 라고 명령을 수행한다. 
<P style="MARGIN-RIGHT: 0px" dir=ltr>이처럼 순차적으로 따라하고 나면, &lt;화면 4&gt;와 같이 ‘Host setup complete…’라는 문구가 나타나는데, 이럴 경우 셋업이 성공한 것이다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697466 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/4.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>이제 설치가 끝났으니 먼저 NDK에 샘플로 제공되는 hello-jni 예제를 빌드해 보자. 빌드시에는 $make APP=hello-jni라고 명령을 수행한다. 재빌드시에는 -B 옵션을 사용하고 실제 build command를 모두 확인하고 싶은 경우 V=1 옵션을 사용한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697467 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/5.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P style="MARGIN-RIGHT: 0px" dir=ltr>빌드결과로 apps/hello-jni/project/libs/areabi/libhello-jni.so가 생성되었는지 확인하자.</P>
<P style="MARGIN-RIGHT: 0px" dir=ltr>어떻게 NDK에서 제공하는 툴을 이용하여 예제가 빌드 되는지 알고 싶다면, apps/hello-jni/Application.mk 와 sources/ hello-jni/Android.mk 파일을 열어보자.<BR>일반적인 make 파일과 같은 형태이며 빌드를 위한 변수를 설정하는 부분을 확인 할 수 있다. 또한 Application.mk 파일에는 응용프로그램 에서 어떤 네이티브 라이브러리 모듈을 사용할 것인지에 대해 기술해야 한다. 이 부분은 네이티브 라이브러리를 빌드하는 것과는 직접적인 관계가 없으나 이 파일을 참조해 빌드할 타깃 모듈을 결정하기 때문에 필수적으로 작성해야 한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>&lt;리스트 3&gt; Android.mk 파일</STRONG><BR><STRONG></STRONG>----------------------------------------------------<BR><STRONG></STRONG>… 중략…<BR><BR><STRONG></STRONG>LOCAL_MODULE := hello-jni<BR><STRONG></STRONG>LOCAL_SRC_FILES := hello-jni.c<BR><BR><STRONG></STRONG>include $(BUILD_SHARED_LIBRARY)<BR><STRONG></STRONG>----------------------------------------------------</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P style="MARGIN-RIGHT: 0px" dir=ltr>Android.mk 파일에는 실제 shared library로 빌드할 c/c++ 파일 목록 과 사용하는 라이브러리 목록, compile/link option 등을 기술해야 하는데, 이때 변수 LOCAL_MODULE 에 모듈이름을 기술하게 된다. 이어 변수 LOCAL_SRC_FILES 에 빌드하려고 하는 소스 파일명을 기술하고, 파일명 사이는 스페이스로 구별한다.</P>
<P style="MARGIN-RIGHT: 0px" dir=ltr>마지막 줄이 shared library, 즉 .so 파일로 빌드 하겠다는 뜻이다. 이렇게 기술하면 자동으로 lib+모듈명+.so 형태의 파일을 빌드하게 된다.</P>
<P style="MARGIN-RIGHT: 0px" dir=ltr>추가로 특정 라이브러리를 사용하기 위해서는 아래와 같이 LOCAL_LDLIBS 변수에 내용을 기술한다. 아래는 안드로이드 로그 라이브러리를 사용하기 위한 예이다. 또한 이에 대한 추가적인 내용은 NDK document 폴더의 ‘ANDROID-MK.TXT’,’APPLICATION-MK.TXT’,’HOWTO.TXT’ 문서를 참고하기 바란다.<BR><BR>LOCAL_LDLIBS :=-L$(SYSROOT)/usr/lib/ -llog</P>
<P dir=ltr>이제 네이티브 라이브러리 빌드가 끝났으니 네이티브 라이브러리를 사용하는 Java 코드를 살펴보자. &lt;화면 6&gt;과 같이 apps/hello-jni 프로젝트를 이클립스에서 열어보도록 하자. 왼쪽 패키지 익스플로러 창에서 마우스 오른쪽 버튼을 클릭한 뒤 Import 메뉴를 선택한다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697480 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/6.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>이어 Existing Projects into Workspace를 선택한후 app/hello-jni/ 디렉토리를 선택한다. 이를 실행하면 &lt;화면 7&gt;과 같이 Package Explorer에 HelloJni 프로젝트가 로딩되면 성공한것이다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697491 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/7.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>이클립스 메뉴에서 Run-&gt;Run을 선택하거나 단축키로 Ctrl+F11을 선택하면 에뮬레이터에서 Hello-jni 프로젝트의 결과를 확인할수 있다.</P>
<P>에뮬레이터가 실행되는데 제법 시간이 걸리므로 인내심을 가지고 기다리기 바란다. 에뮬레이터를 동작하기 위해서는 플랫폼 버전에 맞는 AVD 파일을 미리 생성해야 하는데 이 내용은 <A href="http://developer.android.com/guide/developing/eclipse-adt.html" target=_blank>http://developer.android.com/guide/developing/eclipse-adt.html</A>을 참고하길 바란다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697497 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/8.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>더불어 이전에 adb shell 명령을 이용한 안드로이드 파일시스템을 살펴보았는데, 이번에는 이클립스 IDE에서 DDMS툴을 이용하여 손쉽게 파일시스템을 확인해보자. 이때 이클립스 툴바 오른편에서 DDMS perspective 버튼을 선택한다. 오른편에 File Explorer 창을 이용하여 data/data/com.example.hellojni 폴더의 내용을 확인할 수 있으며, lib폴더아래에 libhello-jni.so 파일이 있는 것 또한 확인할 수 있다.</P></DIV>
<DIV class="eArea xe_content xe_dr_img">
<P style="TEXT-ALIGN: left; DISPLAY: block"><IMG style="CURSOR: pointer" class=xe_file_srl_697499 alt="" src="http://flytgr.thoth.kr/files/attach/images/65772/421/697/9.jpg" rel="xe_gallery"> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>&lt;화면 9&gt;에서 보여지듯, 결국 안드로이드 응용프로그램은 system/lib 폴더의 라이브러리 이외에 /data/data/&lt;자신의 package이름&gt;/lib 아래 네이티브 라이브러리를 추가로 참고하는 것을 확인할 수 있다.</P></DIV>
<DIV class="eArea xe_content xe_dr_hx">
<H4 id=h1264118484218>네이티브 라이브러리를 사용하는 Java 코드 맛보기 </H4></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>허우대 대리는 Java코드 에서 어떻게 C로 작성한 네이티브 코드를 참고하는지 궁금해졌다. 이번에는 허우대 대리와 함께 src/com/example/HelloJni.java 코드를 살펴보자.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>&lt;리스트 4&gt; HelloJni.java 파일</STRONG><BR><STRONG></STRONG>-----------------------------------------------------------------<BR><STRONG></STRONG>… 중략…<BR><STRONG></STRONG>public class HelloJni extends Activity<BR><STRONG></STRONG>{<BR><STRONG></STRONG>@Override<BR><STRONG></STRONG>public void onCreate(Bundle savedInstanceState)<BR><STRONG></STRONG>{<BR><STRONG></STRONG>super.onCreate(savedInstanceState);<BR><STRONG></STRONG>TextView tv = new TextView(this);<BR><STRONG></STRONG>tv.setText( stringFromJNI() ); //-- (3) <BR><STRONG></STRONG>setContentView(tv);<BR><STRONG></STRONG>}<BR><STRONG></STRONG><BR><STRONG></STRONG>public native String stringFromJNI(); //-- (1) <BR><STRONG></STRONG><BR><STRONG></STRONG>… 중략…<BR><STRONG></STRONG>static {<BR>System.loadLibrary("hello-jni"); //-(2) <BR><STRONG></STRONG>}<BR><STRONG></STRONG>}<BR><STRONG></STRONG>-----------------------------------------------------------------</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>&lt;리스트 4&gt;는 stringFromJNI 함수를 호출하여 얻은 문자열을 textView에 내용으로 넣어주는 간단한 소스로, 3가지 의미로 이용된다. </P>
<P>1) native 키워드를 붙혀서 선언부만 작성한다. 네이티브 라이브러리에 구현부가 있음을 알려준다.</P>
<P>2) static {..} 부분은 이 class가 로딩될 때 호출되는 되는데 이때 ‘hello-jni’ 라는 이름의 네이티브 라이브러리를 로딩하라는 의미이다.</P>
<P>3) 네이티브 라이브러리 함수라도 보통의 Java 메소드와 같은 방식으로 사용한다.<BR><BR>이어 Source/samples/hello-jni.c 파일을 열어서 네이티브 라이브러리 구현부도 함께 살펴보도록 하자.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>&lt;리스트 5&gt; 네이티브 라이브러리 구현부 코드</STRONG> <BR>----------------------------------------------------------------------------------------------<BR>Jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,<BR>jobject thiz )<BR>{<BR>return (*env)-&gt;NewStringUTF(env, "Hello from JNI !")<BR>}<BR>----------------------------------------------------------------------------------------------</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>&lt;리스트 5&gt;를 보면 함수이름 앞에 ‘Java_com_example_ hellojni_HelloJni_’ 가 붙어 있는데, 이 부분은 JNI 함수이름 규칙에 의해 package명_클래스명이 Java에서 선언한 함수 이름 앞에 붙게 된다. 함수의 내용은 단순히 “Hello from JNI!” 라는 문자열을 Java에서 사용하는 String 타입으로 변환하여 반환하는 내용이다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P><STRONG>참고자료 </STRONG><BR>1. <A href="http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html" target=_blank>http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html</A><BR>2. <A href="http://developer.android.com/sdk/ndk/1.6_r1/index.html" target=_blank>http://developer.android.com/sdk/ndk/1.6_r1/index.html</A><BR>3. <A href="http://www.aton.com/android-native-libraries-for-java-applications/" target=_blank>http://www.aton.com/android-native-libraries-for-java-applications/</A><BR>4. <A href="http://www.swig.org/" target=_blank>http://www.swig.org</A>/<BR><BR>본 포스트는 마이크로소프트웨어의 기사를 발췌한 것입니다. 마이크로소프트웨어 홈페이지에서 더욱 다양한 기사와 소프트웨어 개발자를 위한 다양한 기술들을 제공하고 있습니다.마이크로소프트웨어 홈페이지 | http://www.imaso.co.kr </P></DIV></DIV></DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Wed, 14 Nov 2012 11:09:30 +0900</dc:date>
</item>
<item>
<title>자이로스코프와 관련한 나침반 앱</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=113</link>
<description><![CDATA[<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><SPAN style="LINE-HEIGHT: 19px; FONT-SIZE: 12px"><A style="FONT-FAMILY: 굴림, gulim, verdana, sans-serif; COLOR: rgb(102,102,102); TEXT-DECORATION: none" class=tx-link href="https://market.android.com/details?id=com.myastro.compass" target=_blank><U>https://market.android.com/details?id=com.myastro.compass</U></A></SPAN></SPAN></P>
<P style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><A style="FONT-FAMILY: 굴림, gulim, verdana, sans-serif; COLOR: rgb(102,102,102); TEXT-DECORATION: none" class=tx-link href="https://market.android.com/details?id=com.myastro.compass" target=_blank><IMG style="; ; FLOAT: none; CLEAR: none; ; CURSOR: pointer; BORDER-RIGHT: medium none" id=A_20112E4E4E9D957718E79C class=txc-image border=0 hspace=1 vspace=1 src="http://cfile235.uf.daum.net/image/20112E4E4E9D957718E79C" width=313 isset="true" actualwidth="313"></A></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 14pt">1. 자이로 컴파스란?</SPAN></SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">자이로 컴파스는 다음과 같이 정의할 수 있다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<DIV style="BORDER-BOTTOM: rgb(243,197,52) 1px dashed; BORDER-LEFT: rgb(243,197,52) 1px dashed; PADDING-BOTTOM: 10px; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(254,254,184); TEXT-INDENT: 0px; PADDING-LEFT: 10px; LETTER-SPACING: normal; PADDING-RIGHT: 10px; FONT: 12px/15px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); CLEAR: both; BORDER-TOP: rgb(243,197,52) 1px dashed; BORDER-RIGHT: rgb(243,197,52) 1px dashed; WORD-SPACING: 0px; PADDING-TOP: 10px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=txc-textbox><SPAN style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: AppleGothic, Gulim; COLOR: rgb(0,0,0); FONT-SIZE: 13px">
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">1. 사전적 의미&nbsp;&nbsp;</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;가.&nbsp;<STRONG><FONT color=#3a32c3>나침반</FONT></STRONG>(羅針盤) : 자침(磁針)이 남북을 가리키는 특성을 이용하여 방향을 알 수 있도록 만든 기구.</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;나. compass&nbsp; : 나침반,&nbsp;<STRONG><FONT color=#ff0000>나침의</FONT></STRONG>.</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;다.&nbsp;<STRONG><FONT color=#3a32c3>Magnetic compass</FONT></STRONG>&nbsp;: 자기(磁氣) 컴퍼스[<STRONG><FONT color=#ff0000>나침의</FONT></STRONG>].</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;라. gyro : gyrocompass. 바퀴, 회전의 뜻의 결합사.</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;마.&nbsp;<FONT color=#3a32c3><STRONG>gyrocompass</STRONG></FONT>&nbsp;:&nbsp;<STRONG><FONT color=#ff0000>나침의의 한 가지</FONT></STRONG>. 자이로컴퍼스.&nbsp;<STRONG><FONT color=#ff0000>회전 나침반</FONT></STRONG>.</SPAN></P>
<P style="TEXT-ALIGN: justify; PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; BORDER-RIGHT-WIDTH: 0px; TEXT-INDENT: 0px; MARGIN: 0px 0px 0px 8em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: 바탕; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(0,0,0); FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px"><SPAN style="TEXT-ALIGN: justify; LINE-HEIGHT: 21px; LETTER-SPACING: 0px; FONT-FAMILY: 바탕; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">&nbsp; &nbsp; 고속으로 회전하는 팽이를 주체로 하며, 지구 자기와는 관계가 없음.</SPAN></P></SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">일반적으로 자이로 스코프를 검색하면 다음과 같은 회전의 결과값이 나온다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px 0px 0px 8em; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><IMG style="FLOAT: none; CLEAR: none; CURSOR: pointer" id=A_1405CE454EA3B1A01C45EA class=txc-image border=0 hspace=1 vspace=1 src="http://cfile226.uf.daum.net/image/1405CE454EA3B1A01C45EA" width=317 isset="true" actualwidth="317">&nbsp; &nbsp;&nbsp;<IMG style="FLOAT: none; CLEAR: none; CURSOR: pointer" id=A_1919DB404EA3B14D19B4FA class=txc-image border=0 hspace=1 vspace=1 src="http://cfile219.uf.daum.net/image/1919DB404EA3B14D19B4FA" width=185 isset="true" actualwidth="185"></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">물론 안드로이드 폰이나 아이폰에 담겨있는 자이로 센서 칩은 아래와 같은 칩으로 구성 되어 있다.</SPAN></SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">아이폰4, Galaxy Tab, Galaxy S2에 탑재되어 있는 자이로 센서 MEMS 칩은&nbsp;</SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt">STMicroelectronics의 L3G4200D 모델이다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">단말에는 다음과 같은 각도로 장착되어 있다.</SPAN></SPAN></P>
<P style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><IMG style="FLOAT: none; CLEAR: none; CURSOR: pointer" id=A_16075A404EA3B1532D690B class=txc-image border=0 hspace=1 vspace=1 src="http://cfile236.uf.daum.net/image/16075A404EA3B1532D690B" width=178 isset="true" actualwidth="178"></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><IMG style="FLOAT: none; CLEAR: none; CURSOR: pointer" id=A_1929DA404EA3B156035B19 class=txc-image border=0 hspace=1 vspace=1 src="http://cfile221.uf.daum.net/image/1929DA404EA3B156035B19" width=294 isset="true" actualwidth="294"></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><BR></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">이미지 파일은 아이폰4를 기준으로한 모습이다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px">위의 그림에서 X축 방향은 Pitch 각속도를 Y축 방향은 Yaw 각속도를 Z축 방향은 Roll 각속도를 나타낸다.</SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">안드로이드 단말중 갤럭시 탭의 경우, 아이폰 4와 동일한 축으로 각속도 값이 나오지만,</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">갤럭시 S2의 경우에는 X축 Pitch 각속도와 Y축 Yaw 각속도가 서로 바뀌었다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">즉, X축은 Yaw 각속도를 나타내며, Y축은 Pitch각속도를 나타낸다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><BR></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><SPAN style="FONT-SIZE: 10pt">갤럭시 S2는 Portrait(세로 모드) 보다 Lanscape(가로 모드) 상태에서 Yaw 각도를 더 세밀하게 표현하기 위해서,</SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><SPAN style="FONT-SIZE: 10pt">Gyroscope MEMES 칩의 위치를 변경한 것으로 보인다.</SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><SPAN style="FONT-SIZE: 10pt">(예를 들어 차량용 Navigation app의 경우, 세로 모드 보다 가로 모드를 더 많이 사용한다.)</SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px">어쨓든 구글에서는 아이폰과 같은 장착을 Recommendation 했지만, 제조사(삼성)에서 변경하는 사항에 대한 강제성이 없음으로,</SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px">앱 개발자는 센서의 장착 축에 대해서 고려해야 한다. ㅠ ㅠ</SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px; COLOR: rgb(255,0,0); FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt"><BR></SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px; FONT-WEIGHT: bold"><SPAN style="COLOR: rgb(255,0,0); FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 10pt">단말 상태가 Portrait mode인지 Landscape mode인지에 대해서 체크하는 방법은</SPAN></SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt"><SPAN style="COLOR: rgb(255,0,0); FONT-SIZE: 10pt">Android 의 Display api를 이용하는 방법(구글은 이 방법을 추천 함)과 Accelerometer 가속도 센서로 부터 얻는 방법이 있다.</SPAN></SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt"><SPAN style="COLOR: rgb(255,0,0)"><SPAN style="FONT-SIZE: 10pt">이에 대해서는 다음에 정리해 보도록 하겠다.</SPAN></SPAN></SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><BR></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><BR></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 14pt">2. 안드로이드 Gyroscope Api</SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><BR></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">Gyroscope api는 이전에 한번 다뤘었다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><SPAN style="LINE-HEIGHT: 15px; FONT-FAMILY: 굴림, gulim, verdana, sans-serif; FONT-SIZE: 12px"><STRONG style="LETTER-SPACING: -1px; FONT-FAMILY: RixGoM; COLOR: rgb(49,91,177); FONT-SIZE: 16px; VERTICAL-ALIGN: middle; FONT-WEIGHT: bold" class=cB_Title><A style="FONT-FAMILY: 굴림, gulim, verdana, sans-serif; COLOR: rgb(102,102,102); TEXT-DECORATION: none" class=tx-link href="http://blog.daum.net/aero2k/17" target=_blank>Gravity Sensor(Accelerometer, Magnetic, Gyroscope)</A></STRONG></SPAN></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><BR></SPAN></FONT></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">기본 Api 들은 기존 SensorManager를 통해서 Magnetic, Accelerometer Sensor 정보를 얻어오는 방법과 동일하다.</SPAN></P>
<DIV style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">Gingerbread에서는 이 기반에서 Rotation Vector와 Linear Acceleration 기술이 추가 되었다.</SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt">이 기술은 2010년 하반기에 InvenSense에서 발표한 Rotation Vector, Linear Acceleration 에서 차용해 온듯 하다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 25px; FONT-FAMILY: arial, sans-serif; COLOR: rgb(51,51,51); FONT-SIZE: 20px; FONT-WEIGHT: bold"><A style="FONT-FAMILY: 굴림, gulim, verdana, sans-serif; COLOR: rgb(102,102,102); TEXT-DECORATION: none" class=tx-link href="http://www.youtube.com/watch?v=C7JQ7Rpwn2k" target=_blank>Sensor Fusion on Android Devices: A Revolution in Motion Processing</A></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">이 PT를 보면 안드로이드에서도 애플 iOS만큼의 Gyroscope과련 기술 발전이 있을 것 처럼 보여 지지만,</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">실망스럽게도 Gingerbread에 Rotation Vector와 Linear Acceleration 기술을 붙이기만 했지, 실제 공개된 소스를 보면,</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">전혀 자이로 스코프와 연계된 소스는 없고 Magnetic sensor와 Accelerometer sensor를 Euler Angle 계산법에 의해서</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">회전 방향(Heading)을 계산하고만 있다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">(이에 대해서 2011년 초에 다른 개발자들이 구글 측에 문의한 답변은 "아직은 지자기와 가속도 센서를 이용하고 있으며, 차후에 자이로 데이타를 사용할 것이다. 기다려 달라~" 였던듯 하다.)</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">결국 구글은 애플이 iOS4에 자이로 스코프를 탑재하니깐, 부랴부랴 Froyo에 자이로스코프 관련 api를 탑재하고,</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">Gingerbread에는 api를 보강한다고 했지만, 결국 변한것은 하나도 없었다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; COLOR: rgb(255,0,0); FONT-SIZE: 13px; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 10pt">(프로요 기반으로 자이로스코프가 탑재된 단말은 갤럭시 탭이 유일했던것으로 기억 됨.)</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; COLOR: rgb(255,0,0); FONT-SIZE: 13px; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">Gingerbread 에서 iOS4를 쫓아서 자이로 스코프를 적용한다면, Rotation Vector를 통해서 Quaternion 사원수 형태로&nbsp;</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">자이로 센서 정보를 얻어오고, 이를 토대로 Rotation Matrix를 구하려는 시도를 했어야 한다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">결국 api interface는 만들었지만, 안에 채워 놓지는 못했다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">Quaternion의 경우 가끔 NaN(Not a Number) error로 발생 시킨다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">아마도 acos(w) 처리를 하면서 입력값이 range가 -1.0 ~ +1.0 이어야 하는데 이 range를 벗어나는 값이 발생해서 나타는것이 아닌가 쉽다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">결국 구글은 방법은 WWDC 2010년에 iOS4 발표시에 Gyroscope Api인 CoreMotion 를 따라 할려고 하다가 실패한 것으로 보인다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">문제는 WWDC 2011년에 발표한 iOS5에서는 CoreMotion 기능이 더 보강 되어서, 임의의 축을 기준으로 Motion Sensing함으로서</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">현재의 Attitude(자세)를 측정하는 기술이 더욱 향상 되었다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">아마도 구글은 전반적인 자이로 스코프 관련 api를 수정할 필요를 그다지 느끼지 않는것 같다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">실제 자이로 스코프를 응용한 앱이 안드로이드 마켓에는 거의 없다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">현재는 iOS를 쫓아서 UX 개선 및 태블릿 PC OS인 honeycomb 이나 ice cream sandwich 만드는데 역량을 집중하고 있어서</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">자원이 부족한 것으로 보인다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">이번 Google IO 2011을 보면 android 3.0과 4.0에서는 구글의 자체 2D 엔진인 Skia lib가 iOS의 2D를 쫓아가지 못해서,</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">2D Accelerator를 opengles 2.0의 shader를 이용하겠다고 발표했다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">iOS의 경우 그 전부터 Core UI 나 Core Animation 에서 iOS에 커스터마이징된 bitblt 2D 가속칩을 사용 하고 있다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">안드로이드에서 Gyroscope api는 현재 아주 많이 부실하다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">하지만, Raw data인&nbsp;</SPAN></SPAN><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt">Yaw, Pitch, Roll&nbsp;data만을 이용해서도 기울기 자세를 90도 또는 0도에 가깝게 기울인 상태에서 측정할 경우,</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">정확하게 회전 방향을 측정할 수 있다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">하지만, 자세의 기울기를 30도 이상 기울여서 단말을 회전 시킬경우, 방향 각이 부 정확하게 나온다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">즉, 정확한 방향 각(선수 방향, heading)을 측정하기 위해서는 X, Y, Z축에 대해서 개발자가 자체적으로 Sensor Fusion을 해야 한다.</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<DIV style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><SPAN style="FONT-SIZE: 10pt">이렇게 구한<SPAN class=Apple-converted-space>&nbsp;</SPAN><SPAN style="COLOR: rgb(255,0,0); FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt">선수 방향 각 heading</SPAN></SPAN>은<SPAN class=Apple-converted-space>&nbsp;</SPAN><SPAN style="COLOR: rgb(255,0,0); FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 12pt">상대 각도</SPAN></SPAN>임으로, 임의의 기준 각도에 더해서 나침반으로 사용한다</SPAN></SPAN><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 10pt">.</SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<DIV style="BORDER-BOTTOM: rgb(243,197,52) 1px dashed; BORDER-LEFT: rgb(243,197,52) 1px dashed; PADDING-BOTTOM: 10px; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(254,254,184); TEXT-INDENT: 0px; PADDING-LEFT: 10px; LETTER-SPACING: normal; PADDING-RIGHT: 10px; FONT: 12px/15px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); CLEAR: both; BORDER-TOP: rgb(243,197,52) 1px dashed; BORDER-RIGHT: rgb(243,197,52) 1px dashed; WORD-SPACING: 0px; PADDING-TOP: 10px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=txc-textbox><SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">
<P style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 19px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 12px; PADDING-TOP: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px; FONT-WEIGHT: bold">임의의 기준 각도는 다음과 같이 2가지 방법을 통해서 구할 수 있다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 19px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 12px; PADDING-TOP: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 19px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 12px; PADDING-TOP: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">1. 임의의 기준 각도는 Android Orientation Sensor(가속도 + 지자기)로 부터 얻은 자북 방향 각도의 결과에서 편각을 보정 해줌으로서, 진북(True north, 정북) 방향 각도를 이용한다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></P></SPAN><SPAN style="LINE-HEIGHT: 19px; BACKGROUND-COLOR: rgb(255,255,255); FONT-SIZE: 12px">
<P style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">2. 임의의 기준 각도는 GPS Course로 부터 얻은 진북(True north)를 구한 각도를 이용한다.</SPAN></P></SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></P>
<DIV style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 12px/15px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt; FONT-WEIGHT: bold"><SPAN style="FONT-SIZE: 14pt">3. My App - Gyro Compass 3D</SPAN></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt"><BR></SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">현재 안드로이드 마켓에 올라와 있는 Gyroscope 관련 app의 경우, 애플의 App Store 마켓에 올라와 있는 그것 보다 많이 부실하다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/19px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><FONT size=2><SPAN style="LINE-HEIGHT: 21px"><SPAN style="FONT-SIZE: 10pt"><SPAN style="FONT-SIZE: 10pt">(그렇다고 제 앱이 좋다는 이야기는 아님 ^^;)</SPAN></SPAN></SPAN></FONT></P>
<DIV style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 12px/15px 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px"><BR></SPAN></DIV>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">Gyro Compass 3D앱은 Android Orientation Sensor(가속도+지자기)로 부터 얻은 각도(현재는 자북 -ㅁ-)에&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt">Sensor Fusion해서 얻은 heading 각도를 더한&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt">나침반 애플리케이션을 만들었다.</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 21px; FONT-SIZE: 13px">(Gyroscope + Accelerometer + Magnetic Sensor)</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">안드로이드 OS API에서 Gyroscope 관련 사항이 지원을 부실하기 때문에,</SPAN></P>
<P style="PADDING-BOTTOM: 0px; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 0px; PADDING-LEFT: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 12px/1.6 굴림, gulim, verdana, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(102,102,102); WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="FONT-SIZE: 10pt">개발자가 직접 Quaternion 계산 수식을 만들고, 가속도 센서와 지자기 센서를 이용한 Fusion하]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Fri, 09 Nov 2012 11:10:35 +0900</dc:date>
</item>
<item>
<title>안드로이드 게임 개발</title>
<link>http://rabbit129.cafe24.com/bbs/board.php?bo_table=android&amp;wr_id=108</link>
<description><![CDATA[<DIV id=view_92614>
<DIV><FONT style="FONT-SIZE: 10pt" color=#0000ff><STRONG>unity3d <BR><BR></STRONG></FONT>실제 unity3d 인력을 많이 채용</DIV>
<DIV>
<DIV id=view_92650>
<DIV>카메라에 따라서 2D - 3D 가능<BR>안드로이드 처럼 예제나 간단한 스크립트도 쉽게 구할수있다 </DIV>
<DIV>만약 2D 게임을 개발한다면 퀄리티에 비해서 무겁다는게 단점</DIV>
<DIV>자체적으로 메모리 관리를 해주기때문에 이미지가 많더라도 크게 메모리 상관없이 개발<BR><BR><BR><STRONG><FONT style="FONT-SIZE: 10pt" color=#0000ff>cocos2d-x<BR><BR></FONT></STRONG>왠간한건 다 구현<BR>메모리 관리부분 어려움<BR>비교적 다른 플랫폼에 비해 간단<BR>아이폰, 안드로이드 등 플렛폼 무제한이라 한번 개발시 포팅이 쉽다는 장점<BR><BR><BR><STRONG><FONT style="FONT-SIZE: 10pt" color=#0000ff>바야바 앤진<BR>
<DIV><A href="http://www.bayabalib.com/" target=_blank>http://www.bayabalib.com/</A></DIV></FONT></STRONG>&nbsp;
<DIV>
<DIV class=autosourcing-stub>
<DIV id=view_92652>안펍에서 주로 활동 하시는 바야바 님이 만드신 앤진
<DIV>Open GL SE1 을 기반<BR>써본 사람 말로는 사용하기 쉽다고 함<BR>라이선스가 있음</DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV>]]></description>
<dc:creator>기리</dc:creator>
<dc:date>Thu, 08 Nov 2012 15:33:30 +0900</dc:date>
</item>
</channel>
</rss>
