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

使用静态库构建Android NDK应用程序进行分发,android,android-ndk,makefile,arm,static-libraries,Android,Android Ndk,Makefile,Arm,Static Libraries,我有一个Android项目,具有一些本机代码,它使用一个静态库来实现一些Poco库函数。我目前已经在下面的make文件中链接了静态库的arm7构建。现在,如果我想在google play上发布这个应用程序,为了便于移植,我需要在apk中加入其他架构。例如,如何将arm6的静态libPocofoundation.a和arm7的静态libPocofoundation.a包含到apk中的共享库中 include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MOD

我有一个Android项目,具有一些本机代码,它使用一个静态库来实现一些Poco库函数。我目前已经在下面的make文件中链接了静态库的arm7构建。现在,如果我想在google play上发布这个应用程序,为了便于移植,我需要在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)

应用程序.mk
中的
应用程序ABI
修改为

APP_ABI := all

应用程序.mk
中的
应用程序ABI
修改为

APP_ABI := all

如果我理解的很好,您希望包含这个静态库的不同构建,位于不同的路径中

正如Rajitha所说,支持多个平台的第一步是在
应用程序.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

例如,如果您想支持x86,您可以在更多的体系结构上执行if/else条件。

如果我理解得很好,您希望包含此静态库的不同版本,位于不同的路径中

正如Rajitha所说,支持多个平台的第一步是在
应用程序.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

例如,如果您想支持x86,您可以在更多体系结构上执行此if/else条件。

其他体系结构的路径。库是如何添加的?对于这种情况可能过多,如果它们不需要x86或其他未来支持的架构来支持其他体系结构。库是如何添加的?对于这种情况可能过多,如果他们不需要x86或其他未来支持的arch,那么eclipse似乎会将我的所有导入都标记为armeabi:(这是问题吗?)Clean:PocoFoundationArm[armeabi]Clean:PocoFoundationArm7[armeabi]Clean:PocoJoJSonarm[armeabi]Clean:PocoJoJSonarm7[armeabi]我想确实有问题:我检查了自己的
ndk build clean
的输出,每个库只在自己的架构下被清理。也许这是Eclipse中的一个已知问题?(我个人直接使用
ndk build
命令行工具,而不是Eclipse)。eclipse似乎忽略了我的armeabi库,但只使用了arm7:/Applications/adt-bundle-mac-x86_64/android-ndk-r8d/build/core/build binary.mk:419:警告:重写目标`obj/local/armeabi/libPocoFoundation.a'的命令预构建:libPocoFoundation.a eclipse似乎将我的所有导入都标记为armeabi:(这是问题吗?)Clean:PocoFoundationArm[armeabi]Clean:PocoFoundationArm7[armeabi]Clean:PocoJSONArm[armeabi]Clean:PocoJSONArm7[armeabi]我想确实有问题:我检查了自己的
ndk build Clean
的输出,每个库都只在自己的体系结构下被清理。也许这是Eclipse中的一个已知问题?(我个人直接使用
ndk build
命令行工具,而不是Eclipse)。eclipse似乎忽略了我的armeabi库,但只使用arm7:/Applications/adt-bundle-mac-x86_64/android-ndk-r8d/build/core/build binary.mk:419:警告:覆盖目标'obj/local/armeabi/libPocoFoundation.a'的命令