下面是周圍做的事情的其他方式的解決方案:建立 兩個外部庫,並從標準的Makefile Android包。
作爲先決條件,您需要安裝做的命令行 Android開發所需要的一切:
- 一個獨立的工具鏈,包括看到在Android NDK的文件;
- 螞蟻。
的例子的結構是:
:爲外部庫 和用於在與一個Makefile 在每個目錄和頂層相同的水平在Android源的目錄,遞歸生成文件的目錄
Makefile
mylib/
Makefile
android/
Makefile
的mylib/Makefile
建立一個靜態庫:
AR=/path/to/standalone/bin/arm-linux-androideabi-ar
CC=/path/to/standalone/bin/arm-linux-androideabi-gcc
libmylib.a: mylib.o
$(AR) rcs libmylib.a mylib.o
mylib.o: mylib.c
$(CC) -c mylib.c -o mylib.o
的android/Makefile
是提供規則建立Android包:
- 我們需要依賴項來複制
mylib
;
- 我們使用一個
jni/ndkmake.c
文件來調用換到mylib
並提供Android的具體的東西;
- Android包依賴於Java源代碼和對共享庫。
的生成文件提供了兩個目標:release
(默認值)和debug
建立或者釋放包或調試一個。
NDK_BUILD=/path/to/ndk-build
JAVASRC=src/com/example/ndkmake/NdkMake.java
release: bin/NdkMake-release-unsigned.apk
debug: bin/NdkMake-debug.apk
bin/NdkMake-release-unsigned.apk: libs/armeabi/libndkmake.so $(JAVASRC)
ant release
bin/NdkMake-debug.apk: libs/armeabi/libndkmake.so $(JAVASRC)
ant debug
libs/armeabi/libndkmake.so: jni/ndkmake.c jni/libmylib.a
$(NDK_BUILD)
jni/libmylib.a: ../mylib/libmylib.a
cp ../mylib/libmylib.a jni/libmylib.a
的Android.mk
文件提供了規則,包括在生成靜態庫,作爲預建。 我們使用LOCAL_EXPORT_C_INCLUDES
包含來自mylib
庫的標題。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkmake
LOCAL_SRC_FILES := ndkmake.c
LOCAL_STATIC_LIBRARIES := mylib-prebuilt
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib-prebuilt
LOCAL_SRC_FILES := libmylib.a
LOCAL_EXPORT_C_INCLUDES := ../mylib/
include $(PREBUILT_STATIC_LIBRARY)
現在,我們只需要一個頂層Makefile構建兩個子目錄:
all: libmylib package
libmylib:
cd mylib && $(MAKE)
package:
cd android && $(MAKE)
任何改變圖書館,到JNI來源或Java源代碼將觸發重建的 包裹。
我完全同意你的觀察。在交叉編譯環境中,從config.h.in生成'config.h'是不可能的。然而,運行配置本身'可能'工作,但這是一個完整的其他野獸:)。 – Samveen