학과 샘플강의

안드로이드 NDK 전체 : 16시간 23분 / 강의당평균 : 49분8초

알지오 2016. 10. 21. 10:01



안드로이드 NDK
전체 : 16시간 23분 / 강의당평균 : 49분8초

01 안드로이드 NDK 개발 환경 구축
안드로이드 NDK 개발을 위한 기본 환경을 구축하고 어플리케이션 프로젝트 생성 및 배포
49분
책갈피 : [00:07] 환경설정 설치 / [00:16] Java JDK 프로그램 설치 / [00:23] oracle 홈페이지 접속 / [01:07] 운영체제에 맞게 다운로드 / [01:30] 설치 경로 / [01:40] JDK 설치 완료 후 Java 설치 / [01:59] Java JDK에 대한 환경변수 등록 / [02:07] 컴퓨터-속성 / [02:29] 새 시스템 변수 / [02:38] 변수 값 / [03:15] Path 변수 값 수정 / [03:53] ant 프로그램 설치 / [04:00] Binary Distributions 선택 / [04:23] 다운로드 완료 후 압축 풀기 / [04:46] 환경변수 등록 / [05:00] Path 변수 값 수정 / [05:44] SDK 홈페이지 / [05:46] view all downloads and sizes 선택 / [06:13] SDK 설치 프로그램 실행 / [06:25] 설치 경로 / [06:46] 설치 완료 후 start SDK manager실행 / [07:09] Android L/4.4W 항목 체크 해제 / [07:15] Android 4.4.2 항목 체크 / [07:30] 설치 완료 후 환경변수 등록 / [08:09] Path 변수 값 수정 / [09:11] NDK 다운로드 / [09:18] 운영체제에 맞는 파일 다운 / [09:43] 다운로드 완료 후 압축 풀기 / [10:18] 환경변수 등록 / [10:37] Path 변수 값 수정 / [11:00] 기본 프로그램 설치 완료 / [11:18] 실행창 / [11:35] java 설치 확인 / [11:50] ant 설치 확인 / [12:07] sdk 설치 확인 / [12:24] ndk 설치 확인 / [12:43] eclipse 설치 / [13:07] eclipse ide for java developers 다운 / [13:31] 다운로드 완료 후 압축 풀기 / [13:43] eclipse 프로그램 실행 / [14:26] eclipse 프로그램 초기화 / [14:50] install new software / [15:01] developer tools / [15:33] 설치 완료 / [15:58] eclipse 재 실행 / [16:07] 어플리케이션 개발을 위한 메뉴 / [16:22] android sdk 설치 창 / [16:44] preferences / [17:37] android virtual device manager 선택 / [17:52] create / [18:07] AVD / [18:22] 이름 설정 / [18:33] device 항목 선택 / [19:00] target 항목 선택 / [19:37] cpu 항목 선택 / [19:45] skin 항목 선택 / [20:11] sd card 설정 / [20:52] snapshot 기능 / [21:47] AVD 생성 완료 / [22:03] 실행 / [22:37] 오른쪽 하드웨어 버튼 / [23:33] 종료 / [24:17] 실습 / [24:32] 디렉토리 변경 / [25:22] 옵션 추가 / [25:51] 프로젝트 생성 / [26:22] 설치된 타겟 확인 명령 / [27:26] sdk manager를 통해 다른 안드로이드 버전 추가 / [28:00] 프로젝트 생성 완료 / [29:17] ndk-build / [29:45] ant debug / [30:22] 파일 생성 확인 / [31:15] 에뮬레이터 실행 / [31:30] adb / [32:15] 에뮬레이터 프로그램 설치 명령어 / [32:52] 설치 확인 / [33:52] 연결을 하기위한 명령어 / [34:58] import / [36:07] 파일 위치 설정 / [36:30] 복사 완료 / [37:00] 작업 공간에 생성 / [37:22] 타겟 설정 / [37:37] properties / [37:45] android / [38:15] 타겟 설정 후 빌드 작업 수행 / [38:50] 자동 실행 / [39:06] 설치된 프로그램 에뮬레이터 안에서 삭제 / [40:22] 새로운 프로그램 생성 / [40:37] file-new project / [40:59] android 선택 / [41:07] android application project / [41:42] 이름 설정 / [42:37] 에뮬레이터 확인 / [43:07] package name 확인 / [44:07] 안드로이드에 설치되어있는 프로그램 리스트 / [45:20] 프로젝트의 SDK 설정 / [46:51] 어플리케이션 아이콘 설정 / [47:00] 프로젝트 생성 완료 / [47:37] 타겟 설정 후 빌드 / [47:45] android application 선택 / [48:08] 결과 확인

02 JNI를 이용한 자바와 C 인터페이스 part1
JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 자료를 주고 받기
50분
책갈피 : [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] 실제 동작

03 JNI를 이용한 자바와 C 인터페이스 part2
JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 객체 및 배열 형식의 자료를 주고 받으며 오류를 처리
51분
책갈피 : [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] 에뮬레이터 실행 확인

04 네이티브 코드에서 자바 콜백 호출
JNI 인터페이스를 사용해서 네이티브 코드에서 자바 코드의 매소드 호출
51분
책갈피 : [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] 콜백/콜백 중단 확인

05 완전한 네이티브 어플리케이션 작성
자바 코드 없이 순수 네이티브 C/C++ 코드만을 사용해서 기본적인 이벤트를 처리하는 안드로이드 어플리케이션 제작
50분
책갈피 : [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 메시지 확인

06 OpenGL ES로 그래픽 랜더링 part1
OpenGL ES 그래픽 라이브러리를 사용해서 안드로이드 어플리케이션을 제작
42분
책갈피 : [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라이브러리 생성 확인

07 OpenGL ES로 그래픽 랜더링 part2
OpenGL ES 그래픽 라이브러리를 사용해서 텍스쳐 및 스프라이트를 표현하기
50분
책갈피 : [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] 에뮬레이터 실행 후 애니메이션 확인

08 OpenGL ES로 그래픽 랜더링 part3
OpenGL ES 그래픽 라이브러리를 사용해서 타일맵 랜더링 작업 수행하기
46분
책갈피 : [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] 라이브러리 사용 기본 작업 완료

09 OpenSL ES로 사운드 재생
OpenSL ES 사운드 라이브러리를 사용해서 사운드를 재생 및 녹음 작업 수행하기
42분
책갈피 : [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] 에뮬레이터 로그메시지를 통해 확인

10 입력 기기 처리
안드로이드 NDK를 사용해서 입력 기기에서 발생하는 이벤트 처리하기
38분
책갈피 : [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] 에뮬레이터 실행

11 센서 처리
안드로이드 NDK를 사용해서 센서에서 발생하는 이벤트를 처리하기
50분
책갈피 : [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] 가속도 센서축을 전환

12 기존 라이브러리 포팅 part1
안드로이드 NDK를 통해 기존의 C++ 관련 범용 라이브러리를 가져와서 적용하기
47분
책갈피 : [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] 소멸자 삭제

13 기존 라이브러리 포팅 part2
안드로이드 NDK를 통해 기존의 그래픽관련 라이브러리를 가져와서 적용하기
45분
책갈피 : [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메소드

14 물리 시뮬레이션
안드로이드 NDK를 통해 Box2D 라이브러리를 사용해서 물리 시뮬레이션 수행하기
41분
책갈피 : [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] 에뮬레이터 실행 동작 확인

15 3D 그래픽 랜더링
안드로이드 NDK를 통해 Irrlicht 라이브러리를 사용해서 3D 그래픽 랜더링 수행하기
41분
책갈피 : [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그래픽 표현과 애니메이션 구현 확인

16 디버깅과 문제해결
안드로이드 NDK를 통해 디버깅 및 성능 분석 작업 수행하기
45분
책갈피 : [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는 간단한 결과를 보여주는 프로파일러

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

18 FFMPEG 활용
안드로이드 NDK를 통해 FFMPEG 라이브러리를 가져와 비디오, 오디오 데이터 디코딩 작업 수행하기
45분
책갈피 : [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 PDK 기반 어플리케이션 개발
안드로이드 전체 소스를 이용해서 PDK 기반으로 어플리케이션을 개발하는 방법 알아보기
47분
책갈피 : [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 SDL 라이브러리 기반 어플리케이션 개발
안드로이드로 포팅된 SDL 라이브러리를 NDK를 사용해서 JAVA 코드와 연동하는 실습을 수행하기
1시간 4분
책갈피 : [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] 기존소스와 비교


샘플확인 : 알지오 검색후 -> 강의검색란 -> 안드로이드 NDK