Home | History | Annotate | Download | only in samplejni
      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