ONLINE CLASS

안드로이드 NDK

COURSE FOCUS

이 강의에서 배우는 핵심 실무

안드로이드 NDK에서 JNI를 이용해 자바와 네이티브 C 코드 사이에 값·객체·배열을 전달하고 오류를 처리합니다. OpenGL ES로 텍스처와 스프라이트를 표현하며 기존 C++ 라이브러리를 가져와 적용하는 방법을 배웁니다. 멀티미디어 데이터 처리와 SDL 라이브러리 연동을 실습하면서 자바 코드와 네이티브 기능이 함께 동작하는 앱 구성을 살펴봅니다.

?

수강 전 꼭 확인하세요

수강 전 자주 묻는 내용을 간단히 안내드립니다.

Q초보자도 교재 없이 수강 가능한가요? 프로그램 정보는?
A

네, 영상과 실습자료로 쉽게 학습할 수 있습니다. 알지오는 원격평생교육원으로 프로그램 관련 정보는 제공하지 않습니다.

◆
기업이 선택한 신뢰 강의

검증된 커리큘럼과 전문 강사진으로 높은 만족도를 제공합니다.

자세히 보기  >
♥
수강료 일부는 사회환원에 사용됩니다.

작은 나눔이 더 나은 내일을 만듭니다.

자세히 보기  >
REAL REVIEW

수강생 리얼후기!

실제 수강생의 학습 경험을 확인해 보세요.

수강후기를 불러오는 중입니다.

RECENT Q&A

최근 수강질문

최근 등록된 수강질문을 작성순서대로 확인해 보세요.

ALZIO DEEP GUIDE

Android NDK을 더 깊게 이해하기

20강에서 JNI와 네이티브 앱을 시작해 OpenGL ES·입력·센서·라이브러리 이식·미디어·SDL 연결로 이어집니다. 기존 코드 이해에 중요한 내용과 현재 빌드·오디오 환경을 구분합니다.

공식 기술정보 확인20강 커리큘럼 연결2026 현재 기술정보

안드로이드 NDK · 20강 · 15시간 34분

01

Android NDK은 무엇인가

NDK는 Android 앱에서 C·C++ 네이티브 코드를 빌드하고 연결할 때 사용하는 도구입니다. 모든 앱이 필요로 하는 기본 언어 환경이 아니라 기존 네이티브 라이브러리·특정 연산·미디어 처리를 활용하는 선택지입니다. 네이티브라는 이유만으로 전체 앱의 성능이 자동으로 좋아지는 것은 아닙니다.

02

관련 플랫폼과 개발도구의 관계

SDK 기반 앱의 Java·Kotlin 코드와 네이티브 라이브러리는 역할이 다릅니다. JNI는 두 영역 사이에서 함수를 호출하고 값을 교환하는 연결 인터페이스입니다. NDK·빌드 도구·기기 ABI·Android 실행환경의 조건을 함께 맞춰야 라이브러리를 실제 앱에 넣을 수 있습니다.

03

Android NDK의 핵심 기능

기술 자체의 기능과 이 강좌의 직접 학습 범위는 다릅니다. 아래 연결 표시는 저장된 공개 커리큘럼에 근거합니다.

JNI

관리 코드와 네이티브 코드 사이에 값·객체·호출을 연결합니다. 배열·문자열·참조를 다룰 때 변환과 수명을 확인해야 합니다. 필요한 호출을 묶고 불필요한 경계 이동을 줄이면 설계를 설명하기 쉽습니다.

강좌에서 직접 학습 · 1~3·20강

ABI와 빌드

기기 아키텍처에 맞는 네이티브 바이너리를 만듭니다. 소스가 같아도 실행 파일 조건은 다를 수 있습니다. 앱에 넣은 라이브러리와 실제 기기의 ABI를 대조해야 로딩 오류의 원인을 찾습니다.

현재 기술 참고 · 세부 ABI 회차 미확인

네이티브 입력과 센서

사용자 입력·기기 이벤트를 네이티브 처리에 연결합니다. 이벤트의 시점과 좌표·센서 자료의 의미를 확인해야 게임이나 그래픽에서 의도한 움직임을 얻을 수 있습니다. 입력 처리와 렌더링을 분리해 점검합니다.

강좌에서 직접 학습 · 9~10강

그래픽과 텍스처

장면·이미지·좌표를 그래픽 API로 그립니다. 렌더링 성공과 자원 로딩 성공은 다른 단계입니다. 텍스처·스프라이트·타일맵을 나누면 화면 전체가 깨질 때 문제 영역을 좁힐 수 있습니다.

강좌에서 직접 학습 · 5~7강

오디오와 미디어

소리 재생·녹음·디코딩에 네이티브 도구를 활용할 수 있습니다. 버퍼와 처리 시간을 확인해야 끊김이나 지연을 설명할 수 있습니다. 강의의 구형 오디오 API와 현재 권장 도구는 별도로 구분합니다.

강좌에서 직접 학습 · 8·16~18강

라이브러리 이식과 디버깅

기존 C/C++ 라이브러리를 Android 빌드·입력·자원 환경에 맞춥니다. 데스크톱에서 빌드됐다고 모바일에서도 그대로 실행되지는 않습니다. 기능 확인 후 측정으로 병목을 찾는 흐름이 필요합니다.

강좌에서 직접 학습 · 11~15강
04

이 과정의 실제 작업 흐름

1~3강은 Java와 C의 자료·객체·호출 연결이고 4강은 네이티브 앱입니다. 5~10강에서 그래픽·텍스처·타일맵·오디오·입력·센서를 연결합니다. 각 단계의 결과를 확인하고 다음 자원을 추가하면 오류가 난 경계를 찾기 쉽습니다.

11~14강은 라이브러리 이식과 Box2D·Irrlicht, 15강은 디버깅·성능입니다. 16~20강의 미디어·FFmpeg·PDK·SDL은 플랫폼과 외부 프로젝트 연결로 보세요. 현재의 모든 라이브러리 버전·빌드 설정을 그대로 제공하는 범위는 아닙니다.

  1. JNI 값·객체 전달
  2. 네이티브 앱 구성
  3. 그래픽·오디오
  4. 입력·센서
  5. 라이브러리 이식
  6. 디버깅·미디어 연결
05

핵심 구조를 이해하는 방법

Java 객체와 C/C++ 메모리는 동일한 관리 규칙을 사용하지 않습니다. JNI 참조의 수명과 네이티브 자원 해제를 구분해야 하며, 경계를 자주 넘는 호출은 비용을 만들 수 있습니다. 오류가 앱 화면·JNI 변환·네이티브 코드 중 어디에서 발생했는지 나눠 추적하세요.

06

실무 적용과 결과 확인

1~3강 복습에서는 작은 기본값 전달부터 시작해 배열·객체·콜백으로 넓혀 보세요. 반환값뿐 아니라 참조의 수명과 오류 발생 위치를 확인하는 것은 추가 점검 제안입니다. Java 쪽 출력만 보고 네이티브 자원이 해제됐다고 판단하지 않습니다.

11~15강의 이식·디버깅에서는 빌드 성공, 라이브러리 로딩, 기능 실행, 성능 측정을 순서대로 구분하세요. 18강의 미디어 디코딩에서는 파일을 읽은 것과 프레임을 정상 해석한 것을 나눠 확인해야 합니다.

네이티브 라이브러리 연계

11~14강의 이식·엔진 활용은 기존 C/C++ 코드를 Android 앱에 연결하는 학습입니다. 현재 라이브러리와 ABI 조건을 새로 맞추는 작업은 별도 확인이 필요합니다.

강좌 연결과 추가 적용의 범위 구분

그래픽·미디어 처리

5~8·16~18강은 그래픽·오디오·미디어 도구와 연결됩니다. 현재 플랫폼 전체 코덱 지원이나 모든 파일의 정상 처리를 강의 범위로 보장하지 않습니다.

강좌 연결과 추가 적용의 범위 구분
07

이 강좌에서 집중할 전문주제

이 과정의 중심은 앱 전체 입문보다 네이티브 경계와 라이브러리 연결입니다. 13강 물리 엔진과 14강 3D 라이브러리를 비교하면 외부 라이브러리의 역할이 서로 다르다는 점을 이해할 수 있습니다.

19강의 PDK·전체 소스 관련 학습은 일반 앱 SDK 프로젝트와 범위가 다릅니다. 20강 SDL·JNI 연결은 여러 도구를 조합하는 흐름이며 현재 플랫폼 전체 빌드를 최신 설정으로 가르친다는 의미가 아닙니다.

08

현재 기술과 강좌 환경의 관계

공개 커리큘럼만으로 NDK·도구체인·외부 라이브러리의 정확한 제작 버전은 특정되지 않습니다. JNI와 ABI의 개념, 강좌에 등장하는 예전 빌드·미디어 환경을 구분합니다.

8강의 OpenSL ES는 현재 Android 공식 안내에서 사용 중단 권고 상태이며 Oboe가 안내됩니다. Oboe·AAudio와 현재 빌드 체계의 전체 사용법은 본 강좌 직접 학습으로 확인되지 않습니다. 구형 프로젝트는 현재 지원 ABI·API 조건에 맞춰 별도 대조해야 합니다.

09

목적에 맞는 기술 선택과 비교

아래 비교는 목적과 작업 구조를 선택하기 위한 안내입니다. 다른 기술 전체를 본 강좌에서 가르친다는 뜻은 아닙니다.

목적에 맞는 기술 선택과 비교
선택지작업 접근이 강좌와의 관계
SDK 기반 앱화면·플랫폼 기능을 관리 코드로 연결일반 앱 기반 학습과 비교
NDK·JNIC/C++ 라이브러리와 앱 연결본 과정 중심
SDL 등 외부 라이브러리다른 계층의 입력·미디어 도구20강 연결 · 전체 현재 버전은 별도 확인
10

기술개념과 알지오 커리큘럼 연결

회차는 공개 커리큘럼의 실제 순서입니다. 실습 후 응용 제안과 현재 기술 참고정보를 강의에서 제공하는 실습으로 해석하지 않습니다.

기술개념과 알지오 커리큘럼 연결
기능·개념무엇인가실무 의미강좌 회차학습 상태
JNI 자료·객체·호출관리 코드와 C 연결경계의 값·오류 확인1·2·3강강좌에서 직접 학습
네이티브 앱·그래픽앱 이벤트와 화면 렌더링그래픽 자원 연결4·5·6·7강강좌에서 직접 학습
오디오·입력·센서기기 자료와 네이티브 처리인터랙션과 미디어 확인8·9·10강강좌에서 직접 학습
라이브러리·엔진 이식기존 C/C++ 도구 연결플랫폼 조건 맞추기11·12·13·14강강좌에서 직접 학습
디버깅·미디어문제 추적과 FFmpeg 활용성능·자료 해석 확인15·16·17·18강강좌에서 직접 학습
PDK·SDL·JNI플랫폼·라이브러리 연계일반 SDK와 다른 범위 이해19·20강강좌에서 직접 학습
11

처음 배울 때 자주 생기는 오해

NDK는 모든 앱에 필요한가?

네이티브 코드가 필요한 경우 선택합니다. 일반 앱 화면 구성은 SDK 영역입니다. 1~4강에서 두 역할을 구분하세요.

C++로 바꾸면 무조건 빨라지나?

경계 호출과 자료 변환에도 비용이 있습니다. 15강 성능 확인과 함께 판단하세요. 측정 없이 전체 성능 향상을 보장하지 않습니다.

JNI 객체는 일반 포인터와 같은가?

관리 객체의 참조와 네이티브 메모리는 규칙이 다릅니다. 2강 객체·배열·오류 학습에서 구분하세요. 참조 수명과 자원 해제를 별개로 확인합니다.

빌드되면 모든 기기에서 실행되나?

바이너리의 ABI와 플랫폼 조건이 맞아야 합니다. 이식 실습은 기기 환경과 함께 확인하세요. 컴파일 성공과 라이브러리 로딩 성공은 다릅니다.

OpenSL ES가 현재 권장 기본인가?

공식 안내는 사용 중단 권고와 Oboe를 설명합니다. 8강은 기존 오디오 처리 이해로 봅니다. 현재 대체 도구 전체는 별도 학습입니다.

외부 엔진을 그대로 복사하면 되나?

빌드·입력·자원 조건을 맞춰야 합니다. 11~14강에서 이식의 역할을 살펴봅니다. 최신 엔진 전체 지원을 강좌 범위로 확대하지 않습니다.

12

다음 학습 방향

C++ (기초+실무)

C++ 객체·예외·템플릿 기반을 보강합니다.

자료 보기 →

모바일앱개발 자바

Android 화면·생명주기 기반을 비교합니다.

자료 보기 →

Android NDK 관련 과정 비교

입문·실무·심화 과정의 실제 커리큘럼을 목적에 맞게 비교합니다.

자료 보기 →

실습과 복습 계획

새 환경에서 예제를 확인하고 학습 계획을 세우는 방법을 살펴봅니다.

자료 보기 →

기술정보는 Google Android NDK 프로젝트의 공식자료를 기준으로 검토했으며, 강좌 범위는 안드로이드 NDK의 공개 커리큘럼과 구분했습니다.

공식 기술정보 확인일: 2026-10-05 · 강좌 업데이트일을 의미하지 않습니다.

안드로이드 NDK 안드로이드 NDK
  • 안드로이드 NDK

  • 강의구성
  • (20강) 전체 : 15시간 34분|평균 : 46분42초
  • 이용기간/강사
  • 1개월2개월
    알지오 R&D [IT]
  • 증빙가능
  • 수료증, 수강증, 학습진도
  • 수강료
  • 330,000원할인165,000원
?

수강 전 꼭 확인하세요

수강 전 자주 묻는 내용을 간단히 안내드립니다.

Q 초보자도 교재 없이 수강 가능한가요? 프로그램 정보는?
A

네, 영상과 실습자료로 쉽게 학습할 수 있습니다. 알지오는 원격평생교육원으로 프로그램 관련 정보는 제공하지 않습니다.

  • 01.50분 JNI를 이용한 자바와 C 인터페이스 part1
    JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 자료를 주고 받기
    빈 프로젝트 생성, MainActivity.java 코드 열기, 해당파일 추가 생성, activity_main.xml 파일 수정, 변수 선언, 안드로이드 파일 생성, GetStringUTFChars 함수, 버튼을 눌렀을 때 동작 코드 추가, 에뮬레이터 확인
  • 02.51분 JNI를 이용한 자바와 C 인터페이스 part2
    JNI 인터페이스를 사용해서 자바 코드와 네이티브 C 코드 사이에 객체 및 배열 형식의 자료를 주고 받으며 오류를 처리
    객체 정보 교환 방법, 4개의 공용 함수-메소드에서 동일한 기능, 에러 메시지 구문 추가, ndk-build, Store.java 파일 열기, Store.c 에서 오류 함수 추가, refresh-라이브러리 자동 생성, 오류 해결 후 ndk-build
  • 03.51분 네이티브 코드에서 자바 콜백 호출
    JNI 인터페이스를 사용해서 네이티브 코드에서 자바 코드의 매소드 호출
    자바와 네이티브 thread 동기화, 3개의 상수 define, MonitorEnter, processEntry 메소드 구현, 헤더 파일 추가, 인터페이스 상속, runWatcher, 콜백하는 메소드 정보 연동, 각각의 자료형에 맞는 대표 심볼, processEntry 수정, 콜백/콜백 중단 확인
  • 04.50분 완전한 네이티브 어플리케이션 작성
    자바 코드 없이 순수 네이티브 C/C++ 코드만을 사용해서 기본적인 이벤트를 처리하는 안드로이드 어플리케이션 제작
    c네이티브 코드만을 사용해 어플리케이션 생성, 새 프로젝트 생성, Apply 현재설정 수정, 두번째 Header File 추가, 동일한 이름의 c++ 파일 추가, module 이름으로 라이브러리 생성, 콜백함수 선언, 추가적으로 코드 삽입, 함수 수정, 메시지 log로 출력, log 메시지 확인
  • 05.42분 OpenGL ES로 그래픽 랜더링 part1
    OpenGL ES 그래픽 라이브러리를 사용해서 안드로이드 어플리케이션을 제작
    타이머를 통해 물체를 이동시키는 어플리케이션, blaster.hpp 파일 열기, TimeService-reset, 오류 처리, GraphicsService class 선언, OpenGL을 사용하기 위해 초기화 하는 start 메소드, paths and symbols, 기존 코드 삭제하고 update 메소드 호출, scripts, obj-libpng.a라이브러리 생성 확인
  • 06.50분 OpenGL ES로 그래픽 랜더링 part2
    OpenGL ES 그래픽 라이브러리를 사용해서 텍스쳐 및 스프라이트를 표현하기
    OpenGS ES로 텍스쳐 로딩 실습, 텍스쳐를 사용하는데 관련된 class 만들기, 콜백함수 등록, png_read_image, 추가로 만든 소멸자 구현, LogCat 확인, header file 추가, 해당 x,y 인덱스 값 구하기, 스프라이트 관련 변수 초기화, class 구현, 에뮬레이터 실행 후 애니메이션 확인
  • 07.46분 OpenGL ES로 그래픽 랜더링 part3
    OpenGL ES 그래픽 라이브러리를 사용해서 타일맵 랜더링 작업 수행하기
    타일맵 랜더링, 타일맵 class 선언, xmlDocument 인스턴스 사용, Tiles, 필요한 vertex 좌표값 저장, 그림을 잘라 타일로 붙여넣기, Blaster코드에서 background class 생성, 변수 사용, 라이브러리 사용 기본 작업 완료
  • 08.42분 OpenSL ES로 사운드 재생
    OpenSL ES 사운드 라이브러리를 사용해서 사운드를 재생 및 녹음 작업 수행하기
    음악 재생 실습, descript에서 음악파일 확인, 음악을 멈추는 메소드 구현, unload메소드, 사운드 서비스가 멈췄을 때의 동작 추가, assets폴더에 효과음 넣기, 녹음을 초기화 하는 메소드 호출, blaster코드 열기
  • 09.38분 입력 기기 처리
    안드로이드 NDK를 사용해서 입력 기기에서 발생하는 이벤트 처리하기
    입력장치 처리 실습, input핸들러를 사용하기 위해 자료 추가, ontouchevent메소드 구현, update메소드 추가, 키보드,디패드,트랙볼 입력처리 실습, 트랙볼 이벤트 메소드 구현, 설정 정보 중 dPad를 yes로 변경
  • 10.50분 센서 처리
    안드로이드 NDK를 사용해서 센서에서 발생하는 이벤트를 처리하기
    가상키보드 제어 방법 구현, 가상키보드를 보여주는 메소드, 키보드 클래스를 입력서비스를 처리하는 input서비스에서 가져와 사용, 멤버변수 수정, findrotation메소드 실행, 화면 회전에 관련된 멤버변수 추가, 가속도 센서축을 전환
  • 11.47분 기존 라이브러리 포팅 part1
    안드로이드 NDK를 통해 기존의 C++ 관련 범용 라이브러리를 가져와서 적용하기
    c++ 라이브러리 포팅, close메소드 코드 수정, sd카드를 사용할 수 있도록 권한 추가, ship파일 열어 경로 수정, 장애물 클래스 구현, onactivate가 호출되었을 때 코드 입력, 빌드 설정 파일 수정, try/catch문으로 변경, 소멸자 삭제
  • 12.45분 기존 라이브러리 포팅 part2
    안드로이드 NDK를 통해 기존의 그래픽관련 라이브러리를 가져와서 적용하기
    부스트 라이브러리 오류 수정, lthread생성, box2d에 있는 모든 소스파일 선택, box2d_static추가, 3개의 경로 추가, properties for jni에서 경로 추가, 헤더파일 추가 후 생성자 구현, createbody메소드
  • 13.41분 물리 시뮬레이션
    안드로이드 NDK를 통해 Box2D 라이브러리를 사용해서 물리 시뮬레이션 수행하기
    createtarget메소드, 헤더파일과 소스파일 생성, joint라는 물리효과를 내기위한 속성값, update메소드, 결과 update, 물리효과 추가, 우주선에 물리효과 추가, 블라스터 코드 열기, 에뮬레이터 실행 동작 확인
  • 14.41분 3D 그래픽 랜더링
    안드로이드 NDK를 통해 Irrlicht 라이브러리를 사용해서 3D 그래픽 랜더링 수행하기
    3d그래픽 랜더링 실습, 헤더파일 경로 추가, graphicsservice클래스 수정, stop메소드 수정, 배경 만들기, 장애물과 우주선 객체에 변경된 사항 적용, background 헤더파일과 소스파일 제거, 3d그래픽 표현과 애니메이션 구현 확인
  • 15.45분 디버깅과 문제해결
    안드로이드 NDK를 통해 디버깅 및 성능 분석 작업 수행하기
    어플리케이션 디버깅과 문제해결 방법 실습, 경고 해결 방법, acroedit실행, cygwin입력창에 ndk-gdb2실행, prof헤더파일 빌드 설정 변경, 빌드 설정파일 android로 변경, cmd창 열고 adb pull명령어 입력, gprof는 간단한 결과를 보여주는 프로파일러
  • 16.43분 멀티미디어 재생 part1
    안드로이드 NDK를 통해 멀티미디어 데이터 처리하기
    멀티미디어 재생 실습, value값 변경, 저장 후 graphical laout으로 확인, 크기 조정, log출력, 2개의 메소드 구현, 버튼 구현, jni인터페이스를 통해 메소드를 구동할 수 있도록 선언
  • 17.46분 멀티미디어 재생 part2
    안드로이드 NDK를 통해 멀티미디어 데이터 처리하기
    오픈맥스 라이브러리를 이용한 멀티미디어 재생, datacache 배열로 저장되도록 선언, rewind 함수 호출, streamchangecallback 함수, 반환값의 정보를 담고있는 변수 선언, player에 대한 인터페이스 추가, shutdown, 빌드 설정 코드 삽입
  • 18.45분 FFMPEG 활용
    안드로이드 NDK를 통해 FFMPEG 라이브러리를 가져와 비디오, 오디오 데이터 디코딩 작업 수행하기
    FFMPEG적용 실습, pkt_queue_get함수 구현, 실제로 video 디코딩하는 부분 구현, audioflinger_device를 세팅하는 래핑함수, jni관련 메소드 구현, 생성된 ui개체를 자바코드에 가져다 활용, surfaceholder선언, button까지 import
  • 19.47분 PDK 기반 어플리케이션 개발
    안드로이드 전체 소스를 이용해서 PDK 기반으로 어플리케이션을 개발하는 방법 알아보기
    PDK 기반 어플리케이션 개발, PDK 설명, 터미널을 연 상태에서 downloads디렉토리로 이동[, 안드로이드 명령셋 입력, pdk 기반 어플리케이션 생성, apk파일이 생성된 부분 확인, 안드로이드 전체 소스가 빌드된 결과, path지정
  • 20.1시간 4분 SDL 라이브러리 기반 어플리케이션 개발
    안드로이드로 포팅된 SDL 라이브러리를 NDK를 사용해서 JAVA 코드와 연동하는 실습을 수행하기
    Android application만들기, Maudiobuffer 함수, SDLlibraries 소스코드 확인, 사각형 오브젝트에 좌표값 지정, SDL_mutexP(audiomutex);, 프로젝트에서 확인하는방법, 비디오설정, 설정에 hw.dpad를 yes로 변경, 기존소스와 비교

강의목록 다운로드                        1:1 강의 질문&답변






도움이 필요하신가요?
💬
알지오 학습·수강 도우미
운영진이 확인한 안내를 자세히 보고, 필요하면 바로 상담하세요.
상담 상태 확인 중