Android NDK 설치
설치환경
- os : ubuntu 64bit
ndk package
에서 download 하자.android-ndk-r10d-linux-x86_64.bin 를 다운로드하고 설치하자. 대략 3.6GB 가 필요하다. 파일에 실행권한을 주고, 실행하면, 그 폴더 안에서 압축이 풀린다.
여기서는
- /home/namh/android/ndk/android-ndk-r10d
참고로, 현재(2015년 1월) 는 아래버전이 ndk 의 최신버전이다.
- Android NDK, Revision 10d (December 2014)
ffmpeg 설치 및 빌드
FFmpeg
여기에 가서 FFmpeg 의 소스를 다운로드 하자. 그리고 ndk folder 안에 sources 에 소스를 풀어놓자.- /home/namh/android/ndk/android-ndk-r10d/sources/ffmpeg-2.5.3
configure file
ffmpeg 의 configure file 을 열자. 경로는 아래와 같다.- d:\Program Files\Android\ndk\android-ndk-r10d\sources\ffmpeg-2.5.3\configure
# SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' # LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' # SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' # SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
Build ffmpeg
ref. 1 에서 build_android.sh 를 가져오자.그리고 거기서 아래처럼 NDK path 만 다시 설정해 주자.
NDK=$HOME/android/ndk/android-ndk-r10d SYSROOT=$NDK/platforms/android-9/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64그리고 configure file 이 있는 곳으로 가서 실행하자. 20분은 안걸린다.(vm 에서 cpu core 2 개, i3 2100 인 경우)
그러면 아래 경로에서 결과 file 을 찾을 수 있다.
- $NDK/sources/ffmpeg-2.0.1/android
jni 빌드
ndk-build 를 위해 필요한 파일
- Android.mk / Application.mk / jnitest.c
- $NDK/sources/ffmpeg-2.5.3/android/arm/Android.mk
예제 소스는 아래 Example Source 를 참고하자.
$NDK/sources/ffmpeg-2.5.3/android/arm/Android.mk
- $NDK/sources/ffmpeg-2.5.3/android/arm/Android.mk
를 추가한다. 참고로 LOCAL_SRC_FILES 의 이름은
- $NDK/sources/ffmpeg-2.5.3/android/arm/lib
에 있는 .so 파일의 이름과 같아야 한다.
Android.mk
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-56.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-56.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-3.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-54.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-5.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libwsresample LOCAL_SRC_FILES:= lib/libswresample-1.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)
이렇게 하고, jni 라는 이름의 folder 를 하나 만들고,
.c file + Android.mk + Applicaiton.mk 파일들을 만들어 그 안에 놓자.
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := tutorial01 LOCAL_SRC_FILES := tutorial01.c LOCAL_LDLIBS := -llog -ljnigraphics -lz LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil include $(BUILD_SHARED_LIBRARY) $(call import-module,ffmpeg-2.5.3/android/arm)
Application.mk
APP_ABI := armeabi #APP_ABI := armeabi-v7a APP_PLATFORM := android-10
이제 ndk-build 를 실행하면, .c file 이 compile 된다. 그리고 필요한 lib 들이 copy 된다.
여기서 ./libs 와 ./jni 부분을 android project 로 가져오면 된다.
Example source
windows + cygwin
아래 page 에서 windows 에서 cygwin 을 사용해서 compile 하는 방법이 나와있다.- Android NDK FFmpeg 컴파일 강좌 (1/4) 남은그루터기, 2011.07.10 08:12:05
- Android NDK FFmpeg 컴파일 강좌 (2/4) 남은그루터기, 2011.07.10 18:51:03
- Android NDK FFmpeg 컴파일 강좌 (3/4) 남은그루터기, 2011.07.11 05:02:12
- Android NDK FFmpeg 컴파일 강좌 (4/4) 남은그루터기, 2011.07.11 05:20:38
댓글 없음:
댓글 쓰기