1# Package a shared library into an APK 2 3NDK_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 8include $(NDK_BASE)/config/config.mk 9 10SOURCES := native.cpp 11OBJECTS := $(SOURCES:.cpp=.o) 12LIBS := -lc -lm 13ALIB := $(PREBUILT)/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a 14 15APKBUILDER := $(ANDROID_SDK_BASE)/tools/apkbuilder 16 17APK_INPUT_DIR := bin 18APK_OUTPUT_DIR := bin/full 19 20APK_NAME := JNIExample.apk 21INPUT_APK := $(APK_INPUT_DIR)/$(APK_NAME) 22OUTPUT_APK := $(APK_OUTPUT_DIR)/$(APK_NAME) 23APK_STAGE := $(APK_OUTPUT_DIR)/temp 24 25JNI_LIBS := libnative.so 26 27all: $(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 38libnative.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 41native.o: native.cpp 42 $(CC) -c -fpic $(INC) -I$(NDK_BASE)/include/nativehelper -o $@ $^ 43 44clean: 45 rm -rf *.o libnative.so $(APK_OUTPUT_DIR) 46