Несколько родных Android-библиотек, которые также зависят от libgnustl_shared.so

80
8

У меня есть проект приложения для Android, который зависит от двух собственных библиотек, libA и libB. libA зависит от libB, и обе библиотеки построены с использованием APP_STL: = gnustl_shared. Тогда возникает проблема при попытке создания APK:


[2014-09-30 14:31:47 - Appname] Error generating final archive: Found duplicate file for APK: lib/armeabi/libgnustl_shared.so
Origin 1: /libA/libs/armeabi/libgnustl_shared.so
Origin 2: /libB/libs/armeabi/libgnustl_shared.so

Как настроить эти библиотеки для правильной сборки/ссылки при использовании общей общей библиотеки, такой как libgnustl_shared.so?


EDIT:
Я пробовал много альтернативных настроек makefile, поэтому мне сложно узнать, что делать здесь, но я попробую. Оба файла Application.mk в libA/jni и libB/jni содержат:


APP_STL := gnustl_shared
APP_OPTIM := release
APP_ABI := armeabi-v7a armeabi
APP_PLATFORM := android-15

В libA/jni файл Android.mk содержит:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := MyBase
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libMyBase.so
LOCAL_PRELINK_MODULE := true
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := Base
LOCAL_SRC_FILES := Base.cpp
LOCAL_C_INCLUDES := ../../../../LIBS/MyBase/pub/include

LOCAL_LDLIBS := -llog -ljnigraphics
LOCAL_SHARED_LIBRARIES := MyBase
LOCAL_CPP_FEATURES += rtti
LOCAL_CPP_FEATURES += exceptions
include $(BUILD_SHARED_LIBRARY)


В libB/jni файл Android.mk содержит:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := MyMedia
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libMyMedia.so
LOCAL_PRELINK_MODULE := true
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := Media
LOCAL_SRC_FILES := Media.cpp media_jni.cpp
LOCAL_C_INCLUDES := ../../../../LIBS/MyBase/pub/include \
../../../../LIBS/MyMedia/pub/include

LOCAL_LDLIBS := -llog -ljnigraphics
LOCAL_SHARED_LIBRARIES := MyBase MyMedia
LOCAL_CPP_FEATURES += rtti
LOCAL_CPP_FEATURES += exceptions
include $(BUILD_SHARED_LIBRARY)

$(call import-module,LIBS/MyBase/jni)


MyBase и MyMedia - это две собственные библиотеки, написанные на С++ и не поддерживаемые Java/JNI. MyMedia зависит от MyBase. Обе библиотеки зависят от надежной библиотеки С++, такой как gnustl_shared.

спросил(а) 2014-10-01T01:06:00+04:00 5 лет, 12 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема