SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
김성엽 / ㈜팁스웨어
Speaker
• MVP (Visual C++)
• ㈜팁스웨어 대표
• tipssoft.com 개발 커뮤니티 운영자
• 한이음 IT 멘토
blog.naver.com/tipsware
tipsware
manager@tipsware.com
Agenda
NDK &
Cross-Platform
Visual Studio
Emulator
Android App
Development
Cross-Platform
DEMO
NDK & Cross-
Platform 기술 소개
VS2015에 추가된
Android Emulator
소개 및 시연
Android App 과
Win32 App 개발
시연
Android App &
Native App 개발
The NDK is a toolset that allows you to implement parts of
your app using native-code languages such as C and C++
- developer.android.com -
What is the NDK?
Native Development Kit
Android Playstore App Top50 (U.S.)
More Platforms = More Opportunities
• 더 큰 시장에서 더 많은 기회를 얻기 위해 Desktop App
개발자들도 모바일 앱 개발을 필요로 한다
• C/C++ 로 Android Framework 확장을 위한 것이 아닌
NDK 만을 사용한 Android App 개발이 가능하다
• 최소한의 자바 문법만 사용하여 NDK 로 개발 후 JNI 를
사용하여 연동하는 안드로이드 앱을 개발 할 수 있다
Cross-Platform
• 플랫폼(Platform) 이란 운영체제의 기반이 되는 기술의 집합체
• 두 가지 이상의 플랫폼에서 정상적으로 동작하는 것
• 기반이 다른 다수의 운영체제에서 공통으로 사용되는 것
Visual Studio 2015 Cross-Platform
하기 쉽다!
C++ IDE 로 Cross-Platform 개발이 가능하다!
code-editing 스타일을 사용할 수 있다!
• Cross-Platform 을 통해 코드를 하고 할 수 있다!
디버깅이 가능하다!
에뮬레이션이 가능하다!
Cross-Platform으로 무엇을 할 수 있는가?
Visual Studio Emulator for Android
Visual Studio Emulator 요구 사항
• Windows 8 Pro Edition 이상
• Virtual OS 및 Azure 에서는 실행 불가
• DHCP 설정, 자동 DNS 및 gateway 설정
• BIOS 가 반드시 아래 기능을 제공
• Hardware-assisted virtualization
• SLAT (Second Level Address Translation)
• DEP (Hardware-based Data Execution Prevention)
• Hyper-V 기능 활성화
• Hyper-V 에 대한 관리자 그룹 권한
Visual Studio Emulator Spec
Zoom, Rotation, Network, Location, Accelerometer, Battery, OpenGL, SD Card, Ca
mera, Audio playback, Keyboard Input, Screenshots, Version and Screen Size Confi
gurations, Drag&Drop APKs
Android SDK Manager
Emulator Demo
Native App 개발하기 - Step 1
• Native-Activity App 프로젝트 생성
1. 새 프로젝트에서 선택
생성
Native App 개발하기 - Step 2
• Native-Activity App 빌드하기
1. 사용 가능한 Emulator 목록에서 테스트할 하나를 선택
2. Hyper-V 기반 Emulator 는 만 지원
Native App 개발하기 - Step 3
• Native-Activity App 을 ARM Emulator 로 실행하기
1. AVD Manager 를 실행하여 Android용 Emulator 실행
2. USB 케이블을 사용하여 스마트폰에 Android App 배포
Native App 실행 흐름
ANativeActivity_onCreate
android_app_create
android_app_entry
android_main
android_app_destroy
Alooper_pollAll
process
이벤트가 존재하는가?
engine_draw_frame()
Native App 실행 흐름
process
이벤트의 종류
는 무엇인가?
process_input
engine_handle_input
engine_draw_frame()
android_app_pre_exec_cmd
engine_handle_cmd
process_cmd
android_app_read_cmd
android_app_post_exec_cmd
OpenGL ES
(Open Graphic for Embedded Systems)
• Khronos Group 에서 임베디드 기기를 위해 C언어로 작성된 무료 그래픽 라이브러리
에서 주로 사용되는 3D 그래픽 라이브러리
• ES 버전은 OpenGL 에서 잘 사용되지 않는 API를 제거하고
• NDK 에서는 API Level 4부터 OpenGL ES 1.x 버전을 제공
• 현재 NDK API Level 18 부터는 사용 가능
(Embedded-System Graphics Library)
• 실제 하드웨어에 출력할 때는 해당 된 EGL API 사용
OpenGL ES
• 화면 좌표계
• 폭과 높이가 인 사각형
• 수학에서 사용하는 좌표계와 동일
• Task Bar 를 포함한 영역
• 색상 정보
• 0.0 ~ 1.0 사이 실수 값
• α(alpha) : 색상의 투명도
OpenGL ES
static void engine_draw_frame(struct engine* engine)
{
if (engine->display == NULL) return;
glClearColor(1, 1, 0, 1);
glClear(GL_COLOR_BUFFER_BIT); // 지우는 속성을 명시
// 좌표를 배열할 때는 시계 반대방향으로 배열
GLfloat pos[8] = { -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5 };
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1, 0, 0, 1);
glVertexPointer(2, GL_FLOAT, 0, pos);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
// 물리적 장치에 출력. 함수를 호출하지 않으면 에뮬레이터가 오동작
eglSwapBuffers(engine->display, engine->surface);
}
OpenGL ES
• OpenGL ES 로 도형 그리기
• 출력 결과
GLfloat pos[8] = { -0.5, -0.5,
0.5, -0.5,
0.5, 0.5,
-0.5, 0.5 };
Native App 사용자 입력 처리
process_input
android_main 함수의 Event
Looper 에서 Event 체크
process
engine_handle_input
Native App 사용자 입력 처리 – Step 1
static int32_t engine_handle_input(android_app* app, AInputEvent *event)
{
engine *p_engine = (engine *)app->userData;
if( == AINPUT_EVENT_TYPE_MOTION){
// 사용자가 터치나 드래그와 같은 모션 형식의 정보를 입력함
} else {
// 사용자가 키를 입력함(AINPUT_EVENT_TYPE_KEY)
}
return 1;
}
• 사용자 입력의 Event Type 을 체크
: Key (Cancel 버튼, Power 버튼 등) 가 클릭됨
: 모션과 관련된 이벤트 발생
Native App 사용자 입력 처리 – Step 2
static int32_t engine_handle_input(android_app* app, AInputEvent *event)
{
engine *p_engine = (engine *)app->userData;
if(AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION){
int32_t action_type = (event);
if(action_type == AKEY_EVENT_ACTION_DOWN) // 화면 클릭 (터치 시작)
else if(action_type == AKEY_EVENT_ACTION_UP) // 화면 클릭 해제 (터치 끝)
else // 드래그 또는 멀티 터치
}
return 1;
}
• 사용자 입력 Event 의 행위를 체크
Native App 사용자 입력 처리 – Step 3
• 사용자 입력 Event 가 발생한 화면상의 좌표 값
• 위 함수를 통해서 얻은 좌표 값은 해상도를 기준으로 하는 좌표 값
• 현재 사용하는 장치의 해상도는 구조체에 width, height 에 저장됨
// 0 ~ (width – 1) 사이의 값 발생
int32_t x = AMotionEvent_getX(event, 0);
// 0 ~ (height – 1) 사이의 값 발생
int32_t y = AMotionEvent_getY(event, 0);
Native App File I/O – Step 1
• 파일 입출력 권한 얻기
<uses-permission
android:name=“android.permission. ”
></uses-permission>
<uses-permission
android:name=“android.permission. ”
></uses-permission>
AndroidManifest.xml
• 위 권한을 부여한 후, 생성한 앱을 배포하여
Device 에서 설치할 때 나오는 화면
Native App File I/O – Step 2
• 파일 입출력 권한 얻기 – C++ fstream 클래스
#include <fstream>
using namespace std;
ofstream tips_write_file(“/sdcard/tipssoft.dat”);
if(tips_write_file.is_open()){
int jin = 0x0412;
tips_write_file << jin; // jin 변수에 있는 정수 값을 파일에 쓴다
tips_write_file.close();
}
ifstream tips_read_file(“/sdcard/tipssoft.dat”);
if(tips_read_file.is_open()){
int jin = 0;
tips_read_file >> jin; // 저장된 정수 값을 읽어서 jin 변수에 저장
tips_read_file.close();
}
Native App File I/O – Step 3
• 파일 입출력 권한 얻기 – C 표준 입출력 라이브러리
#include <stdio.h>
FILE *p_write_file = fopen("/sdcard/tipssoft.dat", "wb");
if (p_write_file != NULL) {
int jin = 0x0412;
fwrite(&jin, 1, sizeof(int), p_write_file);
fclose(p_write_file);
}
FILE *p_read_file = fopen("/sdcard/tipssoft.dat", "rb");
if (p_read_file != NULL) {
int jin = 0;
fread(&jin, 1, sizeof(int), p_read_file);
fclose(p_read_file);
}
Native App Socket – Step 1
• 인터넷 사용 권한 얻기
• 소켓 사용에 필요한 헤더 파일 추가
​<uses-permission android:name=“android.permission. ”></uses-permission>
AndroidManifest.xml
• 위 권한을 부여한 후, 생성한 앱을 배포하여
Device 에서 설치할 때 나오는 화면
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
Native App Socket – Step 2
int gh_socket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in srv_addr;
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = inet_addr(“192.168.0.118”);
srv_addr.sin_port = htons(25790);
if (connect(gh_socket, (sockaddr *)&srv_addr, sizeof(srv_addr)) == 0) {
char *p_string = “Hello~ tipssoft!!”;
// (메시지 ID : 1) 문자열 한 개 전송
SendFrameData(gh_socket, 1, p_string, strlen(p_string) + 1);
int data = 0x00000412;
// (메시지 ID : 2) 정수 값 한 개 전송
SendFrameData(gh_socket, 2, (char *)&data, sizeof(data));
}
• 소켓을 생성하고 서버에 접속하는 코드
Native-Activity App Demo
Android App 개발하기 - Step 1
• Android 기본 App 프로젝트 생성
1. 새 프로젝트에서 선택
Android App 개발하기 - Step 2
• 솔루션에 라이브러리 추가
1. 새 프로젝트에서 선택
Android App 개발하기 - Step 3
• 생성한 라이브러리 참조
1. Android App 이 하도록 설정
Android App 개발하기 - Step 4
• 라이브러리의 C 소스 코드 작성
1. 함수 생성시 함수명은 아래와 같은 형식으로 작성
#include <jni.h>
#include <string.h>
extern “c”
{
jstring Java_com_MyJNI_MyJNI_getString(JNIEnv *env, jobject thisz)
{
return env->NewStringUTF(“Hello JNI”);
}
}
Android App 개발하기 - Step 5
• 안드로이드 앱의 JAVA 소스 코드 작성
public class MyJNI extends Activity
{
public native String getString();
static { System.loadLibrary(“MyLibrary”); }
@Override
public void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(getString());
setContentView(tv);
}
}
Android App Demo
Cross-Platform 개발 환경 구축
• Cross-Platform 은 동일한 소스를 기반으로 둘 이
상의 Platform 에서 동작하는 App 을 개발하는 것
를 이용하면 Cross-Platform 솔루
션을 만들 수 있다
• Visual C++ 에서는 Win32 Application, Android
App, iOS App 등을 동시에 개발할 수 있다
Cross-Platform Demo
Q & A
TIPS C/C++/MFC 무료 강좌
tipssoft.com
감사합니다.
http://aka.ms/td2015_again
TechDays Korea 2015에서 놓치신 세션은
Microsoft 기술 동영상 커뮤니티 Channel 9에서
추후에 다시 보실 수 있습니다.

Más contenido relacionado

La actualidad más candente

Xamarin.Forms (MVP ComCamp 2015)
Xamarin.Forms (MVP ComCamp 2015)Xamarin.Forms (MVP ComCamp 2015)
Xamarin.Forms (MVP ComCamp 2015)Gilbok Lee
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1성일 한
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포Dae Kim
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복sung hwan Park
 
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점양재동 코드랩
 
[133]awair 케빈조
[133]awair 케빈조[133]awair 케빈조
[133]awair 케빈조NAVER D2
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, VueGunhee Lee
 
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)NAVER D2
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민NAVER D2
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5성일 한
 
모바일표준Fw 소개자료 20141106
모바일표준Fw 소개자료 20141106모바일표준Fw 소개자료 20141106
모바일표준Fw 소개자료 20141106jSoboro
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기장현 한
 
모바일웹Ui개발 저자세미나 0부
모바일웹Ui개발 저자세미나 0부모바일웹Ui개발 저자세미나 0부
모바일웹Ui개발 저자세미나 0부NAVER D2
 
JavaScript MEAN 스택
JavaScript MEAN 스택JavaScript MEAN 스택
JavaScript MEAN 스택Tai Hoon KIM
 

La actualidad más candente (19)

Xamarin.Forms (MVP ComCamp 2015)
Xamarin.Forms (MVP ComCamp 2015)Xamarin.Forms (MVP ComCamp 2015)
Xamarin.Forms (MVP ComCamp 2015)
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포
마이크로소프트 앱 플랫폼을 이용한 어플리케이션 개발과 배포
 
1.develop environment
1.develop environment1.develop environment
1.develop environment
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
Ionic project guide
Ionic project guideIonic project guide
Ionic project guide
 
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점
2016 W3C Conference #8 : IONIC으로 하이브리드 앱 개발하기, 사례와 시사점
 
[133]awair 케빈조
[133]awair 케빈조[133]awair 케빈조
[133]awair 케빈조
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
 
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
 
Overview
OverviewOverview
Overview
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5
 
모바일표준Fw 소개자료 20141106
모바일표준Fw 소개자료 20141106모바일표준Fw 소개자료 20141106
모바일표준Fw 소개자료 20141106
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기
 
모바일웹Ui개발 저자세미나 0부
모바일웹Ui개발 저자세미나 0부모바일웹Ui개발 저자세미나 0부
모바일웹Ui개발 저자세미나 0부
 
JavaScript MEAN 스택
JavaScript MEAN 스택JavaScript MEAN 스택
JavaScript MEAN 스택
 

Similar a [Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)

TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolhyunae lee
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)DONGSU KIM
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)YEONG-CHEON YOU
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기hanbeom Park
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
Mobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarMobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarYongjun Park
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowByoung Do Ahn
 
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱NAVER Engineering
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appYEONG-CHEON YOU
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템강 민우
 
Python on Android
Python on AndroidPython on Android
Python on Android용 최
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)CONNECT FOUNDATION
 
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디Youngbin Han
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows MobileSeo Jinho
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016Jongwon Kim
 

Similar a [Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽) (20)

Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
TestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing toolTestExplorer 소개 - Android application GUI testing tool
TestExplorer 소개 - Android application GUI testing tool
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
Mobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarMobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS Serminar
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-window
 
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
 
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows Mobile
 
Unity소개
Unity소개Unity소개
Unity소개
 
Unity시작하기
Unity시작하기Unity시작하기
Unity시작하기
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 

Más de Sang Don Kim

[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016Sang Don Kim
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)Sang Don Kim
 
[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)Sang Don Kim
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)Sang Don Kim
 
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)Sang Don Kim
 
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)Sang Don Kim
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)Sang Don Kim
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)Sang Don Kim
 
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)Sang Don Kim
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)Sang Don Kim
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)Sang Don Kim
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)Sang Don Kim
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)Sang Don Kim
 
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)Sang Don Kim
 
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)Sang Don Kim
 

Más de Sang Don Kim (20)

[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)
 
[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
 
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
 
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
 
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)
 
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
 
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)
[Td 2015]general session 세상을 품은 플랫폼과 그 가능성에 대하여(기술에반젤리스트)
 

[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)

  • 2. Speaker • MVP (Visual C++) • ㈜팁스웨어 대표 • tipssoft.com 개발 커뮤니티 운영자 • 한이음 IT 멘토 blog.naver.com/tipsware tipsware manager@tipsware.com
  • 3. Agenda NDK & Cross-Platform Visual Studio Emulator Android App Development Cross-Platform DEMO NDK & Cross- Platform 기술 소개 VS2015에 추가된 Android Emulator 소개 및 시연 Android App 과 Win32 App 개발 시연 Android App & Native App 개발
  • 4. The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++ - developer.android.com - What is the NDK? Native Development Kit
  • 5. Android Playstore App Top50 (U.S.)
  • 6.
  • 7. More Platforms = More Opportunities • 더 큰 시장에서 더 많은 기회를 얻기 위해 Desktop App 개발자들도 모바일 앱 개발을 필요로 한다 • C/C++ 로 Android Framework 확장을 위한 것이 아닌 NDK 만을 사용한 Android App 개발이 가능하다 • 최소한의 자바 문법만 사용하여 NDK 로 개발 후 JNI 를 사용하여 연동하는 안드로이드 앱을 개발 할 수 있다
  • 8. Cross-Platform • 플랫폼(Platform) 이란 운영체제의 기반이 되는 기술의 집합체 • 두 가지 이상의 플랫폼에서 정상적으로 동작하는 것 • 기반이 다른 다수의 운영체제에서 공통으로 사용되는 것
  • 9. Visual Studio 2015 Cross-Platform 하기 쉽다! C++ IDE 로 Cross-Platform 개발이 가능하다! code-editing 스타일을 사용할 수 있다! • Cross-Platform 을 통해 코드를 하고 할 수 있다! 디버깅이 가능하다! 에뮬레이션이 가능하다!
  • 11. Visual Studio Emulator for Android
  • 12. Visual Studio Emulator 요구 사항 • Windows 8 Pro Edition 이상 • Virtual OS 및 Azure 에서는 실행 불가 • DHCP 설정, 자동 DNS 및 gateway 설정 • BIOS 가 반드시 아래 기능을 제공 • Hardware-assisted virtualization • SLAT (Second Level Address Translation) • DEP (Hardware-based Data Execution Prevention) • Hyper-V 기능 활성화 • Hyper-V 에 대한 관리자 그룹 권한
  • 13. Visual Studio Emulator Spec Zoom, Rotation, Network, Location, Accelerometer, Battery, OpenGL, SD Card, Ca mera, Audio playback, Keyboard Input, Screenshots, Version and Screen Size Confi gurations, Drag&Drop APKs
  • 16. Native App 개발하기 - Step 1 • Native-Activity App 프로젝트 생성 1. 새 프로젝트에서 선택 생성
  • 17. Native App 개발하기 - Step 2 • Native-Activity App 빌드하기 1. 사용 가능한 Emulator 목록에서 테스트할 하나를 선택 2. Hyper-V 기반 Emulator 는 만 지원
  • 18. Native App 개발하기 - Step 3 • Native-Activity App 을 ARM Emulator 로 실행하기 1. AVD Manager 를 실행하여 Android용 Emulator 실행 2. USB 케이블을 사용하여 스마트폰에 Android App 배포
  • 19. Native App 실행 흐름 ANativeActivity_onCreate android_app_create android_app_entry android_main android_app_destroy Alooper_pollAll process 이벤트가 존재하는가? engine_draw_frame()
  • 20. Native App 실행 흐름 process 이벤트의 종류 는 무엇인가? process_input engine_handle_input engine_draw_frame() android_app_pre_exec_cmd engine_handle_cmd process_cmd android_app_read_cmd android_app_post_exec_cmd
  • 21. OpenGL ES (Open Graphic for Embedded Systems) • Khronos Group 에서 임베디드 기기를 위해 C언어로 작성된 무료 그래픽 라이브러리 에서 주로 사용되는 3D 그래픽 라이브러리 • ES 버전은 OpenGL 에서 잘 사용되지 않는 API를 제거하고 • NDK 에서는 API Level 4부터 OpenGL ES 1.x 버전을 제공 • 현재 NDK API Level 18 부터는 사용 가능 (Embedded-System Graphics Library) • 실제 하드웨어에 출력할 때는 해당 된 EGL API 사용
  • 22. OpenGL ES • 화면 좌표계 • 폭과 높이가 인 사각형 • 수학에서 사용하는 좌표계와 동일 • Task Bar 를 포함한 영역 • 색상 정보 • 0.0 ~ 1.0 사이 실수 값 • α(alpha) : 색상의 투명도
  • 23. OpenGL ES static void engine_draw_frame(struct engine* engine) { if (engine->display == NULL) return; glClearColor(1, 1, 0, 1); glClear(GL_COLOR_BUFFER_BIT); // 지우는 속성을 명시 // 좌표를 배열할 때는 시계 반대방향으로 배열 GLfloat pos[8] = { -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5 }; glEnableClientState(GL_VERTEX_ARRAY); glColor4f(1, 0, 0, 1); glVertexPointer(2, GL_FLOAT, 0, pos); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); // 물리적 장치에 출력. 함수를 호출하지 않으면 에뮬레이터가 오동작 eglSwapBuffers(engine->display, engine->surface); }
  • 24. OpenGL ES • OpenGL ES 로 도형 그리기 • 출력 결과 GLfloat pos[8] = { -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5 };
  • 25. Native App 사용자 입력 처리 process_input android_main 함수의 Event Looper 에서 Event 체크 process engine_handle_input
  • 26. Native App 사용자 입력 처리 – Step 1 static int32_t engine_handle_input(android_app* app, AInputEvent *event) { engine *p_engine = (engine *)app->userData; if( == AINPUT_EVENT_TYPE_MOTION){ // 사용자가 터치나 드래그와 같은 모션 형식의 정보를 입력함 } else { // 사용자가 키를 입력함(AINPUT_EVENT_TYPE_KEY) } return 1; } • 사용자 입력의 Event Type 을 체크 : Key (Cancel 버튼, Power 버튼 등) 가 클릭됨 : 모션과 관련된 이벤트 발생
  • 27. Native App 사용자 입력 처리 – Step 2 static int32_t engine_handle_input(android_app* app, AInputEvent *event) { engine *p_engine = (engine *)app->userData; if(AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION){ int32_t action_type = (event); if(action_type == AKEY_EVENT_ACTION_DOWN) // 화면 클릭 (터치 시작) else if(action_type == AKEY_EVENT_ACTION_UP) // 화면 클릭 해제 (터치 끝) else // 드래그 또는 멀티 터치 } return 1; } • 사용자 입력 Event 의 행위를 체크
  • 28. Native App 사용자 입력 처리 – Step 3 • 사용자 입력 Event 가 발생한 화면상의 좌표 값 • 위 함수를 통해서 얻은 좌표 값은 해상도를 기준으로 하는 좌표 값 • 현재 사용하는 장치의 해상도는 구조체에 width, height 에 저장됨 // 0 ~ (width – 1) 사이의 값 발생 int32_t x = AMotionEvent_getX(event, 0); // 0 ~ (height – 1) 사이의 값 발생 int32_t y = AMotionEvent_getY(event, 0);
  • 29. Native App File I/O – Step 1 • 파일 입출력 권한 얻기 <uses-permission android:name=“android.permission. ” ></uses-permission> <uses-permission android:name=“android.permission. ” ></uses-permission> AndroidManifest.xml • 위 권한을 부여한 후, 생성한 앱을 배포하여 Device 에서 설치할 때 나오는 화면
  • 30. Native App File I/O – Step 2 • 파일 입출력 권한 얻기 – C++ fstream 클래스 #include <fstream> using namespace std; ofstream tips_write_file(“/sdcard/tipssoft.dat”); if(tips_write_file.is_open()){ int jin = 0x0412; tips_write_file << jin; // jin 변수에 있는 정수 값을 파일에 쓴다 tips_write_file.close(); } ifstream tips_read_file(“/sdcard/tipssoft.dat”); if(tips_read_file.is_open()){ int jin = 0; tips_read_file >> jin; // 저장된 정수 값을 읽어서 jin 변수에 저장 tips_read_file.close(); }
  • 31. Native App File I/O – Step 3 • 파일 입출력 권한 얻기 – C 표준 입출력 라이브러리 #include <stdio.h> FILE *p_write_file = fopen("/sdcard/tipssoft.dat", "wb"); if (p_write_file != NULL) { int jin = 0x0412; fwrite(&jin, 1, sizeof(int), p_write_file); fclose(p_write_file); } FILE *p_read_file = fopen("/sdcard/tipssoft.dat", "rb"); if (p_read_file != NULL) { int jin = 0; fread(&jin, 1, sizeof(int), p_read_file); fclose(p_read_file); }
  • 32. Native App Socket – Step 1 • 인터넷 사용 권한 얻기 • 소켓 사용에 필요한 헤더 파일 추가 ​<uses-permission android:name=“android.permission. ”></uses-permission> AndroidManifest.xml • 위 권한을 부여한 후, 생성한 앱을 배포하여 Device 에서 설치할 때 나오는 화면 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>
  • 33. Native App Socket – Step 2 int gh_socket = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in srv_addr; srv_addr.sin_family = AF_INET; srv_addr.sin_addr.s_addr = inet_addr(“192.168.0.118”); srv_addr.sin_port = htons(25790); if (connect(gh_socket, (sockaddr *)&srv_addr, sizeof(srv_addr)) == 0) { char *p_string = “Hello~ tipssoft!!”; // (메시지 ID : 1) 문자열 한 개 전송 SendFrameData(gh_socket, 1, p_string, strlen(p_string) + 1); int data = 0x00000412; // (메시지 ID : 2) 정수 값 한 개 전송 SendFrameData(gh_socket, 2, (char *)&data, sizeof(data)); } • 소켓을 생성하고 서버에 접속하는 코드
  • 35. Android App 개발하기 - Step 1 • Android 기본 App 프로젝트 생성 1. 새 프로젝트에서 선택
  • 36. Android App 개발하기 - Step 2 • 솔루션에 라이브러리 추가 1. 새 프로젝트에서 선택
  • 37. Android App 개발하기 - Step 3 • 생성한 라이브러리 참조 1. Android App 이 하도록 설정
  • 38. Android App 개발하기 - Step 4 • 라이브러리의 C 소스 코드 작성 1. 함수 생성시 함수명은 아래와 같은 형식으로 작성 #include <jni.h> #include <string.h> extern “c” { jstring Java_com_MyJNI_MyJNI_getString(JNIEnv *env, jobject thisz) { return env->NewStringUTF(“Hello JNI”); } }
  • 39. Android App 개발하기 - Step 5 • 안드로이드 앱의 JAVA 소스 코드 작성 public class MyJNI extends Activity { public native String getString(); static { System.loadLibrary(“MyLibrary”); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText(getString()); setContentView(tv); } }
  • 41. Cross-Platform 개발 환경 구축 • Cross-Platform 은 동일한 소스를 기반으로 둘 이 상의 Platform 에서 동작하는 App 을 개발하는 것 를 이용하면 Cross-Platform 솔루 션을 만들 수 있다 • Visual C++ 에서는 Win32 Application, Android App, iOS App 등을 동시에 개발할 수 있다
  • 43. Q & A
  • 44. TIPS C/C++/MFC 무료 강좌 tipssoft.com
  • 46. http://aka.ms/td2015_again TechDays Korea 2015에서 놓치신 세션은 Microsoft 기술 동영상 커뮤니티 Channel 9에서 추후에 다시 보실 수 있습니다.