case SMARTCARD_RESPONSE_CONNECT:
Log.d(LOG_TAG, "SMARTCARD_RESPONSE_CONNECT");
responseLine = (String)ar.result;
Log.d(LOG_TAG, "responseLine=[" + responseLine + "]");
StringTokenizer st = new StringTokenizer(responseLine, ": ");
Log.d(LOG_TAG, "responsePrefix=[" + st.nextToken() + "]");
Log.d(LOG_TAG, "responseValue=[" + st.nextToken() + "]");
mResult = (ar.exception == null);
mDone = true;
break;
boolean hasMoreTokens()
int countTokens()
2011년 3월 14일 월요일
2010년 4월 7일 수요일
Android Application 프로세스의 권한 문제 해결 방법
#include컴파일후 생성된 유틸의 퍼미션을 4755 로 설정하면 유틸리티의 UID 권한으로 실행된다.#include #include #include #include int main(int argc, char** argv) { printf("pppd running!!! [ \n"); setuid(0); // 4755 퍼미션을 사용하기위해 uid를 0으로 셋팅한다. setgid(0); // 4755 퍼미션을 사용하기위해 gid를 0으로 셋팅한다. system("/system/bin/pppd /dev/s3c2410_serial3 115200 defaultroute"); printf("pppd running!!! ] \n"); return 0; }
/init.rc
chown radio system /etc/pppd-script (?)
chown root root /etc/pppd-script (?)
chmod 4755 /system/bin/pppd_runner
Android NDK 를 이용한 lib 만들기
- NDK 디렉토리의 구성
/android-ndk-r3/apps/dc-config/Application.mk
/android-ndk-r3/apps/dc-config/project/
/android-ndk-r3/apps/dc-config/project/jni/
/android-ndk-r3/apps/dc-config/project/jni/Android.mk
/android-ndk-r3/apps/dc-config/project/jni/dc-config.c
/android-ndk-r3/apps/dc-config/project/libs/
/android-ndk-r3/apps/dc-config/project/libs/armeabi/
/android-ndk-r3/apps/dc-config/project/libs/armeabi/libdc-config.so
- /android-ndk-r3/apps/dc-config/Application.mk
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := dc-config
- /android-ndk-r3/apps/dc-config/project/jni/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dc-config
LOCAL_SRC_FILES := dc-config.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
- /android-ndk-r3/apps/dc-config/project/jni/dc-config.c
#include <string.h>
#include <jni.h>
#include <stdlib.h>
#include <unistd.h>
#include <android/log.h> /*
#define LOG_TAG "DC-CONFIG"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__);
* LIB를 사용하는 JAVA CLASS 에 정의된 package 명과 동일한 구조로 함수명을 작성한다(?)
* Java_[PACKAGE]_[CLASS NAME]_[FUNCTION NAME](JNIEnv* env, jobject thiz)
* /Eclair/packages/apps/Phone/src/com/android/phone/CdmaDataCallCheckBoxPreference.java
* package com.android.phone;
* public class CdmaDataCallCheckBoxPreference extends CheckBoxPreference {
* public native String stringFromJNI();
*/
jstring
Java_com_android_phone_CdmaDataCallCheckBoxPreference_stringFromJNI( JNIEnv* env,
jobject thiz )
{
int rtn = 0;
LOGD("PPPD_RUNNER START");
rtn = system("/system/bin/pppd_runner");
LOGD("PPPD_RUNNER START [%d]", rtn);
return (*env)->NewStringUTF(env, "TEST Hello from JNI !");
}
- /android-ndk-r3/apps/dc-config/project/libs/armeabi/libdc-config.so
컴파일 후 생성되는 lib 파일
- 컴파일
# cd /android-ndk-r3/
# make APP=dc-config - 사용
/Eclair/packages/apps/Phone/src/com/android/phone/CdmaDataCallCheckBoxPreference.java
package com.android.phone;
( ... )
public class CdmaDataCallCheckBoxPreference extends CheckBoxPreference {
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView( this );
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
static {
System.loadLibrary("dc-config");}} - 파일시스템에 라이브러리 추가
/system/lib/libdc-config.so
2010년 3월 31일 수요일
시스템에 파일 추가하기.
[1] 추가할 파일에 대한 정의
system/core/rootdir/Android.mk
[2] 추가할 파일을 아래와 같이 복사
system/core/rootdir/
[3] 컴파일 후 확인
out/target/product/XXX/system/etc/
system/core/rootdir/Android.mk
copy_from := \
etc/dbus.conf \
etc/hosts \
etc/init.gprs-pppd \
etc/ppp/chap-secrets \
etc/ppp/ip-down \
etc/ppp/ip-up
[2] 추가할 파일을 아래와 같이 복사
system/core/rootdir/
[jsk@mdroid 02.eclair]$ ll -R system/core/rootdir/
system/core/rootdir/:
합계 24
-rwxrwxrwx 1 jsk jsk 1845 2010-03-31 14:58 Android.mk
drwxrwxrwx 4 jsk jsk 4096 2010-03-31 16:32 etc
-rwxrwxrwx 1 jsk jsk 14169 2010-03-22 09:29 init.rc
system/core/rootdir/etc:
합계 48
-rwxrwxrwx 1 jsk jsk 935 2010-03-22 09:29 dbus.conf
-rwxrwxrwx 1 jsk jsk 25 2010-03-22 09:29 hosts
-rwxrwxrwx 1 jsk jsk 1677 2010-03-22 09:29 init.goldfish.rc
-rwxrwxrwx 1 jsk jsk 1176 2010-03-22 09:29 init.goldfish.sh
-rw-r--r-- 1 jsk jsk 525 2010-03-31 16:32 init.gprs-pppd
-rwxrwxrwx 1 jsk jsk 9280 2010-03-22 09:29 init.testmenu
-rwxrwxrwx 1 jsk jsk 718 2010-03-22 09:29 mountd.conf
drwxr-xr-x 3 jsk jsk 4096 2010-03-31 15:01 ppp
-rwxrwxrwx 1 jsk jsk 321 2010-03-22 09:29 vold.conf
system/core/rootdir/etc/ppp:
합계 12
-rw-r--r-- 1 jsk jsk 11 2010-03-31 14:41 chap-secrets
-rw-r--r-- 1 jsk jsk 388 2010-03-31 14:42 ip-down
-rw-r--r-- 1 jsk jsk 845 2010-03-31 14:44 ip-up
[3] 컴파일 후 확인
out/target/product/XXX/system/etc/
2010년 3월 25일 목요일
byte[] 을 String 로 변환하기
import java.util.Arrays;
byte smsc[] = (byte[]) map.get("smsc");
byte pdu[] = (byte[]) map.get("pdu");
Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);
Log.e("[JSK]", "smsc: " + Arrays.toString(smsc));
Log.e("[JSK]", "pdu: " + Arrays.toString(pdu));
2010년 3월 23일 화요일
ANDROID빌드환경에서 LINUX바이너리컴파일
[jsk@mdroid eclair]$ pwd
/home/jsk/00.SOURCE/ma110/trunk/mdroid/eclair
[jsk@mdroid eclair]$ ls -l system/core/
합계 116
-rw-rw-r-- 1 jsk jsk 933 2010-03-09 14:11 Android.mk
-rw-rw-r-- 1 jsk jsk 764 2010-03-09 14:11 README
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 adb
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 cpio
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 debuggerd
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 fastboot
drwxrwxr-x 13 jsk jsk 4096 2010-03-09 14:11 include
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 init
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libacc
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libctest
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libcutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 liblog
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libmincrypt
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libnetutils
drwxrwxr-x 6 jsk jsk 4096 2010-03-09 14:11 libpixelflinger
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libsysutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libzipfile
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logcat
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logwrapper
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 mkbootimg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 netcfg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 nexus
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 rootdir
drwxrwxr-x 5 jsk jsk 4096 2010-03-09 14:11 sh
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 toolbox
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 vold
0. system/core/ 디렉토리에 보면 커맨드로 사용되는 유틸리티들이 있음.
1. 컴파일하고자하는 C코드(Linux 유틸)를 system/core/ 빌드환경에 맞춰 준다.
1.1. system/core/Android.mk 파일에 의해서 system/core/ 하위 디렉토리는 컴파일 대상이 된다.
=> 하위 디렉토리에 Android.mk 파일에 의해서 컴파일 여부가 결정 됨
1.2. cp -ar system/core/netcfg system/core/dpram_dbg
=> 빌드환경을 갖고있는 디렉토리를 dpram_dbg 디렉토리로 복사 함
1.3. cp dpram_dbg.c system/core/dpram_dbg/dpram_dbg.c
=> 컴파일하고자 하는 C코드를 위에서 생성한 디렉토리에 복사함.
1.4. vim system/core/dpram_dbg/Android.mk
=> LOCAL_SRC_FILES, LOCAL_MODULE, LOCAL_SHARED_LIBRARIES 수정
------------------------------------------------------------
ifneq ($(BUILD_TINY_ANDROID),true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dpram_dbg.c
LOCAL_MODULE:= dpram_dbg
#LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
#LOCAL_STATIC_LIBRARIES := libcutils libc
LOCAL_SHARED_LIBRARIES := libc libnetutils
include $(BUILD_EXECUTABLE)
endif
1.5. 안드로이드 루트 디렉토리에서 빌드하면 됨
=> 라이브러리가 없어서 *.h 를 못찾는 에러가 나오면
LOCAL_SHARED_LIBRARIES 에 lib* 시작하는 라이브러리를 추가해주면 될 듯
lib* 은 /system/core/ 디렉토리에 많이 있음.
/home/jsk/00.SOURCE/ma110/trunk/mdroid/eclair
[jsk@mdroid eclair]$ ls -l system/core/
합계 116
-rw-rw-r-- 1 jsk jsk 933 2010-03-09 14:11 Android.mk
-rw-rw-r-- 1 jsk jsk 764 2010-03-09 14:11 README
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 adb
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 cpio
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 debuggerd
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 fastboot
drwxrwxr-x 13 jsk jsk 4096 2010-03-09 14:11 include
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 init
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libacc
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libctest
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libcutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 liblog
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libmincrypt
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libnetutils
drwxrwxr-x 6 jsk jsk 4096 2010-03-09 14:11 libpixelflinger
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libsysutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libzipfile
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logcat
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logwrapper
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 mkbootimg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 netcfg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 nexus
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 rootdir
drwxrwxr-x 5 jsk jsk 4096 2010-03-09 14:11 sh
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 toolbox
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 vold
0. system/core/ 디렉토리에 보면 커맨드로 사용되는 유틸리티들이 있음.
1. 컴파일하고자하는 C코드(Linux 유틸)를 system/core/ 빌드환경에 맞춰 준다.
1.1. system/core/Android.mk 파일에 의해서 system/core/ 하위 디렉토리는 컴파일 대상이 된다.
=> 하위 디렉토리에 Android.mk 파일에 의해서 컴파일 여부가 결정 됨
1.2. cp -ar system/core/netcfg system/core/dpram_dbg
=> 빌드환경을 갖고있는 디렉토리를 dpram_dbg 디렉토리로 복사 함
1.3. cp dpram_dbg.c system/core/dpram_dbg/dpram_dbg.c
=> 컴파일하고자 하는 C코드를 위에서 생성한 디렉토리에 복사함.
1.4. vim system/core/dpram_dbg/Android.mk
=> LOCAL_SRC_FILES, LOCAL_MODULE, LOCAL_SHARED_LIBRARIES 수정
------------------------------------------------------------
ifneq ($(BUILD_TINY_ANDROID),true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dpram_dbg.c
LOCAL_MODULE:= dpram_dbg
#LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
#LOCAL_STATIC_LIBRARIES := libcutils libc
LOCAL_SHARED_LIBRARIES := libc libnetutils
include $(BUILD_EXECUTABLE)
endif
1.5. 안드로이드 루트 디렉토리에서 빌드하면 됨
=> 라이브러리가 없어서 *.h 를 못찾는 에러가 나오면
LOCAL_SHARED_LIBRARIES 에 lib* 시작하는 라이브러리를 추가해주면 될 듯
lib* 은 /system/core/ 디렉토리에 많이 있음.
2010년 3월 5일 금요일
Android LOG
* 안드로이드 어플에서 로그 찍기
인클루드:
사용:
* 안드로이드 네이티브 C에서 로그 찍기
인클루드:
인클루드:
import android.util.Log;
사용:
private static final String TAG = "[[BMA150]]"; // 테그는 클래스에 선언 Log.d(TAG, "test");
* 안드로이드 네이티브 C에서 로그 찍기
인클루드:
사용:
#include
#define LOG_TAG "Sensors-BMA150" LOGD("%s", __FUNCTION__);
2010년 1월 12일 화요일
java 컴파일 설정
- 설치된 자바 리스트 확인
jsk@ubuntu:~$ update-java-alternatives --list
java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun
java-6-sun 63 /usr/lib/jvm/java-6-sun
- 자바 설정(java, javac, javah, javadoc)
jsk@ubuntu:~$ sudo update-alternatives --config java
[sudo] password for jsk:There are 2 alternatives which provide `java'.
Selection Alternative
-----------------------------------------------
*+ 1 /usr/lib/jvm/java-6-sun/jre/bin/java
2 /usr/lib/jvm/java-1.5.0-sun/jre/bin/javaPress enter to keep the default[*], or type selection number: 1
Using '/usr/lib/jvm/java-6-sun/jre/bin/java' to provide 'java'.
- javac / javah / javadoc 동일하게 설정
sudo update-alternatives --config javac
sudo update-alternatives --config javah
sudo update-alternatives --config javadoc
2009년 12월 23일 수요일
Cygwin 실행
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>cd c:\
C:\>chdir C:\apps\Brew_tools\apps\cygwin\bin
C:\apps\Brew_tools\apps\cygwin\bin>bash --login -i
Administrator@coderilla-nb ~
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>cd c:\
C:\>chdir C:\apps\Brew_tools\apps\cygwin\bin
C:\apps\Brew_tools\apps\cygwin\bin>bash --login -i
Administrator@coderilla-nb ~
NDK 예제 및 활용
- NDK 디렉토리
- C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\apps\hello-jni\project\src\com\example\hellojni\
- APP(JAVA) 소스가 있음
- C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\sources\samples\hello-jni\
- Native(C) 소스가 있음
- C:\apps\Brew_tools\apps\cygwin\home\Administrator\android-ndk-1.5_r1\out\apps\hello-jni\android-1.5-arm\
- Build 후 생성되는 so(Shared Object)를 갖고 있음
Build 하기
NDK 홈으로 이동
- cd ~/android-ndk-1.5_r1
- Build
- make APP=hello-jni
NDK 활용
Native Code 만들기(hello-jni 에서 복사)
- mkdir ~/android-ndk-1.5_r1/sources/samples/hi-jni/
cp -r ~/android-ndk-1.5_r1/sources/samples/hello-jni/* ~/android-ndk-1.5_r1/sources/samples/hi-jni/
mv ~/android-ndk-1.5_r1/sources/samples/hi-jni/hello-jni.c ~/android-ndk-1.5_r1/sources/samples/hi-jni/hi-jni.c
Nitive Code Mk 파일 수정
vi ~/android-ndk-1.5_r1/sources/samples/hi-jni/Android.mk
- LOCAL_MODULE :=
hello-jnihi-jni
- LOCAL_SRC_FILES :=
hello-jni.chi-jni.c
Native Code 수정
- vi ~/android-ndk-1.5_r1/sources/samples/hi-jni/hi-jni.c
- jstring Java_com_example_
hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) - jstring Java_com_example_hijni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
- java 패키지명과 동일하게 설정.
- APP 만들기(hi-jni 에서 복사)
- mkdir ~/android-ndk-1.5_r1/apps/hi-jni
- cp -r ~/android-ndk-1.5_r1/apps/hello-jni/* ~/android-ndk-1.5_r1/apps/hi-jni/
- APP Mk 파일 수정(모듈명 변경)
- vi ~/android-ndk-1.5_r1/apps/hi-jni/Application.mk
- APP_MODULES :=
hello-jnihi-jni
- Build
- cd ~/android-ndk-1.5_r1Build
- make APP=hi-jni
NDK 설치(WINDOW)
- Cygwin 설치
- Cygwin 다운로드 http://www.cygwin.com/setup.exe
- Android NDK 설치
- Android NDK 1.5 다운로드 : http://dl.google.com/android/ndk/android-ndk-1.5_r1-windows.zip
- Cygwin 설치
- Cygwin 이 이미 전체 설치 되어있다면 아래 Cygwin 설치 과정은 생략할 것.
- 모뎀 컴파일과 꼬일 수도 있으니 조심 조심.
[ 그림 01 - 실행화면 ]
[ 그림 02 - 설치방법: 인터넷 설치 선택 ]
[ 그림 03 - 설치 디렉토리 지정 ]
[ 그림 04 - 설치 파일 다운로드 할 경로 지정 ]
[ 그림 05 - 인터넷 연결방법 선택: Direct Conn ]
[ 그림 06 - 다운로드 요청 FTP 추가: http://ftp.daum.net/ ]
[ 그림 07 - 설치 패키지 설정: All install ]
( Category 에서 All 클릭하면 'Default' 에서 'Install' 로 바뀜 )
[ 그림 08 - 다운로드 및 설치 시작 ]
( 오래 걸림 )
[ 그림 09 - 설치 완료 ]
- 설치 완료 후 Cygwin 을 실행하여 사용자 홈디렉토리를 생성한다.
실행만 시키면 자동으로 생김.
- Android NDK 설치
[ 그림 10 - NDK 압축해제: 경로는 Cygwin 을 설치한 디렉토리 하위의 사용자 home 디렉토리 ]
[ 그림 11 - NDK 적용 ]
Cygwin 실행
NDK 디렉토리로 이동
cd android-ndk-1.5_r1
설치 스크립트 실행
bash ./build/host-setup.sh
2009년 12월 16일 수요일
Android App 개발환경 구축
- Java JDK 설치
- Android SDK 설치
- Eclipse 설치
- Java JDK 설치
- http://java.sun.com/javase/downloads/index.jsp
- [Java SE Development Kit (JDK)] - JDK 6 Update XX 최신 버전 다운로드
- 설치 - 설치 경로 확인 'C:\Program Files\Java'
- 환경 변수 등록
- java home 설정 추가
- 변수 이름: JAVA_HOME
- 변수 값: C:\Program Files\Java\jdk1.6.0_17
- jdk bin path 설정(시스템 변수 편집)
- 변수 이름: PATH
- 변수 값: C:\Program Files\Java\jdk1.6.0_17\bin;
- Android SDK 설치
- http://developer.android.com/sdk/index.html
- 최신 버전 다운로드(Windows android-sdk_r04-windows.zip)
- 압축 해제 - 경로 설정 'C:\Program Files\Java\android-sdk-windows'
- 환경 변수 등록
- android tools path 설정(시스템 변수 편집)
- 변수 이름: PATH
- 변수 값: C:\Program Files\Java\android-sdk-windows\tools;
- Eclipse 설치
- http://www.eclipse.org/downloads/
- Eclipse IDE for Java Developers (92 MB) 최신 버전 다운로드
- 압축 해제 - 경로 설정 'C:\Program Files\Java\eclipse'
- Android 관련 설치 및 설정
- Android ADT
- eclipse [Help]-[Install New Software]
- Add... -> Location : http://dl-ssl.google.com/android/eclipse/ 입력 Ok
- 체크 박스 선택 후 다음 클릭
- 기본 설치
- Android SDK 경로 설정
- eclipse [Windows]-[Preference]
- Android -> SDK Location : C:\Program Files\Java\android-sdk-windows 입력 Apply
- Android Virtual Device 만들기
- eclipse [Windows]-[Android SDK and AVD Manager]
- available Packages -> 전체 설치
피드 구독하기:
글 (Atom)










