1 # Package a shared library into an APK 2 3 NDK_BASE := ../.. 4 5 # Assume ANDROID_SDK_BASE is defined to point to the base of the Android SDK 6 # Assumes PREBUILT is defined to point to the prebuilt directory of the Android source 7 8 include $(NDK_BASE)/config/config.mk 9 10 SOURCES := native.cpp 11 OBJECTS := $(SOURCES:.cpp=.o) 12 LIBS := -lc -lm 13 ALIB := $(PREBUILT)/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a 14 15 APKBUILDER := $(ANDROID_SDK_BASE)/tools/apkbuilder 16 17 APK_INPUT_DIR := bin 18 APK_OUTPUT_DIR := bin/full 19 20 APK_NAME := JNIExample.apk 21 INPUT_APK := $(APK_INPUT_DIR)/$(APK_NAME) 22 OUTPUT_APK := $(APK_OUTPUT_DIR)/$(APK_NAME) 23 APK_STAGE := $(APK_OUTPUT_DIR)/temp 24 25 JNI_LIBS := libnative.so 26 27 all: $(OUTPUT_APK) 28 29 $(OUTPUT_APK) : $(INPUT_APK) $(JNI_LIBS) 30 rm -rf $(APK_STAGE) 31 mkdir -p $(APK_STAGE) 32 unzip $(INPUT_APK) -d $(APK_STAGE) 33 mkdir -p $(APK_STAGE)/lib/armeabi 34 cp $(JNI_LIBS) $(APK_STAGE)/lib/armeabi 35 $(APKBUILDER) $(OUTPUT_APK) -v -rf $(APK_STAGE) 36 rm -rf $(APK_STAGE) 37 38 libnative.so: native.o 39 $(CC) -nostdlib -Wl,-soname,libhello-shared.so -Wl,-shared,-Bsymbolic -L$(NDK_BASE)/lib $^ $(LIBS) -o $@ -Wl,--no-undefined $(ALIB) 40 41 native.o: native.cpp 42 $(CC) -c -fpic $(INC) -I$(NDK_BASE)/include/nativehelper -o $@ $^ 43 44 clean: 45 rm -rf *.o libnative.so $(APK_OUTPUT_DIR) 46