추천강의

안드로이드 NDK 강좌 리뷰

알지오 2017. 11. 7. 14:16
알지오 평생교육원 안드로이드 NDK 강좌입니다.

전문가들이 뽑은 꼭 배워야하는 실무활용 강의
그동안 찾던 안드로이드 NDK 강좌의 완전판 !
여러분의 마지막 강의가 되어드리겠습니다.

알지오에서는 PC와 스마트폰, 태블릿을 이용해서 언제, 어디서나 공부를 할 수 있습니다.
열심히 공부해서 안드로이드 NDK 강좌를 마스터해보세요.

<안드로이드 NDK 강좌 샘플동영상>


<안드로이드 NDK 강좌 리뷰>
혼자서 어플개발 공부를 해보려고 하는데 어떻게 시작을 해야 할지 모르겠더라고요.
찾을 찾아서 읽어봐도 책의 내용을 쉽게 이해하지 못하겠고...
오프라인 강좌 후기들을 보면 실무적인 내용은 거의 없다는 후기들뿐이고...
제가 필요한 강의는 실무 내용을 배울 수 있는 강의 였는데 말이죠.
그러다 알지오 안드로이드 NDK 강좌 샘플 영상을 보고 
제가 정말 필요한 강의라는 느낌이 바로 들더라고요.
수강신청을 하고 강의를 들어보니까 책으로는 이해되지 않던 내용들이 
강사님의 설명으로 바로 이해도 빨리되고 
적용 되는대로 하니까 정말 좋습니다.
알지오 안드로이드 NDK 강좌 추천합니다.



안드로이드 NDK 강좌 정보입니다. 추천 인터넷 강의 : 알지오

안드로이드NDK강의,안드로이드NDK강좌,안드로이드NDK교육,안드로이드NDK학원,안드로이드NDK인강,안드로이드NDK인터넷강의,안드로이드NDK인터넷강좌,안드로이드NDK동영상,안드로이드NDK동영상강의,안드로이드NDK동영상강좌,안드로이드NDK배우기,안드로이드NDK사용법,안드로이드NDK사용방법,AndroidNDK강의,AndroidNDK강좌,AndroidNDK교육,AndroidNDK학원,AndroidNDK인강,AndroidNDK인터넷강의,AndroidNDK인터넷강좌,AndroidNDK동영상,AndroidNDK동영상강의,AndroidNDK동영상강좌,AndroidNDK배우기,AndroidNDK사용법,AndroidNDK사용방법

  • 01.50분 JNI를 이용한 자바와 C 인터페이스 part1

    JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 자료를 주고 받기

    책갈피 : [00:15] 빈 프로젝트 생성/[00:22] MainActivity.java 코드 열기/[00:40] 네이티브 메소드 선언/[01:07] 네이티브 라이브러리 호출/[01:49] 네이티브 메소드 호출/[02:07] setTitle/[02:21] getMyData/[02:45] java 코드 완성/[03:07] 폴더 생성/[03:22] new-folder/[03:46] 폴더 안에 필수 파일 생성/[04:09] help-install new software/[04:15] Luna 선택/[04:39] programming languages/[05:15] 파일 생성/[06:00] local_module/[06:23] local_src_files/[07:29] 해당파일 추가 생성/[07:53] 헤더파일 입력/[08:13] 네이티브 메소드 함수 선언/[10:00] package 값 알기/[10:35] 메소드 이름 정확하게 입력/[11:30] 네이티브 코드 작성 완료/[11:43] ndk 컴파일/[12:13] 디렉토리 이동/[12:22] ndk-build/[13:07] ndk build 완료/[13:18] 어플리케이션 에뮬레이터로 실행/[13:39] 제목-네이티브 코드 동일/[14:09] 정보를 주고 받는 어플리케이션/[14:18] 새 프로젝트 생성/[14:28] 프로젝트 이름 생성/[14:56] 프로젝트 추가 확인/[15:11] MainActivity.java 코드 열기/[15:43] activity_main.xml 파일 수정/[16:18] 세부 정보는 코드를 통해 변경/[16:29] 구성/[16:40] 텍스트 입력/[17:03] 버튼 추가/[17:18] 구성 완료/[18:11] 세부 정보 확인 및 변경/[18:33] text 값 변경/[19:07] 속성 값 변경 완료/[19:15] 크기 및 위치 수정/[19:37] 저장 후 에뮬레이터 확인/[20:18] 정보를 주고 받는 기능 코드 입력/[21:32] 변수 선언/[22:18] editText/[22:26] spinner/[22:33] button/[23:21] 객체에 대한 정보를 import/[24:52] findViewById/[25:40] 더블클릭으로 id값 확인/[25:59] 두개의 값 서로 일치/[26:15] 키 값 복사 붙여넣기/[27:10] spinner와 button 정보도 id 변수 일치/[27:29] 네이티브 메소드 선언/[27:51] 총 4가지의 메소드 선언/[28:21] int/string/void 선언/[30:02] 네이티브 라이브러리 호출/[30:37] 안드로이드 파일 생성/[31:22] 빌드 환경설정 파일 생성/[31:33] module/files 이름 입력/[32:06] 패키지 이름 복사 붙여넣기/[32:30] 빌드 설정파일 완성/[32:37] 실제 네이티브 파일 소스 생성/[33:21] 4가지 메소드 복사 붙여넣기/[33:37] 내용 수정/[34:22] 네이티브 메소드 수정/[34:43] 패키지 이름과 클래스 이름을 추가적으로 입력/[35:49] 네이티브 메소드 기본 템플릿 완성/[36:15] 메소드 동작 추가/[36:45] 코드 입력/[37:37] findEntry 함수 선언/[37:52] GetStringUTFChars 함수/[38:35] 변수에 저장/[40:07] getInteger 메소드/[40:59] 코드 추가/[41:44] NewStringUTF/[42:15] ndk-build/[42:45] 네이티브 라이브러리 생성 확인/[43:05] 네이티브 메소드 호출/[43:34] 버튼을 눌렀을 때 동작 코드 추가/[43:52] 변수 설정/[44:22] OnClickListener 함수/[44:45] view에 해당하는 import/[45:05] onGetvalue/onSetvalue/[45:30] spinner 동작 추가/[46:22] lAdapter 변수/[47:15] 열거형 변수 integer/string/[47:37] ArrayAdapter import/[47:45] 에뮬레이터 확인/[48:20] 실제 동작

  • 02.51분 JNI를 이용한 자바와 C 인터페이스 part2

    JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 객체 및 배열 형식의 자료를 주고 받으며 오류를 처리

    책갈피 : [00:09] 객체 정보 교환 방법/[00:19] 첫번째 예제 import/[00:31] copy projects into workspace 체크/[00:52] 해당 프로젝트 소스 수정/[01:21] StoreType.java 소스/[01:41] Store.java 소스/[02:36] 총 4개의 네이티브 메소드 선언/[02:42] StoreActivity.java 소스/[03:46] 잘못 입력할 때 경고메시지를 띄우는 기능/[03:53] 네이티브 c코드/[04:00] com_packtpub_Store.c/[04:30] 4개의 메소드에 대한 세부 동작/[04:54] Store.c/[05:30] 4개의 공용 함수-메소드에서 동일한 기능/[05:41] 안드로이드 어플리케이션/[05:46] main.xml 파일 열기/[06:30] 정보를 교환 할 수 있도록 변경/[06:44] StoreType.java 코드 열기/[06:58] color 추가/[07:15] 네이티브 메소드 추가/[07:46] 수정한 2개의 소스 저장/[08:11] class 선택/[08:22] 이름 입력 후 완료/[08:41] color 객체 선언/[09:31] StoreActivity.java 코드를 통해 정보 교환하는 부분 추가/[09:41] onGetValue 메소드 추가/[10:31] setColor 메소드 호출/[11:05] 에러 메시지 구문 추가/[11:31] color 정보를 교환하는 메소드 추가/[12:03] findEntry/[12:39] setColor 네이티브 메소드 선언/[12:48] NewGlobalRef/DeleteGlobalRef/[13:31] jobject/[16:07] color 정보 저장의 오류가 발생 했을 때/[16:44] Store.h 파일 열기/[17:03] color 정보 추가/[17:37] StoreValue/[17:56] StoreType/[18:26] store_max_capacity/[19:00] color object에 대한 구문 추구/[19:33] color 정보에 대한 접근 가능/[19:40] NULL 값 오류/[19:48] 헤더파일 추가/[20:00] 오류 해결/[20:41] ndk-build/[21:10] 에뮬레이터 확인/[23:41] 어플리케이션 오류/[23:52] 두번째 예제 열기/[25:17] 예외처리 부분 추가/[25:51] package 추가/[26:14] 해당 package에 대한 class 추가/[26:26] 해당 클래스 선언/[26:56] 오류 상황을 처리하기 위한 클래스/[27:21] 다른 예외 상황에 대한 클래스 추가/[27:52] 또 다른 예외 상황 클래스 추가/[28:41] 오류 상황 발생 설정/[28:51] Store.java 파일 열기/[29:06] 예외 상황 추가/[30:10] 다른 메소드에도 추가/[30:18] import/[30:45] StoreActivity.java 예외구문 추가/[31:03] onGetValue/[31:40] try catch문 추가/[32:07] import/[32:22] 저장 용량이 꽉 찼을 때의 예외처리/[32:34] onSetValu-try catch문에 catch부분 추가/[32:45] import/[32:58] 네이티브 c코드에서 오류가 발생했을 때 함수 추가/[34:00] Store.c 에서 오류 함수 추가/[34:37] 3가지의 함수 추가/[35:07] lclass/[37:07] 해당 예외의 함수를 실행/[37:19] 저장/[37:30] 만들어 놓은 함수 해당 헤더파일에 추가/[37:45] ndk-build/[38:35] 에뮬레이터 실행 확인/[41:29] 배열로된 데이터 주고받기/[41:58] libs 폴더에 guava 복사/[42:07] refresh-라이브러리 자동 생성/[42:30] StoreType.java에 array 추가/[42:43] integerArray/colorArray/[42:58] 네이티브 메소드 추가/[43:42] StoreActivity.java 메소드 추가/[44:58] stringToList 함수/[46:13] import/[46:22] 배열에 관련된 import 작업으로 오류 해결/[46:49] 네이티브 c코드 수정/[47:21] 정수열 배열로 저장할 수 있는 메소드 추가/[48:04] 배열 변수 추가/[48:37] 해당 헤더파일에 선언/[48:52] allocateEntry/[49:30] 배열에 대한 메모리를 정리하는 부분 추가/[49:45] 오류 해결 후 ndk-build/[49:51] 에뮬레이터 실행 확인

  • 03.51분 네이티브 코드에서 자바 콜백 호출

    JNI 인터페이스를 사용해서 네이티브 코드에서 자바 코드의 매소드 호출

    책갈피 : [00:09] 자바와 네이티브 thread 동기화/[00:59] Store.java 코드 열기/[01:17] 메소드 추가/[01:49] 각 메소드에 synchronized추가/[02:12] 저장 후 StoreActivity.java 열기/[02:49] onStart/onStop/[03:30] setInteger/[04:27] 네이티브 코드 수정/[04:39] 파일 추가/[04:57] 헤더파일 내용 추가/[05:27] 3개의 상수 define/[05:46] OK/KO 정리/[06:41] 변수 선언/[07:00] startWatcher/stopWatcher 선언/[07:15] 파일 추가/[08:03] 메소드 기능/[08:50] 네이티브 메소드 동작 추가/[09:22] 메모리 용량 확보/[10:54] 네이티브 thread 종료 메소드 구현/[11:54] MonitorEnter/[12:56] deleteGlobalRef/[13:43] 코드 추가/[14:13] 정보를 가져오는 메소드/[15:03] runWatcher 메소드/[15:30] lStore/[15:58] 초기화 작업 완료/[16:37] STATE_OK/STATE_KO/[17:26] 일정한 시간만큼 sleep/[17:48] Entry라는 포인터에 지정/[18:59] processEntry 메소드 구현/[19:41] watcherCounter/[20:37] c코드 열기/[21:00] 네이티브 메소드를 생성하고 삭제하는 기능 추가/[21:15] initializeStore 메소드 추가/[21:29] finalizeStore 메소드 추가/[22:10] 구조체 변수 선언/[22:32] 헤더 파일 추가/[22:48] ndk 빌드작업 수행/[23:07] ndk 관련 라이브러리 생성/[23:18] 에뮬레이터 실행/[23:40] key값 입력/[24:11] 값이 증가 되는것 확인/[24:18] 네이티브 코드에서 자바 콜백 호출/[25:21] 인터페이스 추가/[25:47] 이름 입력 후 생성/[25:59] 오버로딩 메소드 선언/[26:25] Store.java 열기/[26:37] 인터페이스 상속/[27:00] Handler/StoreListener 변수 선언/[27:51] 메소드 구현/[28:45] Handler 정보 import 하고 저장/[29:55] Listener 인터페이스 상속 후 구현/[30:22] 경고 메시지 화면에 표시/[30:48] 저장/[31:00] 오류발생 해결/[31:44] 네이티브 코드 수정/[32:00] runWatcher/[32:43] 자바 콜백을 요청하는 메소드 추가/[33:22] class 추가/[34:07] class color 메소드 추가/[35:12] 콜백하고자 하는 메소드의 id값을 선언/[35:37] color object 변수 추가 후 저장/[35:52] 콜백 구현하는 동작/[36:06] 메소드 추가/[36:42] 네이티브 thread 초기화/[37:52] class 정보 연동/[38:22] 콜백하는 메소드 정보 연동/[39:21] GetMethodID/[40:30] void/[41:19] I/L/[41:45] 반환 값/[42:37] 각각의 자료형에 맞는 대표 심볼/[42:52] equal/[43:29] init/[44:07] color 설정/[44:30] 문자열 변환 메소드 사용/[45:19] 선언한 메소드 실제 구현 코드 추가/[45:22] processEntryInt/[46:00] 범위 안에 있는 콜백 메소드 호출/[47:37] 자바 코드에서 메소드 호출/[48:21] processEntryString/processEntryColor/[49:14] processEntry 수정/[49:35] 3개의 메소드로 호출 하도록 수정/[49:42] makeGlobalRef/[50:07] ndk-build/[50:15] 에뮬레이터 실행 후 key값 입력/[51:15] 콜백/콜백 중단 확인

  • 04.50분 완전한 네이티브 어플리케이션 작성

    자바 코드 없이 순수 네이티브 C/C++ 코드만을 사용해서 기본적인 이벤트를 처리하는 안드로이드 어플리케이션 제작

    책갈피 : [00:12] c네이티브 코드만을 사용해 어플리케이션 생성/[00:17] 새 프로젝트 생성/[01:00] 레이아웃 폴더에있는 xml파일 삭제/[01:11] 자바코드 삭제/[01:37] AndroidManifest.xml파일 수정/[01:45] application 선택/[01:55] MainActivity 수정/[02:21] Meta Data 추가/[02:30] Meta Data값 수정/[03:27] Convert/[03:36] 변경/[04:15] 프로젝트 자동 빌드 환경 생성/[04:40] 빌드 환경 변경/[05:15] Apply 현재설정 수정/[05:30] 네이티브 코드 추가/[05:46] Header File 추가/[06:46] 프로젝트 설정 변경/[07:00] paths and symbols/[07:24] 헤더파일 경로 추가/[09:33] Assembly 언어 경로 추가 완료/[09:43] C/C++ 똑같은 경로 추가/[10:39] 두번째 Header File 추가/[11:07] namespace/[11:58] class 동작구현/[12:13] Source File/[12:35] log class의 info 구현/[14:16] error/warn/debug 구현/[15:07] Header File 추가/[15:35] EventLoop/[16:30] 헤더파일 2개 추가/[16:56] 자동빌드 후 오류 메시지 제거/[17:18] 동일한 이름의 c++ 파일 추가/[17:48] EventLoop 구현/[18:33] log출력함수를 이용한 메시지 출력/[18:56] ALooper_pollOnce/[19:37] 어플리케이션 종료/[20:48] 메인코드 c++파일 생성/[21:30] android_main/[21:55] 어플리케이션을 수행하는 동작/[22:37] 빌드 설정 파일 생성/[22:55] 설정 파일 추가/[23:29] module 이름으로 라이브러리 생성/[23:41] 저장 후 빌드 수행/[24:22] 라이브러리 파일 생성된것 확인/[24:37] 에뮬레이터 실행/[25:11] 어플리케이션 동작 log메시지로 확인/[25:26] LogCat/[26:07] saved filters 필터 추가/[27:33] 뒤로가기 버튼-앱 종료/[28:15] 네이티브 어플리케이션의 기능 확장/[28:30] types.hpp 열어 상수 선언/[28:41] status/[29:22] ActivityHandler class추가/[29:37] 메소드 선언/[30:26] EventLoop 코드 추가/[30:52] 콜백함수 선언/[31:11] 새로운 변수 선언/[31:45] 추가한 변수들 초기화/[32:35] userData/onAppCmd/[33:07] callback 함수 선언/[34:20] processAppEvent/[35:13] Handler에서 만든 메소드 추가 호출/[35:49] 추가적으로 코드 삽입/[35:52] 새로운 헤더파일 생성/[36:43] ActivityHandler메소드를 오버로딩/[37:04] 동일한 이름의 c++코드 생성/[37:42] 각각의 상태에 해당 메시지 출력/[38:15] 이벤트 처리 확장/[38:30] run/[39:43] 함수 수정/[40:13] 입력값 변경/[40:44] mEnabled/[42:22] 함수 추가/[42:30] activate/deactivate 메소드 선언/[44:15] 메시지 log로 출력/[46:29] 수정 후 완성/[46:37] ActivityHandler/[46:52] Blaster class 사용/[47:29] 오류 수정/[47:52] 저장 후 라이브러리 생성 확인/[48:00] 에뮬레이터 실행/[48:20] log 메시지 확인

  • 05.42분 OpenGL ES로 그래픽 랜더링 part1

    OpenGL ES 그래픽 라이브러리를 사용해서 안드로이드 어플리케이션을 제작

    책갈피 : [00:11] 타이머를 통해 물체를 이동시키는 어플리케이션/[00:23] 새로운 header file생성/[00:52] class 선언/[01:23] 4개의 메소드/[01:38] 동일한 이름의 c++파일 생성/[02:04] 2개의 메소드 값 0으로 초기화/[03:28] 메소드 구현 후 저장/[04:00] header file 추가/[04:15] context 해당 내용 삽입/[04:55] blaster.hpp 파일 열기/[05:00] 2개의 class에 대한 header file을 include/[05:30] 변수 추가/[05:59] 도형을 움직일 수 있는 메소드 추가/[06:26] 도형을 그리는거와 관련된 변수나 객체 선언/[07:11] 수정한 class에 맞게 메소드 구현/[07:30] 생성자의 입력값 수정/[08:22] TimeService-reset/[09:31] WindowBuffer 구조체/[09:46] lock/unlock/[10:00] 도형의 위치 결정/[10:48] onStep메소드 구현/[11:15] 내용 추가/[11:35] x좌표 위치 수정/[12:03] 도형을 그리는 기능/[13:01] clear메소드 구현/[13:24] drawCursor메소드/[15:03] 해당 파일 수정 완료/[15:22] main 수정/[16:00] context변수/[16:15] 오류 처리/[17:07] LS_CPP변수 선언/[17:18] 컴파일 할 소스이름 자동화/[17:47] 저장 후 컴파일 확인/[18:00] 어플리케이션 에뮬레이터로 실행/[18:22] OpenGL ES로 그래픽 랜더링/[18:44] header file 생성/[18:59] GraphicsService class 선언/[19:22] getHeight/getWidth/[19:56] graphic에 관련된 source 추가/[20:30] class 실제 구현/[21:03] return값 바로 반환/[21:51] eglGetDisply/eglInitialize/[23:41] MakeCurrent/[24:32] OpenGL을 사용하기 위해 초기화 하는 start 메소드/[24:51] stop 메소드/[25:21] update 메소드/[25:40] ClearColor/Clear/[27:11] SwapBuffer/[27:22] GraphicsService 구현 완료/[27:32] 컴파일 에러 해결/[28:00] debug 메시지 수정을 위해 Log.hpp 파일 열기/[28:37] paths and symbols/[29:11] 오류 전부 해결/[29:18] Context.hpp열어 참조변수 추가/[29:56] Blaster 코드 수정/[30:15] 생성자 및 소멸자 수정/[30:47] clear/drawCursor 제거/[31:21] 수정된 Blaster class 구현/[31:30] Blaster.cpp 열어 수정된 것 반영/[31:47] 변수 모두 제거/[32:15] 어플리케이션 활성화 시 동작 수정/[32:58] TimeService-reset/[33:22] GraphicsService-stop 호출/[33:45] 기존 코드 삭제하고 update 메소드 호출/[34:27] Main.cpp 수정/[34:37] GraphicsService class 선언/[35:05] 입력 값 수정/[35:37] 빌드 설정 추가/[35:52] 저장/[36:07] 에뮬레이터 실행/[36:34] OpenGL ES로 텍스쳐 로딩/[36:44] png 그림파일 불러오기/[37:06] 라이브러리 다운받을 경로/[37:43] android-ndk폴더에 다운로드 받은 라이브러리 복사 후 압축 풀기/[38:00] scripts/[38:37] 해당 파일을 메모장으로 열어 스크립트 추가/[39:58] libpng/[40:30] paths and symbols-png 경로 추가/[41:30] obj-libpng.a라이브러리 생성 확인

  • 06.50분 OpenGL ES로 그래픽 랜더링 part2

    OpenGL ES 그래픽 라이브러리를 사용해서 텍스쳐 및 스프라이트를 표현하기

    책갈피 : [00:08] OpenGS ES로 텍스쳐 로딩 실습/[00:23] assets 폴더/[00:50] assets 폴더에 그림파일 넣기/[01:33] header file 추가/[01:49] Resource class 선언/[02:50] source file 생성/[03:15] 생성자는 class에서 사용하는 3개의 변수 초기화/[03:37] open 메소드/[04:00] close/read/[04:46] header file 추가/[05:45] 텍스쳐를 사용하는데 관련된 class 만들기/[06:40] 변수 사용/[07:00] 텍스쳐 관련 class 구현/[07:12] source file 생성/[07:30] 3개의 메소드 구현/[07:46] getPath/getHeight/getWidth/[08:11] loadImage 구현/[08:24] 변수 사용/[09:13] signature 확인/[10:01] png_create_read_struct/[10:31] 콜백함수 등록/[11:16] png파일의 헤더를 읽는 부분을 구현/[11:58] 각각의 정보를 만들어둔 변수에 저장/[12:18] 투명도를 나타내는 변수 true 지정/[12:46] 색상 포맷의 변수/[13:24] png_read_update_info/[13:52] y좌표 변환/[14:11] rowsize/[16:07] 저장/[16:26] png_read_image/[16:45] ImageBuffer 반환/[17:15] callback을 호출하기 위한 함수 구현/[18:26] load 메소드 구현/[18:56] glGenTextures/[20:07] ImageBuffer 초기화/[20:30] unload/apply 메소드 구현/[21:29] GraphicsService.hpp 열기/[21:47] GraphicsService class에 소멸자 추가/[22:22] class 수정 후 실제로 구현/[22:29] GraphicsService.cpp 열기/[22:51] 추가로 만든 소멸자 구현/[23:18] loadResources/[24:07] 필요한 textures 수 만큼 load/[24:30] unloadResources/[24:48] mTextures/[26:18] 등록 되었는지 확인/[26:22] Blaster.cpp-onActivate/[27:22] loadImage 메소드 실행/[27:37] 에뮬레이터 실행/[28:11] LogCat 확인/[28:33] OpenGL ES로 스프라이트 표현/[29:40] Types.hpp 열고 구조체 추가/[30:06] 스프라이트 좌표값 변경/[30:26] header file 생성/[31:06] GraphicsSprite/[31:47] 변수 사용/[32:58] class 구현/[33:15] header file 추가/[33:28] 변수 초기화/[33:34] load 메소드 구현/[34:30] setAnimation 메소드 설정/[36:00] animationEnded 메소드/[36:30] draw 메소드/[36:45] 시간 값 입력/[38:19] 현재프레임의 x,y 위치/[38:44] 해당 x,y 인덱스 값 구하기/[39:22] Crop/[40:52] 저장/[41:15] 오류 발생 해결/[41:30] GraphicsService class 추가/[41:44] registerSprite 메소드 추가/[42:07] 스프라이트 관련 변수 추가/[42:14] GraphicsService.cpp 열기/[42:20] 스프라이트 관련 변수 초기화/[42:45] setup 메소드 호출/[43:37] draw 메소드 호출/[44:15] loadResources 수정/[45:00] 여러개의 스프라이트를 하나의 배열로 관리/[45:12] setup 메소드 구현/[45:45] 우주선 만들기/[45:59] 새로운 header file 생성/[46:07] 같은 이름의 source file 생성/[46:37] 변수 사용/[46:57] class 구현/[47:36] spawn 메소드/[48:14] Blaster.cpp 열기/[48:50] onActivate 메소드/[49:12] 오류 해결/[49:30] 저장 후 빌드/[49:38] 에뮬레이터 실행 후 애니메이션 확인

  • 07.46분 OpenGL ES로 그래픽 랜더링 part3

    OpenGL ES 그래픽 라이브러리를 사용해서 타일맵 랜더링 작업 수행하기

    책갈피 : [00:08] 타일맵 랜더링/[00:23] 스크롤 하기 위해 타일맵 사용/[00:39] Tiled Map Editor/[01:19] tilemap 이미지 파일 열기/[01:33] tilemap.tmx 열기/[01:53] rapid xml 다운로드/[03:00] paths and symbols 헤더파일 추가/[03:14] 파일 경로 지정/[03:52] 오류 해결/[04:08] xml 파일 읽는 기능 추가/[04:14] Resource.hpp 열기/[04:25] 메소드 추가/[04:39] Resource.cpp 해당 메소드 구현/[05:00] tilemap 정보 가져오기/[05:15] 새로운 header file 생성/[05:45] 타일맵 class 선언/[06:10] load/unload/draw 메소드 사용/[06:30] 타일맵을 로드할 때 필요한 메소드/[07:15] 변수 사용/[08:20] GraphicsTileMap class 실제 구현/[08:28] header file과 동일한 이름의 source file 생성/[09:07] parse_error_handler 선언/[09:31] loadFile 메소드 구현/[10:30] xmlDocument 인스턴스 사용/[10:46] 태그 값/[11:50] 그림 확인/[12:35] gid/[13:45] 타일맵 정보를 실제 타일맵 class에 사용하는 데이터 변수에 입력/[13:56] 타일 정보를 xml 파일을 통해 저장/[14:46] 정보를 해당하는 변수에 저장/[15:20] TileCount/[15:43] Tiles/[16:18] gid value값 저장/[17:25] 전부 저장 후 사용한 변수 삭제/[17:45] loadVertices/[18:02] VertexCount/[19:03] Texel/[20:37] vertex 정보를 VertexBuffer에 저장/[22:15] buffer에서 offset 정보를 계산/[23:29] 필요한 vertex 좌표값 저장/[25:06] 해당 파일의 정보를 VertexBuffer에 저장/[25:44] 각각의 꼭지점에 해당하는 정보를 저장/[26:22] IndexBuffer를 만드는 메소드 구현/[27:22] loadIndexes 메소드 구현/[27:30] 변수 계산/[28:11] 6개의 index를 buffer에 저장/[29:07] load 메소드 구현/[30:17] Bind/[30:55] load 메소드 완성/[31:40] 그림을 잘라 타일로 붙여넣기/[31:48] 맵을 화면에 위치시키는 코드 작성/[32:22] DrawElements/[32:37] 랜더링하는 메소드까지 구현 완성/[33:04] GraphicsService.hpp 열기/[33:15] registerTileMap 메소드 선언/[33:22] tilemap 추가/[33:52] 추가로 사용했던 데이터를 생성자에서 초기화/[34:28] load/unload/resources 부분에 해당 타일맵 추가/[34:52] update 메소드 수정/[35:30] setup 메소드에 코드를 추가해 카메라 위치와 방향 설정/[35:52] header file 오류 해결/[36:20] header file 추가/[36:37] background-spawn/update 메소드 사용/[37:52] Blaster코드에서 background class 생성/[38:20] update 메소드 추가/[38:49] 저장 후 ndk 빌드 오류 없이 완료/[38:57] 에뮬레이터 확인/[39:22] 음악이나 효과음을 재생하는 어플리케이션 생성/[39:30] OpenSL ES 초기화 방법/[39:52] soundservice class 생성/[40:30] start/stop 메소드/[40:59] 오브젝트와 인터페이스/[41:37] output 인스턴스/[41:49] soundservice class 구현/[42:00] 생성자 초기화 한 후 start 메소드 구현/[42:07] 변수 사용/[42:07] CreateEngine/[43:00] Realize 메소드 호출/[43:37] stop 메소드/[44:00] Context-soundservice 추가/[44:15] Blaster 수정/[44:30] soundservice 추가/[45:07] Main 수정/[45:27] 오류 해결/[45:51] 빌드 에러 해결/[45:59] 라이브러리 사용 기본 작업 완료

  • 08.42분 OpenSL ES로 사운드 재생

    OpenSL ES 사운드 라이브러리를 사용해서 사운드를 재생 및 녹음 작업 수행하기

    책갈피 : [00:18] 음악 재생 실습/[00:28] assets폴더에 mp3파일 붙여넣기/[00:58] 리소스 헤더파일 열기/[01:15] descriptor삽입/[01:44] 메소드 추가/[02:06] 리소스 코드 파일 열기/[02:14] descript메소드 구현/[02:29] aassetmanager_open/[03:00] 사운드서비스 헤더파일 열기/[03:15] 사운드서비스 클래스에 2개의 메소드 추가/[03:38] 배경음악과 관련된 인터페이스 선언/[04:00] 탐색에 관련된 인터페이스/[04:23] 사운드서비스 코드 열고 생성자 추가/[05:00] descript에서 음악파일 확인/[05:14] descript에서 확인된 정보를 재생에 관련된 데이터 변수에 넣기/[05:53] 오디오 설정/[06:00] datasource/datasink/[06:15] output은 스피커 관련 객체 넣어주기/[06:30] 오디오플레이어 생성/[06:57] 관련된 데이터 초기화/[07:46] 객체를 초기화하는 부분과 실체화하는 구현/[08:18] realize메소드/[08:28] 필요한 인터페이스 설정/[09:13] 재생 설정/[09:31] 시작부터 계속 반복하는 것으로 설정/[10:03] 음악을 멈추는 메소드 구현/[10:43] 헤더파일 추가/[10:52] 음악파일 관련 메소드/[11:24] blaster코드 파일/[11:50] 최종 빌드 후 에뮬레이터 동작 확인/[12:31] 짧은 효과음을 재생할 수 있는 실습/[13:16] 짧은 효과음은 사운드버퍼 사용/[13:50] 사운드버퍼는 pcm형식의 사운드 파일 사용/[14:24] 사운드 헤더파일 생성/[14:39] 사운드버퍼관련 클래스 생성/[15:05] load와 unload메소드/[15:26] 메소드 구현/[15:50] 사운드 클래스 생성자를 만들어 관련 변수를 초기화/[16:18] load메소드/[16:48] unload메소드/[17:06] 사운드버퍼 메소드를 사운드서비스 클래스에 추가/[17:15] 사운드서비스 헤더파일 열고 메소드 넣기/[17:52] playsound메소드 추가/[18:07] 사운드큐에 관련된 데이터 선언/[18:26] mplayer/[18:37] 효과음 데이터를 다루기위한 버퍼 선언/[18:52] 사운드서비스 코드 열고 생성자에 추가한 변수 초기화/[19:11] 사운드큐를 모두 제거하기 위한 소멸자 추가/[19:29] 헤더파일에도 소멸자 넣기/[20:00] startsoundplayer메소드 구현/[20:37] sldatalocator를 사용해 관련 정보 설정/[21:00] 사운드버퍼 개수 설정/[21:18] 입력채널과 출력채널 설정/[22:22] 플레어의 상태는 재생/[23:03] 사운드 서비스가 멈췄을 때의 동작 추가/[23:22] unload메소드 실행/[23:37] registersound메소드/[24:03] playsound메소드/[24:22] clear메소드/[24:30] enqueue/[24:55] 효과음 데이터를 로드하기 위한 코드 입력/[25:29] blaster헤더파일/[26:10] registersound를 사용해서 초기화/[26:56] 효과음을 재생하기 위해 playsound호출/[27:18] assets폴더에 효과음 넣기/[27:25] 빌드 후 에뮬레이터 실행/[27:41] 콜백함수를 추가해서 사운드가 종료되었을 때 특정 함수를 호출할 수 있는 실습/[28:06] 사운드서비스 헤더파일을 열고 콜백함수 선언/[29:18] registercallback/[30:00] setcallbackeventsmask/[30:25] 해당 콜백함수 구현/[30:48] 에뮬레이터 실행/[31:18] 사운드 녹음 실습/[31:47] 인증 추가-androidmanifest.xml/[32:15] 사운드서비스 헤더파일 열기/[32:28] recordsound/playrecordedsound메소드 추가/[33:19] 추가메소드와 데이터 초기화/[34:07] 녹음을 초기화 하는 메소드 호출/[34:45] 효과음과 유사하게 초기화/[35:37] 사운드 녹음을 위한 객체 생성 및 인터페이스 설정/[36:50] 사운드 녹음관련 콜백함수 등록/[37:27] 콜백함수를 실제로 구현하도록 소스 추가/[37:52] recordsound메소드 구현/[38:45] playrecordedsound만들기/[39:19] blaster코드 열기/[40:54] 에뮬레이터 로그메시지를 통해 확인

  • 09.38분 입력 기기 처리

    안드로이드 NDK를 사용해서 입력 기기에서 발생하는 이벤트 처리하기

    책갈피 : [00:10] 입력장치 처리 실습/[00:45] 터치스크린을 통해 터치이벤트 처리 구현/[01:11] activityhandler와 유사/[01:56] 헤더파일 생성/[02:14] inputhandler클래스 선언/[02:53] input서비스 헤더파일과 c++파일 추가/[03:23] ontouchevent를 override해서 구현/[03:35] gethorizontal/getvertical메소드/[03:57] setrefpoint메소드/[04:30] eventloop헤더파일 열기/[05:08] processinputevent메소드 추가/[05:46] input핸들러를 사용하기 위해 자료 추가/[05:58] 동작 구현/[06:12] eventloop코드파일에서 생성자 수정/[06:41] 콜백함수 구현/[07:12] processinputevent메소드를 통해 터치 이벤트 처리/[08:13] 터치스크린을 통해 입력을 받았을 경우/[08:37] ontouchevent를 통해 터치이벤트 처리/[08:56] eventloop에서 계속 동작하는 run메소드 수정/[09:16] run메소드에 입력값 추가/[11:09] 이벤트 구현/[11:18] input서비스를 소스파일을 추가해서 터치이벤트 구현/[11:35] inputservice.c++파일 생성/[12:00] gethorizontal/getvertical/setrefpoint메소드 구현/[12:20] ontouchevent메소드 구현/[13:01] amotionevent_getx/amotionevent_gety/[15:31] 터치이벤트 메소드는 콜백함수를 통해 계속 호출/[16:44] 해당 서비스를 context에 등록/[16:56] class선언/[17:18] blaster코드 살펴보기/[18:00] inputservice를 초기화 하기위한 코드 삽입/[18:48] 우주선의 정보를 가지고 있는 헤더파일 열기/[19:07] update메소드 추가/[19:22] mtimeservice/minputservice추가/[20:37] update메소드 추가/[21:07] 메인 소스 수정/[22:15] context-inptservice추가/[22:45] 에뮬레이터 실행/[23:07] 에러 수정/[23:30] blaster소소에 update메소드 호출/[24:03] 에뮬레이터 실행/[24:40] 키보드,디패드,트랙볼 입력처리 실습/[24:52] 키보드/[25:17] 디패드/[25:26] 트랙볼/[25:48] 터치이벤트를 처리하는 메소드 아래 키보드와 트랙볼 메소드 추가/[26:22] processinputevent에 조건 추가/[27:30] 키보드,디패드,트랙볼을 처리하는 실제코드 구현/[27:36] input핸들러에서 상속받은 2개의 메소드 override/[27:56] mMenukey변수/[28:14] update매소드 추가/[28:59] 키보드 이벤트 메소드 구현/[29:52] 좌표 움직임 결정/[30:10] 키가 눌렸다 떼어질 때의 조건/[31:02] 트랙볼 이벤트 메소드 구현/[31:48] 좌표 움직임 결정/[33:37] blaster코드파일 열기/[34:22] 에뮬레이터 실행 확인/[34:45] 에뮬레이터에서 디패드 활성화 방법/[35:43] .android폴더-avd/[36:07] android_4.4.avd-config파일 열기/[36:21] 설정 정보 중 dPad를 yes로 변경/[36:36] 저장후 AVD매니저에 들어와 디테일 확인/[36:53] 에뮬레이터 실행

  • 10.50분 센서 처리

    안드로이드 NDK를 사용해서 센서에서 발생하는 이벤트를 처리하기

    책갈피 : [00:06] 가상키보드 제어 방법 구현/[00:48] c++기반/[01:03] initialize메소드 구현/[01:26] 클래스 캐싱/[02:07] activity살펴보기/[02:36] makeglobalref메소드/[03:00] context/[03:21] view/window/inputmethodmanager/[03:36] 메소드 id에 대한 캐싱작업/[03:53] getsystemservice/[04:24] 실제 자바코드 보기/[04:46] getwindow/[05:00] windowtoken/[05:15] 가상키보드를 감추는 메소드/[05:46] 가상키보드를 보여주는 메소드/[06:15] 필드아이디 캐싱/[06:43] 필드 id값이 메소드getsystemservice에서 입력값으로 사용/[07:00] error처리/[07:46] 가상키보드를 표시하고 감추는 메소드 구현/[07:57] show메소드 구현/[08:24] input_method_service/[09:24] callobjectmethod/[10:03] showsoftinput/[10:48] getdecorview메소드를 실행한 결과 값/[11:15] window수행/[11:52] hide메소드 동일하게 구현/[12:09] lBinder변수/[12:31] 키보드 클래스를 입력서비스를 처리하는 input서비스에서 가져와 사용/[12:48] inputservice생성자에 키보드관련 클래스 추가/[13:03] mEkey/[13:30] 멤버변수 초기화/[14:01] update메소드 수정/[14:58] onkeyboardevent수정/[15:31] 메인코드 열기/[15:52] JNI와 keyboard클래스 생성/[16:07] 에뮬레이터 실행 확인/[16:48] 센서 제어 실습/[17:03] 가속도 센서/[18:11] inputhandler에 메소드 추가/[18:26] onaccelerometerevent추가/[18:45] 센서 처리 메소드 추가/[19:03] 센서관련 변수 추가/[19:22] friend지시자/[20:26] eventloop에서 추가했던 것들을 해당 소스에서 수정/[21:11] sensor queue를 등록하는 코드를 추가/[21:48] ASensorManager_getinstance메소드/[22:22] sensor queue를 제거하는 코드를 추가/[23:03] event type확인/[23:33] callback메소드 구현/[24:40] 센서 클래스 만들기/[25:15] toggle/enable/disable메소드/[26:02] eventloop클래스 선언/[26:30] sensor클래스를 friend지시자를 사용해서 선언/[27:22] 소스파일 구현/[27:33] toggle메소드 구현/[27:52] 활성화 메소드 구현/[29:11] 최소 delay값을 입력값으로 설정/[29:47] log메시지/[30:11] 비활성화 메소드 구현/[30:37] inputservice클래스 수정/[31:00] 가속도 센서 이벤트를 처리하기위한 메소드 추가/[31:26] 멤버변수 수정/[31:47] 소스코드 수정/[32:13] update메소드 수정/[33:15] stop메소드 추가/[33:45] onaccelerometer이벤트 구현/[36:27] blaster에서 사용하도록 수정/[36:49] 메인코드 열기/[37:15] 센서클래스를 사용하기 위한 초기화/[37:45] 에뮬레이터 실행 확인/[38:00] logcat메시지 확인/[38:45] 화면 회전 방향을 탐지할 수 있는 방법 구현/[39:15] 자바코드 확인/[40:05] 헤더파일과 소스파일 생성/[40:30] 클래스 생성/[40:49] 방향을 나타내는 상수를 생성/[41:35] 해당 클래스 실제 구현/[42:13] 로그메시지를 표시하기 위해 코드추가/[43:42] findrotation메소드 실행/[45:19] 가상키보드 처리방식과 동일하게 작업/[46:12] callobjectmethod사용/[47:36] getrotation/[47:51] inputservice에서 활용/[48:20] 화면 회전에 관련된 멤버변수 추가/[49:00] configuration추가/[50:04] 가속도 센서축을 전환

  • 11.47분 기존 라이브러리 포팅 part1

    안드로이드 NDK를 통해 기존의 C++ 관련 범용 라이브러리를 가져와서 적용하기

    책갈피 : [00:07] c++ 라이브러리 포팅/[00:23] STL/[00:46] NDK에서 STL을 사용하는 방법/[01:15] STL포트 사용/[01:33] 새 파일 생성/[02:00] 예제 구현/[02:46] 리소스 헤더파일 열기/[03:06] fstream헤더파일 추가/[03:46] descript관련 코드 제거/[04:15] 리소스 코드 열기/[04:30] 생성자를 수정하고 바뀐 멤버변수 초기화/[04:59] open메소드 코드 수정/[06:12] close메소드 코드 수정/[06:45] read메소드 코드 수정/[07:15] fail메소드 추가적으로 호출/[07:46] getlength메소드/[08:09] stat함수 호출/[08:39] bufferize메소드/[10:33] 사운드서비스 수정/[10:48] playbgm메소드 수정/[11:35] path-문자열 변수/[11:58] uri 데이터 포맷/[12:56] 권한 설정/[13:20] sd카드를 사용할 수 있도록 권한 추가/[13:48] assets폴더에 있는 리소스를 sd카드 데이터영역에 넣기/[14:13] cmd창 띄우기/[14:33] 리소스파일들 에뮬레이터에 넣기/[15:09] 에뮬레이터가 표시되는지 확인/[15:50] adb push/[16:44] adb shell-해당 안드로이드 에뮬레이터로 접속/[17:07] blaster디렉토리 생성/[17:26] 해당 디렉토리에 파일 전송/[18:26] background파일 열기/[18:45] 경로 수정/[19:18] ship파일 열어 경로 수정/[19:32] blaster소스파일을 열어 start.pcm/bgm.mp3 경로 수정/[20:15] 에뮬레이터 실행/[20:44] 랜덤으로 돌진하는 장애물 구현/[21:00] 타입파일 열기/[21:17] 랜덤값에 최대값 넣기/[22:06] 시간서비스 파일 열기/[22:18] 랜덤함수값으로 초기화/[22:52] 2개의 파일 생성/[23:15] 헤더파일에서 클래스 생성/[24:14] 장애물 클래스 구현/[24:40] 이미지파일/[25:47] 2개의 메소드 구현/[25:55] spawn메소드/[26:48] update메소드/[27:45] stl라이브러리에서 제공하는 벡터 사용/[27:52] 블라스터 헤더파일 열기/[28:45] 멤버변수에 백터를 사용/[29:33] 블라스터 소스코드의 생성자 수정/[30:22] 소멸자 생성/[31:33] onactivate가 호출되었을 때 코드 입력/[31:48] iterator사용/[32:22] onstep메소드/[33:00] 에뮬레이터 동작 확인/[35:30] 부스트 라이브러리를 사용해 ndk에 적용/[35:52] 스마트 포인터/[36:30] 스마트 포인터 사용방법/[37:12] 안드로이드ndk 부스트 사용방법/[38:19] mk 빌드 설정 파일/[39:29] 빌드 설정 파일 수정/[40:15] module import/[40:43] 부스트를 사용하기 위한 예외처리 기능/[41:20] 그래픽타일맵 소스코드 수정/[41:49] try/catch문으로 변경/[42:22] 스마트 포인터 추가/[42:45] vector/iterator선언/[43:19] boost를 사용한 스마트 포인터/[44:15] 블라스터 헤더파일을 열어 벡터 헤더 제거/[44:45] iterator부분 수정/[45:58] 소멸자 삭제

  • 12.45분 기존 라이브러리 포팅 part2

    안드로이드 NDK를 통해 기존의 그래픽관련 라이브러리를 가져와서 적용하기

    책갈피 : [00:06] 부스트 라이브러리 오류 수정/[01:22] 설정파일을 열어 헤더파일 경로 등록/[01:30] properties for jni/[01:45] paths and symbols-add/[02:07] 에러 메시지 사라진 것 확인/[02:49] 블라스터 헤더파일에 벡터 헤더파일 삭제/[03:22] iterator부분 변경/[03:35] 부스트 라이브러리를 이용해서 thread사용하는 방법/[04:15] updatethread메소드 추가/[04:30] 소스코드 구현/[05:14] lthread생성/[06:00] join메소드 호출/[06:14] 에러 처리/[07:00] 에뮬레이터 실행/[07:46] 별도의 thread사용 장점/[08:54] 기타 라이브러리를 ndk에서 사용하는 실습/[10:09] box2d 소스파일 다운받기/[10:56] 빌드 설정 파일 추가/[11:20] 파일 열고 빌드 설정 추가/[11:56] 컴파일할 box2d파일 나열/[12:22] ls_cpp변수/[13:24] box2d에 있는 모든 소스파일 선택/[14:31] box2d_cpp변수/[15:41] 빌드작업을 수행하기 위한 동작/[16:06] module이름 지정/[16:22] 컴파일 할 파일/[17:02] local_export_c_includes/[17:52] 정적 라이브러리로 만들어 컴파일 지정/[18:03] 정적 라이브러리와 공유 라이브러리 차이/[18:44] 확장자 유형이 mk파일인지 확인/[18:59] android.mk파일 열기/[19:30] box2d_static추가/[19:55] 저장하면 자동으로 컴파일 진행/[21:03] properties for jni/[21:15] 경로 설정/[21:45] irrlicht라이브러리 ndk로 가져오기/[22:25] android.mk파일 열어 android ndk에 맞게 수정/[23:18] android부분 소스파일 불필요한 부분 제거/[24:00] importgl/[24:52] irrlicht/[25:15] 컴파일 할 때 옵션을 제공하는 플래그 수정/[26:26] 3개의 경로 추가/[27:03] libpng안에 있는 모든 헤더파일 포함/[27:40] 로드라이브러리 변수 수정/[28:21] 정적 이브러리로 빌드되도록 수정/[28:47] 빌드 설정 파일 열기/[29:00] irrlicht추가/[29:18] 저장하면 자동으로 컴파일 진행/[29:33] 에러 출력/[30:03] 수정하기 위해 default-build-commands.mk파일 열기/[30:26] 수정 후 다시 컴파일/[31:07] properties for jni에서 경로 추가/[31:45] 물리 엔진을 사용해서 물리 효과 적용 실습/[32:00] 지금까지 만들었던 어플리케이션 실행/[32:29] 물리적 효과 삽입/[33:22] 기초적인 개념 설명/[34:34] box2d를 사용해 코드 추가/[34:52] physicsobject이름의 헤더파일과 소스파일 생성/[35:21] 필요한 헤더파일 추가/[35:52] physicsobject클래스 선언/[36:50] vector/[37:15] iterator제공/[37:37] 생성자 메소드 선언/[38:19] initialize/update메소드 사용/[38:30] 2개의 멤버변수/[39:30] 각각 메소드 구현/[39:45] 헤더파일 추가 후 생성자 구현/[41:30] body확인/[42:30] shape초기화/[43:21] 물리속성 초기화/[44:05] userdata/[44:28] createbody메소드/[44:45] createfixture메소드

  • 13.41분 물리 시뮬레이션

    안드로이드 NDK를 통해 Box2D 라이브러리를 사용해서 물리 시뮬레이션 수행하기

    책갈피 : [00:08] createtarget메소드/[00:19] physicstarget클래스/[01:00] initialize메소드/[01:34] b2vec2/[02:15] scale_factor라는 상수값/[02:45] 타입 헤더파일 열어서 벡터 상수값 추가/[03:42] update메소드/[04:15] setposition/[05:15] 헤더파일 에러/[05:30] 빌드 환경 설정 파일 열어서 수정/[05:55] 헤더파일과 소스파일 생성/[06:23] physicstarget클래스 생성/[06:42] settarget메소드 사용/[07:00] b2mousejoint객체 선언/[08:39] 생성자와 settarget메소드 구현/[08:50] 생성자를 통해 필요한 정보 초기화/[09:24] joint를 위해 필요한 body선언/[10:09] mousejoint설정/[10:35] joint라는 물리효과를 내기위한 속성값/[11:05] settarget메소드 구현/[11:52] scale_factor를 통해 축소/[13:22] physicsservice헤더파일과 소스파일 생성/[14:18] physicsservice클래스 선언/[15:05] physicsservice에서 필요한 메소드/[15:13] registerentity메소드/[15:28] update메소드/[15:45] begincontact메소드/[16:07] physicsservice가 사용하는 멤버변수/[16:48] 2개의 상수 사용/[17:17] 각종 메소드 구현/[17:33] setcontactlistener/[18:00] registerentity메소드 구현/[18:14] physicsobject클래스 생성/[19:47] update메소드 구현/[20:06] collider/[21:45] simulation/[22:21] 결과 update/[23:45] begincontact메소드 구현/[25:02] context에 등록/[25:29] 장애물 움직이는 것 수정/[26:14] 물리효과 추가/[26:47] physicsobject클래스를 멤버변수로 추가/[27:11] physicsobject생성 후 초기화/[27:25] registerentity메소드 호출/[27:48] 입력받는 값/[28:45] spawn메소드 수정/[29:03] 최소 속도와 속도의 범위 지정/[29:48] initialize통해 장애물 표시/[30:32] update메소드 수정/[32:05] physicsobject에서 생성한 위치정보로 변경/[32:22] 우주선에 물리효과 추가/[32:49] physicstarget멤버변수 추가/[33:15] physicsobject생성 후 초기화/[33:30] registerentity메소드 호출/[34:52] 위치 변수값 수정/[35:22] createtarget메소드 호출/[35:43] joint물리효과 구성/[36:07] spawn메소드 수정/[36:37] update메소드 수정/[36:52] settarget메소드 호출/[37:45] 블라스터 코드 열기/[37:57] physicsservice추가/[38:29] onstep메소드/[39:04] 메인코드 열기/[39:21] physicsservice생성하고 context에 넣어주기/[39:35] 에뮬레이터 실행 동작 확인/[40:22] 우주선의 범주와 마스크값 변경/[40:44] 에뮬레이터 실행 동작 확인

  • 14.41분 3D 그래픽 랜더링

    안드로이드 NDK를 통해 Irrlicht 라이브러리를 사용해서 3D 그래픽 랜더링 수행하기

    책갈피 : [00:09] 3d그래픽 랜더링 실습/[00:20] irrlicht라이브러리/[01:15] 헤더파일과 소스파일 생성/[01:48] class정의/[02:15] 생성자 선언/[02:49] spin메소드 사용/[02:59] initialize/update메소드/[03:15] initialize메소드의 입력값/[04:46] 멤버변수 확인/[05:15] 저장/[05:40] properties for jni-paths and symbols/[05:46] 헤더파일 경로 추가/[07:00] graphicsobject소스파일 생성/[07:28] spin메소드 구현/[08:07] scenenodeanimator객체 생성/[08:39] addanimator메소드로 추가/[09:11] initialize메소드/[09:24] getmesh/gettexture/[10:13] addmeshscenenode메소드 호출/[11:05] update메소드 구현/[12:20] graphicsservice클래스 수정/[13:13] graphicssprite/texture/tilemap 헤더파일 및 소스파일 삭제/[13:33] 헤더파일과 메소드, 멤버변수 삭제/[14:16] graphicsobject를 추가하기 위한 등록 메소드/[15:05] 3개의 멤버변수 추가/[15:13] irrlichtdevice/[15:48] videodriver/[16:00] scenemanager/[16:29] graphicsservice소스파일 열기/[16:41] 추가한 멤버변수 초기화/[17:06] start메소드 수정/[17:52] stop메소드 수정/[18:11] setup메소드 수정/[19:11] 엔진 초기화/[20:29] mdevice변수를 통해 초기화 작업 수행/[20:47] 폴더 경로 지정/[21:32] getvideodriver/getscenemanager메소드/[21:48] 장면에 대한 설정/[22:07] setambientlight메소드/[22:30] addlightscenenode/[23:03] 카메라 정보 설정/[23:30] settarget/setposition메소드/[23:45] 배경 만들기/[24:07] 파티클/[24:48] emitter설정/[26:44] gettexture메소드/[28:33] update메소드 수정/[29:48] drawall메소드 호출/[30:26] registerobject메소드 구현/[31:18] 컴파일 오류가 발생 할 경우/[32:04] 장애물과 우주선 객체에 변경된 사항 적용/[32:45] 장애물 소스파일 열기/[33:04] mesh정보 초기화/[33:52] spin메소드/[34:43] 우주선 동일하게 수정/[35:22] registerobject호출/[36:00] background 헤더파일과 소스파일 제거/[36:37] background부분 모두 삭제/[39:07] cmd화면 출력/[40:15] 에뮬레이터 실행/[41:07] 3d그래픽 표현과 애니메이션 구현 확인

  • 15.45분 디버깅과 문제해결

    안드로이드 NDK를 통해 디버깅 및 성능 분석 작업 수행하기

    책갈피 : [00:07] 어플리케이션 디버깅과 문제해결 방법 실습/[01:00] cygwin설치/[03:36] cygwin terminal실행/[04:15] cygdrive디렉토리/[05:00] 실제 디렉토리의 파일과 하위 디렉토리 알아보기/[05:24] 실제 윈도우에 있는 디렉토리인지 확인/[05:53] 디버깅을 사용하기 위한 설정/[06:11] androidmanifest.xml파일 수정/[06:46] 경고 해결 방법/[07:41] 에뮬레이터 실행/[08:01] 디버깅을 위해 cygwin입력창/[08:43] ndk-gdb입력/[09:18] gdb가 실행되면 3개의 파일 생성/[09:48] gdb.setup파일/[09:56] app_process파일/[10:18] libc.so파일/[11:56] gdb디버깅/[13:13] acroedit 설치/[13:43] acroedit실행/[13:56] 복사한 gdb.setup파일 붙여넣기/[14:22] 개행 문자 형식을 unix형식으로 변경/[14:52] eclipse상단에 run-debug configurations선택/[15:09] 새로운 항목 추가/[16:25] project/[17:00] select other선택/[17:33] debugger의 경로 설정/[18:41] connection탭에서 type을 tcp로 변경/[19:26] ndk-gdb2-acroedit로 편집 선택/[21:03] nativeapp 디버깅 수행/[21:26] cygwin입력창에 ndk-gdb2실행/[22:10] blaster_jni디버깅 설정 선택/[22:37] 디버깅 멈추기/[23:02] 어플리케이션 특정부분에 break삽입/[23:26] toggle breakpoint/[23:48] nativeapp 디버깅 수행/[24:44] 디버깅 메뉴/[25:51] stepinto와 stepover의 차이/[27:00] 어플리케이션의 성능 분석 프로파일/[28:52] 프로파일러 압축파일 풀기/[29:45] prof헤더파일 빌드 설정 변경/[29:56] 빌드설정 acroedit편집기로 열기/[31:00] 프로파일러 모듈의 이름/[31:32] 기존 코드 수정/[31:51] 메인코드 열기/[32:22] 네이티브 라이브러리 설정/[33:19] 모니터링이 끝나는 함수 호출/[33:43] 경로 추가/[34:07] add-프로파일러가 설치된 경로/[34:50] 오류메시지 해결/[35:15] 빌드 설정파일 android로 변경/[35:43] 빌드 설정파일을 열고 프로파일러에 관련된 모듈 추가/[36:22] 프로파일링 결과 저장을 위해 sd카드 사용 변경/[36:35] androidmanifest.xml 열기/[37:07] 에뮬레이터 실행 후 로그메시지 확인/[38:34] 저장된 파일을 에뮬레이터에서 pc로 가져오기/[38:44] cmd창 열고 adb pull명령어 입력/[39:45] copy명령/[40:30] 해당하는 툴의 경로 입력/[40:45] arm-linux-androideabi-4.6선택/[41:22] 분석할 라이브러리 추가/[42:07] 텍스트 파일로 저장/[42:22] 저장된 결과 확인/[43:07] 메소드의 시간 소모 확인/[43:52] gprof는 간단한 결과를 보여주는 프로파일러

  • 16.43분 멀티미디어 재생 part1

    안드로이드 NDK를 통해 멀티미디어 데이터 처리하기

    책갈피 : [00:09] 멀티미디어 재생 실습/[00:37] 오픈맥스/[00:57] 오픈맥스 dl/[01:07] 오픈맥스 al/[01:26] 오픈맥스 il/[02:21] 프로젝트 생성/[02:53] empty activity선택/[03:23] xml파일과 activity클래스 생성/[04:09] main.xml파일 열기/[04:38] graphical laout탭과 main.xml탭을 오가며 설정/[04:55] textview확인/[05:13] values-strings.xml파일 열기/[05:39] value값 변경/[05:46] 저장 후 graphical laout으로 확인/[06:46] spinner삽입/[07:26] id값과 textview1/[08:03] textview삽입/[08:16] strings.xml에서 해당 텍스트 추가/[09:28] main.xml에 문자열 변수 지정/[09:39] spinner추가/[10:09] button추가/[10:28] 버튼 이름 바꾸기/[11:35] 직접 문자열 입력과 문자열 변수를 사용해 입력/[12:50] advanced-surfaceview선택/[13:09] 크기 조정/[14:20] surfaceview추가/[14:46] 자바코드로 연동해서 구현/[15:11] oncreate메소드/[15:22] setcontentview메소드/[16:48] surfaceview1 설정/[17:22] surfaceview/surfaceholder변수 선언/[17:48] 자동으로 import/[18:11] findviewbyId메소드/[19:15] surfaceholer변수/[19:33] callback설정/[19:48] 변경된 사항을 처리할 수 있는 미리 만들어진 메소드 구현/[21:00] log출력/[21:17] tag변수 선언/[22:15] spinner ui객체 구현/[22:56] spinner변수 선언/[23:15] 해당 부분 import/[23:59] arrayadapter/[24:30] createfromresource메소드/[25:21] values-strings.xml파일 열기/[25:33] 문자열 array추가/[26:10] array에 아이템 추가/[26:47] 멀티미디어 데이터 경로 입력/[28:03] adapter와 spinner연동/[28:18] setonitemselectedlistener/[29:03] 2개의 메소드 구현/[29:37] msourcestring문자열 변수 추가/[30:52] 에뮬레이터 확인/[31:29] ui수정중에 ui가 깨지는 경우/[32:15] 두번째 spinner동일한 방식으로 구현/[33:07] string array추가/[33:22] 아이템 추가/[33:49] adapter활성화/[34:43] msurfaceview2추가/[35:45] videosink구현/[36:22] videosink클래스 생성/[36:37] setfixedsize/useassinkfornative메소드/[37:15] 버튼 구현/[37:35] setonclicklistener메소드/[38:07] 눌렀을 때 동작 추가/[38:37] 비디오싱크 설정/[39:22] 재생 할 멀티미디어 파일 경로/[40:37] 정지시키는 버튼/[40:52] finish메소드 호출/[41:13] 처음으로 돌아가는 버튼/[42:22] jni인터페이스를 통해 메소드를 구동할 수 있도록 선언/[42:35] loadlibrary메소드 호출

  • 17.46분 멀티미디어 재생 part2

    안드로이드 NDK를 통해 멀티미디어 데이터 처리하기

    책갈피 : [00:00] 오픈맥스 라이브러리를 이용한 멀티미디어 재생/[00:19] 네이티브로 구현하기 위한 함수 선언/[00:43] 프로젝트에 폴더 생성/[00:58] c파일 생성/[01:27] 헤더파일 추가/[01:43] log메시지/[02:28] 오픈맥스에 관련된 헤더파일 추가/[02:42] 어플리케이션 화면 제어에 필요한 헤더파일 추가/[02:53] 전역변수 선언/[03:49] 멀티미디어 재생을 위한 인터페이스 선언/[04:17] 필요한 상수 정리/[04:47] nativewindow 변수 선언/[05:01] datacache 배열로 저장되도록 선언/[05:27] file포인터 선언/[06:06] reachedeof 변수 사용/[06:31] 매직넘버/[07:04] mutex 선언/[07:44] discontinuity 변수 사용/[08:11] enqueueinitialbuffers 함수/[09:00] callback 함수 구현/[09:36] androidbufferqueuecallback/[09:55] 8개의 입력변수의 입력 값/[10:41] res 변수 선언/[10:52] lock을 거는 변수/[12:23] rewind 함수 호출/[13:39] discontinuity가 거짓일 경우 처리 구현/[14:02] log메시지/[14:37] 버퍼에 있는 정보를 읽고 처리하는 코드 추가/[15:14] fread 호출/[17:03] packetsread 변수/[17:35] enqueue 메소드 호출/[18:20] 예외 상황 처리를 위해 else문 사용/[18:48] bufferitem을 이용해 배열 데이터 선언/[19:53] unlock 함수 호출/[21:00] streamchangecallback 함수/[21:29] eventId 값/[22:05] querystreaminformation메소드 호출/[22:22] log메시지 출력/[23:26] queue를 초기화 하는 함수/[24:05] fread 함수/[25:00] packet의 개수 log메시지로 출력/[25:47] 자바 코드와 연동하기 위한 네이티브 메소드 구현/[27:52] 자바에서 호출하는 네이티브 함수/[28:19] createengine 메소드 구현/[29:10] 반환값의 정보를 담고있는 변수 선언/[30:30] realize 메소드/[30:57] 인터페이스 만들기/[31:21] 출력을 위한 오브젝트와 구체화하는 코드 넣기/[31:55] streamingmediaplayer를 만들 수 있는 메소드 구현/[32:15] utf8변수/[32:59] dataformat/[33:17] audio와 video 데이터 표시를 위한 환경설정/[35:17] createmediaplayer 메소드 호출/[36:35] player에 대한 인터페이스 추가/[37:40] callback을 playerobj에 등록/[37:56] eventsmask 설정/[38:19] 실제로 콜백을 등록하는 코드 추가/[40:09] setplaystate 메소드/[40:40] setplayingstreamingmediaplayer/[41:42] shutdown/[42:39] setsurface/[43:32] rewindstreamingmediaplayer/[44:34] 네이티브 메소드를 라이브러리화/[44:47] 파일 생성/[45:06] 빌드 설정 코드 삽입

  • 18.45분 FFMPEG 활용

    안드로이드 NDK를 통해 FFMPEG 라이브러리를 가져와 비디오, 오디오 데이터 디코딩 작업 수행하기

    책갈피 : [00:10] FFMPEG적용 실습/[00:43] 비디오, 오디오 파일을 디코딩이 가능하게 해주는 라이브러리/[01:10] 플레이어 엔진 만들기/[02:00] 동영상파일 디코딩 구현/[02:23] jni폴더에 c코드 생성 후 디코딩 엔진 구현/[02:42] 헤더파일 추가/[03:46] 디버깅을 위해 다음과 같은 log를 출력할 수 있게 추가/[04:08] pktQueue라는 구조체 만들기/[04:30] 안드로이드 오디오 출력을 위한 핸들러 선언/[05:24] pkt_queue_put함수 구현/[06:12] pkt_queue_get함수 구현/[06:46] decode_audio함수 구현/[08:24] audio_task함수 구현/[09:26] play함수 구현/[09:43] audioflinger_device_start함수 호출/[10:24] audioflinger_device_write함수/[10:56] engine_start함수 구현/[11:26] stream정보를 가져오는 함수 실행/[13:33] audiocodec을 open할 수 있는 부분 구현/[14:20] thread생성/[15:03] video에대한 stream가져오기/[16:33] video함수 설정 함수 호출/[17:18] 실제로 video 디코딩하는 부분 구현/[18:11] 디코딩이 끝난 후 변환작업/[19:00] 변환 함수 sws_getContext/[19:56] hovideo_post함수 호출/[20:29] audio stream경우 처리/[21:56] 안드로이드 비디오와 오디오 서비스 종료/[23:26] audioflinger_wrapper.h파일과 audioflinger_wrapper.cpp파일 만들기/[25:03] audioflinger_device를 세팅하는 래핑함수/[26:03] audioflinger_device_flush함수 호출/[26:26] 엔진과 안드로이드 비디오와 연결하는 부분 추가/[27:48] engine_start함수/[28:33] 랩핑함수의 구현/[28:52] hovideo_prepare함수 구현/[29:22] ecolorformat/[29:52] hovideo_setvideosurface함수/[30:21] hovideo_release함수/[31:30] ffplayjni.c파일 생성 후 헤더파일 추가/[32:07] jni관련 메소드 구현/[32:30] createStreamingMediaPlayer메소드 정의/[33:45] shutdown메소드/[34:06] setSurface메소드/[34:52] 빌드 설정 파일 추가/[35:13] 같이 컴파일 할 소스파일 추가/[35:30] 라이브러리 추가/[35:52] 헤더파일 추가/[36:19] 정적 라이브러리 추가/[36:42] 공유 라이브러리로 빌드하도록 설정/[36:59] java에서 ui구현/[37:15] xml파일 열기/[37:35] button 2개 생성 후 surfaceview추가/[38:34] 생성된 ui개체를 자바코드에 가져다 활용/[39:07] 엔진을 시작하기위한 네이티브 메소드 호출/[39:57] shutdown메소드 호출/[40:22] 버튼 실제 id값으로 변경/[41:00] button과 view에 해당하는 헤더파일 추가/[41:22] 동영상 경로 SourceString변수에 넣기/[42:35] 실제 동영상을 처리하는 부분/[42:57] surfaceView를 ui로 가져오기/[43:27] surfaceholder선언/[43:49] setsurface메소드 호출/[44:07] video를 재생할 경우 surface영역에 표시/[45:04] button까지 import

  • 19.47분 PDK 기반 어플리케이션 개발

    안드로이드 전체 소스를 이용해서 PDK 기반으로 어플리케이션을 개발하는 방법 알아보기

    책갈피 : [00:13] PDK 기반 어플리케이션 개발/[01:23] PDK 설명/[02:12] PDK 사용을 위한 방법/[02:51] vmware player 다운로드/[03:23] 운영체제 설치/[03:49] Ubuntu 12.04.5 LTS버전 다운로드/[04:45] create a new virtual machine/[05:27] 안드로이드 소스 다운로드 후 컴파일 방법 진행/[06:00] java설치/[07:00] 터미널을 연 상태에서 downloads디렉토리로 이동/[08:05] 설치가 끝난 후 java환경변수 등록/[08:22] java_home이라는 환경변수 만들기/[09:15] 안드로이드 소스 빌드를 위한 유틸리티 설치/[09:39] apt-get명령어 사용/[10:20] 디렉토리 생성/[10:48] repo등록 후 권한 설정/[11:28] 전체 소스를 다운로드 받을 폴더 생성/[12:01] 버전 확인 후 다운로드/[13:11] 다운로드 받기위한 명령어 입력/[13:48] 다운로드 받은 소스를 컴파일하고 빌드하는 작업/[14:39] 안드로이드 명령셋 입력/[15:18] 동시 작업개수 선택/[17:44] 에러 해결 방법/[18:30] 에러 해결을 위한 경로 입력/[19:07] 헤더파일 추가/[19:56] 헤더파일에 들어가 변수 수정/[20:26] 해당하는 설정파일을 열고 명령어 입력/[21:41] 컴파일 및 빌드 완료/[22:07] 해당 디렉토리로 이동해서 파일 확인/[23:03] apk와 odex확장자로된 안드로이드 어플리케이션 결과 확인/[24:03] pdk 기반 어플리케이션 생성/[24:30] external폴더/[25:02] ffmpeg 라이브러리 빌드/[25:45] 부분적으로 빌드하기 위한 명령어/[27:07] 저장되는 경로/[28:21] mediaplayer어플리케이션에 불러와 같이 빌드/[29:02] mediaplayer어플리케이션 설정 확인/[29:33] 추가된 라이브러리/[30:30] 추가한 헤더파일의 경로/[31:33] 안드로이드 빌드 설정 파일/[32:12] 공유 라이브러리 추가/[32:49] dex파일을 생성할지 apk파일을 생성할지 결정/[33:30] apk파일이 생성된 부분 확인/[34:36] pdk를 사용해서 어플리케이션을 만드는 순서 정리/[35:13] apk파일을 에뮬레이터에 설치 후 실행/[35:27] sdk다운로드/[36:06] 에뮬레이터를 만들고 실행하기 위해 버전에 맞는 이미지 다운로드/[36:52] ARM EABI v7a system image필요/[37:45] 버전에 따른 이미지 추가 확인/[38:37] 에뮬레이터 이미지 생성 후 만들기/[39:00] 실행 파일을 통해 에뮬레이터 구동/[39:30] avd파일을 만들기 위한 명령어/[40:22] 세부적인 세팅/[40:57] 에뮬레이터 입력 후 실행할 avd파일 입력/[41:35] eclipse실행/[42:45] 안드로이드 시스템 이미지를 에뮬레이터에 불러와 사용하는 방법/[43:30] 안드로이드 전체 소스가 빌드된 결과/[44:30] 옵션 없이 에뮬레이터를 구동시킬 경우/[45:49] mediaplayer어플리케이션 설치/[46:20] 설치된 어플리케이션 실행/[46:45] path지정

  • 20.1시간 4분 SDL 라이브러리 기반 어플리케이션 개발

    안드로이드로 포팅된 SDL 라이브러리를 NDK를 사용해서 JAVA 코드와 연동하는 실습을 수행하기

    책갈피 : [00:47] Android application만들기/[00:49] 프로젝트 생성/[00:59] Empty activity/[01:18] Main activity 생성/[01:39] Public void initSDL() 선언/[01:51] Init SDL(); 생성/[02:03] LoadLibrary class 선언/[02:09] System.loadlibrary로 공유lirary 호출/[02:24] 변수 선언/[02:34] 해당 library객체 생성/[03:14] openGL관련 class 생성/[03:18] GLsurfaceview class 상속/[03:27] 해당 class 생성자 생성/[03:32] DemoRenderer(); 객체 생성/[03:40] Setrenderer로 랜더링작업 수행/[03:46] DemoRenderer class 선언/[04:08] 랜더링이필요한 4개의 메소드 선언/[04:55] Private static native void 지시어사용/[05:19] 헤더파일 추가/[05:30] 변수 선언/[06:16] Ontouchevent 메소드 선언/[06:43] Action값 지정/[07:06] Public static native void 선언(int x, int y, int action)/[07:28] 키보드, 키패드 입력처리/[07:31] Onkeydown, onkeyup함수 override/[07:45] Nativekey 함수 호출/[08:19] 오디오데이터 처리/[08:37] Audiothread class 생성/[08:45] Public AudioTherad(activity parent) 생성/[08:53] 변수 선언/[09:10] run 메소드 override/[09:33] maudio=null 인지 확인/[09:58] 초기화되었는지 확인/[10:11] 오디오정보 셋팅/[10:38] Getminbuffersize(rate, channels, encoding) 선언/[10:52] Maudiobuffer 사이즈 설정/[11:24] Nativeaudioinit2(maudiobuffer);/[11:41] Play 메소드 호출/[12:25] Nativeaudiobufferlock 함수/[12:49] Maudiobuffer 함수/[13:54] 오디오초기화 완료 확인/[14:34] 헤더파일 추가/[15:07] AudioThread 객체 생성/[15:11] DemoGlsurfaceview 객체 생성/[15:21] Setcontentview 함수 생성/[15:31] 변수 선언/[16:11] MGLview.onResume(); 호출/[16:49] Maudio.stop(); maudio.release();/[16:54] MGLview!=null, mGLview.exitapp();/[17:22] Nativekey 메소드 호출/[17:46] Keycode_back/[18:11] NDK 코드 삽입/[18:21] Jni폴더생성/[18:31] SDLlibraries를 삽입/[18:37] SDLlibraries 소스코드 다운/[19:13] SDLlibraries 소스파일 압축풀기/[19:46] Android.mk파일열기/[20:02] SDL관련 디렉토리 컴파일/[20:36] Audio, video 파일 확인/[21:19] SDLlibraries/[21:22] SDLlibraries 소스코드 확인/[21:52] Java_export_name 매크로 사용/[22:35] SDL_java_package_path/[22:59] Java_export_name(demorenderer_nativeinit)/[23:20] Mainthreadwrapper함수 thread 생성/[23:26] Mainthreadwrapper함수 기능/[24:15] Nativeinit함수가 java에서 실행/[24:27] Nativeresize 함수/[25:00] Nativerender 함수/[26:07] 사각형 오브젝트에 좌표값 지정/[26:14] Texture sizes should/[26:58] Viewport 설정/[27:03] glclearcolor 설정/[27:06] glmatrixmode 설정/[27:14] Texture_2D 설정/[27:43] Java에서 Audio 관련 함수/[28:20] SDL_androidaudio 코드/[29:08] Audioformat값들을 jniArray에 삽입/[29:53] Audioformat 생성위치 확인/[30:04] Androidaud_openaudio(_This, SDL_Audiospec *spec)/[30:33] Createdevice/[31:22] Audiothread_nativeaudioinit2/[31:44] NewGlobalRe 함수/[32:01] AudiobufferJNI변수에 할당/[33:06] Maudio.write/[33:25] Nativeaudiobufferlock/[33:31] SDL_mutexP(audiomutex);/[33:52] (*jniEnv)->Releasebytearrayelements/[34:20] Nativeaudiobufferunlock/[34:32] Getbyrearrayelements/[34:42] SDL_mutexV(audiomutex);/[35:28] Nativemouse 함수/[35:36] Nativekey 함수/[35:54] Nativemouse/[36:03] SDL_Privatemousemotion(0,0,x,y);/[37:05] NDK연동을을 위한 ndk-bulid 작업 수행/[37:20] Android.mk 생성/[37:36] Sdl_java_package_path 선언/[37:40] Jaba_export_name 메크로 이름만들기/[38:08] Com_example_sdlport 이름 선언/[38:51] Android.mk 열기/[39:08] cmd 창열기/[39:16] Cmd 창에 ndk-build 작성/[39:27] SDL관련 소스들 컴파일/[39:31] 3개의 정적라이브러리 생성/[39:48] 프로젝트에서 확인하는방법/[40:30] Loadlibrary/[40:52] Blaster 폴더 생성/[41:04] src 폴더 생성/[41:11] src에 main.cc파일 생성/[41:58] 헤더파일 추가/[42:06] SDL.h, SDL_mixer.h 파일 include/[42:18] 메인함수 생성/[42:28] SDL_init 함수 실행/[43:14] SDL_suface *screen; 선언/[43:41] SDL_setvideomode 설정/[44:04] SDL_showcursor(sdl_disable);/[44:29] Loadsurface/[44:54] SDL_loadBMP/[45:05] Newsurface 생성/[45:46] SDL_Setalpha/[45:57] return newsurface;/[46:53] Loadingsprite load/[47:07] bmp파일 실행 함수/[47:35] SDL_setalpha/[48:04] SDL_rect left_btn;/[48:20] SDL_rect_right_btn;/[48:35] sprite기능으로 움직이는 효과/[49:10] SDL_rect walk_rec;/[49:27] SoundInit/[49:48] Mix_openaudio/[50:41] 초기화 된 함수를 메인문에서 호출/[51:08] Loadsample 함수선언/[51:12] Mix_loadwav/[51:26] Mix_volumechunk/[51:41] Mix_chunk*choose=loadsample(sms.wab", 100);/[52:08] SDL_Event event;/[52:30] 무한루프 코드 삽입/[52:43] If(SDL_pollenent(&event))/[53:07] Mousebutton 눌러졌을때 확인/[53:40] SDL_blitsurface/[54:34] Mousebuttondown/[54:42] Mousebuttonup/[55:00] 키패드눌렀을때 반응 설정/[55:34] Mix_playchannel/[55:52] SDL_mousemottion/[56:36] Sprite.x=loop*sprite.w;/[57:04] SDL_flip(screen);/[57:44] Freesample();/[58:04] Using namespace std;/[58:12] 비디오설정/[58:52] Main.cc 파일에 Android.mk 생성/[58:57] 헤더파일 include/[59:24] Application.mk 생성/[59:30] Gnust1_static파일 생성/[59:33] Androidmanifest_xml/[59:50] Virtual Devices manager 실행/[01:00:05] Android4.0.3기반으로 생성/[01:00:20] 설정에 hw.dpad를 yes로 변경/[01:01:22] 실행/[01:01:30] Ndk-build/[01:02:04] Run sdlport 클릭/[01:02:09] 어플리케이션 실행/[01:02:29] 실행결과 확인/[01:03:13] 효과음 확인/[01:03:31] adb push circle.bmp/sdcard 전송/[01:03:51] 기존소스와 비교


'추천강의' 카테고리의 다른 글

Nmap 강의 추천  (0) 2017.11.07
Mybatis 교육 강좌  (0) 2017.11.07
labview 2012 교육 추천  (0) 2017.10.31
웹퍼블리싱 [현장실무] 강좌 추천 리뷰  (0) 2017.10.31
텍스트큐브 강의 리뷰  (0) 2017.10.31