使用静态库构建Android NDK应用程序以进行分发

时间:2013-03-27 08:39:22

标签: android android-ndk makefile arm static-libraries

我有一个Android项目,其中包含一些本机代码,它们为一些Poco库函数使用静态库。我目前在下面的make文件中链接了静态库的arm7构建。现在,如果我想在谷歌播放上分发这个应用程序,为了移植性,我需要在apk中包含其他架构。我如何包含例如arm6的静态libPocofoundation.a和arm7的静态libPocoFoundation.a到apk中的共享库?

include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := PocoFoundation
LOCAL_SRC_FILES := Poco/libPocoFoundation.a   #<- How do i set this conditional-
#                                                 or add multiple architectures?
LOCAL_EXPORT_C_INCLUDES := /Users/poco-1.5.1-all/Foundation/include
LOCAL_EXPORT_CFLAGS := -DFOO=1 -fpermissive
LOCAL_EXPORT_LDLIBS := -llog
include $(PREBUILT_STATIC_LIBRARY)

Android.mk

LOCAL_PATH := $(call my-dir)
ROOT_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_PATH = $(ROOT_PATH)

include $(CLEAR_VARS)
#LOCAL_MODULE_TAGS    := eng
LOCAL_ARM_MODE       := arm
LOCAL_MODULE    := JsonPoco # Your own library.
LOCAL_SRC_FILES := JsonPoco.cpp \


 # Your own library source.
LOCAL_WHOLE_STATIC_LIBRARIES := PocoFoundation \
PocoJSON
LOCAL_LDLIBS     := -llog
LOCAL_CFLAGS     := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY
LOCAL_CPPFLAGS   := -frtti -fexceptions 
include $(BUILD_SHARED_LIBRARY)

2 个答案:

答案 0 :(得分:4)

如果我理解得很好,你想要包含这个静态库的不同版本,它们位于不同的路径中。

正如Rajitha所说,支持多平台的第一步是在Application.mk中提及它们。例如,要支持ARMv5 / 6和ARMv7:

APP_ABI := armeabi armeabi-v7a

然后在Android.mk中,您需要根据当前构建的平台更改用于静态库的路径:

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
    LOCAL_SRC_FILES := /path/to/armv-7/libPocofoundation.a
else
    LOCAL_SRC_FILES := /path/to/armv-6/libPocofoundation.a
endif

如果你想支持更多的体系结构上的/ else条件,你可以这样做。

答案 1 :(得分:0)

APP_ABI中的Application.mk修改为

APP_ABI := all