Ошибка: отсутствует SHARED_LIBRARIES STATIC_LIBRARIES Android.mk - PullRequest
2 голосов
/ 10 октября 2019

У меня есть приложение для Android, которое также имеет зависимости кода C ++.

Я хочу создать это приложение как системное приложение путем компиляции с AOSP.

В моем android.mk я должен сначала импортировать статическую библиотеку (abc.a), а затем использовать ее для создания общей библиотеки (xyz.so).

Я сталкиваюсь с ошибкой сборки как "ошибка: xyz (SHARED_LIBRARIES android-arm64) отсутствует abc (STATIC_LIBRARIES android-arm64)"

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := abc
LOCAL_SRC_FILES := $(LOCAL_PATH)/$(TARGET_ARCH_ABI)/abc.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
#LOCAL_LDFLAGS := -llog -ldl
LOCAL_MODULE    := libxyz
LOCAL_SRC_FILES := \
                xyz.cpp \
                xyz1.cpp        
LOCAL_STATIC_LIBRARIES := abc
LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter -Wno-switch
#LOCAL_SDK_VERSION := 19
#LOCAL_NDK_STL_VARIANT := c++_static # LLVM libc++
include $(BUILD_SHARED_LIBRARY)  

Cmakelists:

cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
             abc
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/abc.cpp
             src/main/cpp/abc.hxx
            ......................)

find_library( # Sets the name of the path variable.
              log-lib
              log pthread)

add_library( xyz
             STATIC
             IMPORTED )

 set_target_properties( # Specifies the target library.
                        xyz
                        # Specifies the parameter you want to define.
                        PROPERTIES IMPORTED_LOCATION
                        # Provides the path to the library you want to import.
                        ../../../../${ANDROID_ABI}/xyz.a )

target_link_libraries( # Specifies the target library.
                       abc
                       xyz ${log-lib} )

Прикрепление скриншота ошибки.

enter image description here

1 Ответ

0 голосов
/ 11 октября 2019

Система сборки платформы не такая, как в NDK. Нет такого правила, как PREBUILT_STATIC_LIBRARY или PREBUILT_SHARED_LIBRARY, поэтому эти правила не выполняются. Платформа использует BUILD_PREBUILT, и вы должны указать свой LOCAL_MODULE_CLASS. См. https://android.googlesource.com/platform/packages/apps/Dialer/+/refs/heads/master/Android.mk для примера.

CMake вообще не поддерживается в платформе.

Вы также, вероятно, не хотите использовать Android.mk в платформе. Эта система сборки (которая не связана с ndk-build) уже несколько лет выходит из строя. Вы захотите использовать Soong, как описано https://source.android.com/setup/build.

...