2014年4月12日 星期六

[NDK] OpenCV for Android 在Android Native Code上使用OpenCV library

首先需至 http://opencv.org/platforms/android.html 下載 OpenCV for android sdk
如:OpenCV-2.4.7.1-android-sdk

接著僅需在 Android.mk prebuild and include OpenCV shared library

以下為Android.mk sample,以"OpenCV-2.4.7.1-android-sdk"為例

# OpenCV path setting
LOCAL_PATH := $(call my-dir)
OPENCV_SDK_PATH := D:/OpenCV-2.4.7.1-android-sdk
OPENCV_INC_PATH := $(OPENCV_SDK_PATH)/sdk/native/jni/include
OPENCV_SO_PATH := $(OPENCV_SDK_PATH)/sdk/native/libs/armeabi-v7a

# Specify OpenCV.so location
include $(CLEAR_VARS)
LOCAL_MODULE := libopencv_java
LOCAL_SRC_FILES := $(OPENCV_SO_PATH)/libopencv_java.so
LOCAL_LDLIBS += -L d:\OpenCV-2.4.7.1-android-sdk\sdk\native\libs\armeabi-v7a\libandroid -lopencv_java
include $(PSHARED_LIBRARY)

# Build our library
include $(CLEAR_VARS)
OPENCV_LIB_TYPE := STATIC
include $(OPENCV_SDK_PATH)/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := testlib

LOCAL_C_INCLUDES += $(OPENCV_INC_PATH) \
                    $(OPENCV_INC_PATH)/opencv \
                    $(OPENCV_INC_PATH)/opencv2

LOCAL_SRC_FILES := test.cpp
    
LOCAL_SHARED_LIBRARIES := libopencv_java

LOCAL_ARM_MODE := arm
LOCAL_ARM_NEON := true
LOCAL_CPPFLAGS += -std=c++11
LOCAL_CFLAGS   += -fvisibility=hidden \
    -fdiagnostics-color=auto -Ofast -mfloat-abi=softfp -mfpu=neon -fomit-frame-pointer -pthread    
LOCAL_CPPFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden \
    -fdiagnostics-color=auto -Ofast -mfloat-abi=softfp -mfpu=neon -fomit-frame-pointer -pthread
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)

2014年2月8日 星期六

[NDK] Dynamic loading share library .so 動態連接.so檔

假設libndk.so要動態連接(dynamic loading) libandroid.so

 1/ manually place libandroid.so into $PROJECT_PATH/libs/armeabi
 2/ create a new NDK shared library which source code uses "dlopen()" to load libandroid.so at runtime
 3/ create an Android.mk that uses LOCAL_LDLIBS += -ldl (ensures you can use dlopen)
 4/ build your libndk.so with the NDK build script
 5/ rebuild your apk from Eclipse or Ant, the resulting .apk should have both libraries under lib/armeabi/

2014年2月7日 星期五

[NDK] JNI log in android NDK

add in android.mk file
LOCAL_LDLIBS += -llog

add in your .c file
#include <android/log.h>
#define LOG_TAG "System.out"

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)



Now you can show your log info in this .c file
LOGD("%s","hahahaha1");