下載 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