不過為了方便,還是直接與 eclipse 整合比較好。在 jni 文件夾定義一個 swig.mk,將 swig 處理單獨出來,swig.mk 內(nèi)容如下:
# 定義包名,對應(yīng) -package 參數(shù)ifndef MY_SWIG_PACKAGE$(error MY_SWIG_PACKAGE is not defined.)endif# 定義輸出目錄,對應(yīng) -outdir 參數(shù)# subst 表示替換,即用 "/" 替換 包名中的 "."MY_SWIG_OUTDIR :=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))# 定義生成文件類型,這里默認是 cifndef MY_SWIG_TYPEMY_SWIG_TYPE := cendif# 如果目標源文件是 c++,那么在執(zhí)行 swig 命令的時候就需要加上 −c++ 參數(shù)ifeq ($(MY_SWIG_TYPE),cxx)MY_SWIG_MODE := −c++elseMY_SWIG_MODE :=endif# 將生成的 .c 文件加入編譯文件中LOCAL_SRC_FILES += $(foreach MY_SWIG_INTERFACE,$(MY_SWIG_INTERFACES),$(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))# 定義 target,每個待生成的 XXX_wrap.c 源文件都依賴與之對應(yīng)的 XXX.i 接口文件 # 由于 outdir 一定要存在,所以先創(chuàng)建 outdir 目錄結(jié)構(gòu)# $< 表示第一個依賴文件,也就是對應(yīng)的 XXX.i 接口文件 %_wrap.$(MY_SWIG_TYPE) : %.i$(call host-mkdir, $(MY_SWIG_OUTDIR))swig \-java \$(MY_SWIG_MODE) \-package $(MY_SWIG_PACKAGE) \-outdir $(MY_SWIG_OUTDIR) \$<
注意,按照 Makefile 的規(guī)范來寫,特別是空格與 TAB 的區(qū)別。
上面定義的 MY_SWIG_PACKAGE 等變量都定義在 Android.mk 中,將 swig.mk 加入到 Android.mk 即可。Android.mk 內(nèi)容如下;
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) # 清除除了 LOCAL_PATH 之外的 LOCAL_* 變量LOCAL_MODULE := hello-ndk # 設(shè)定一個唯一的名稱