在APK中使用本机代码包库两次的Android库项目

时间:2013-10-03 07:14:48

标签: android eclipse android-ndk

我有两个Android项目,一个是共享库,一个是我的应用程序项目。这两个项目都包含一些Java和一些本机代码。当我尝试运行我的APK时,我收到以下错误:

生成最终存档时出错:找到APK的重复文件:lib / armeabi / libOEShared.so

我的共享库被标记为库项目(Properties-> Android->'Is Library'),以便我能够使用它的Java代码。这可能是我一次为libOEShared.so复制的。

为了将我的应用程序本机代码与libOEShared链接,我使用NDK Prebuilds功能。这是我的Android.mk:

#include shared library
include $(CLEAR_VARS)
LOCAL_MODULE := OEShared
LOCAL_SRC_FILES := ../../../Shared/OEShared/libs/armeabi/libOEShared.so
include $(PREBUILT_SHARED_LIBRARY)

#build App library
include $(CLEAR_VARS)
LOCAL_MODULE    := OEApp
LOCAL_SRC_FILES := OEApp.cpp
LOCAL_LDLIBS    := -llog -lGLESv2 -lz
LOCAL_SHARED_LIBRARIES := OEShared
include $(BUILD_SHARED_LIBRARY)

然而,NDK还将libOEShared复制到我的Application项目的lib文件夹中,导致最终的APK中存在两个副本。

如何将我的应用程序的本机代码链接到libOEShared而不会自动复制?

谢谢你的时间,这给我带来了很多挫折感。

1 个答案:

答案 0 :(得分:1)

此处仅需要链接,而不是构建。可以使用LOCAL_LD_LIBS标志进行链接。你可以试试这个。

LOCAL_LDLIBS  := -L$(LOCAL_PATH)/../../../Shared/OEShared/libs/$(TARGET_ARCH_ABI)/  \
         -lOEShared