cht電腦資訊LanguageC/C++
adm Find login register

Android NDK 的簡單的使用說明

eliu
1 Android NDK 的簡單的使用說明
Promote 0 Bookmark 02013-09-16quote  

下載 Android NDK

Android NDK 可用來 compile C/C++ 產生 ARM/X86  的 .so or executable,Android java 程式 可用 JNI (java native interface) call .so 裏面的 C function。 JNI 的部分直接在 eclipse create JNI 的 android sample/example project 參考就好了,這邊就不寫了。

為什麼要用 C/C++,原因有

  • java 沒有 unsigned char, structure, conditional compile, macro 等東西, file I/O 用起來很麻煩,想要把現有的 C/C++ source port 到 java 不是那麼容易
  • 用 C/C++ native 原生執行 理論上有可能執行速度比較快,但NDK 的網頁說不見得會比較快。
 
一般是用 eclipse create 一個 android project
 
  • create proj/jni,在此加入 .c .cpp .h
  • create proj/jni/Android.mk

proj/jni/Android.mk
################# build executable ###################
include $(CLEAR_VARS)
LOCAL_MODULE := txt2gtab_phrase
LOCAL_SRC_FILES := txt2gtab-phrase.c util.c locale.c gtab-dbg.c lang.c
LOCAL_CFLAGS += -DUNIX=1
ifeq ($(DEBUG), y)
LOCAL_CFLAGS += -DDEBUG=1
LOCAL_LDFLAGS += -llog
endif
include $(BUILD_EXECUTABLE)

################### build .so ###################################
include $(CLEAR_VARS)
LOCAL_MODULE := libgcinimclient
LOCAL_SRC_FILES := gcin-im-client.c util.c jni-gcin-im-client.c
LOCAL_CFLAGS += -DUNIX=1 -DCLIENT_LIB=1 -DGCIN_BIN_DIR="$(GCIN_BIN_DIR)"
ifeq ($(DEBUG), y)
LOCAL_CFLAGS += -DDEBUG=1
LOCAL_LDLIBS += -llog
endif
include $(BUILD_SHARED_LIBRARY)

 
  • create proj/jni/Application.mk
proj/jni/Application.mk
APP_ABI := armeabi x86
 
如果只需要 arm,則不需要 Application.mk
  • 在 proj/jni 執行 ~/android-ndk-xxx/ndk-build
  • output 在 android-project/libs/XXX/,xxx 可能是 armeabi or x86
edited: 8

cht電腦資訊LanguageC/C++
adm Find login register
views:4760