• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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