gpt4 book ai didi

android - 在 gradle sync android studio 上跳过 prebuilt-library.mk

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:58 28 4
gpt4 key购买 nike

我的项目应用程序依赖于库模块 alib。 app 和 alib 都使用 ndk 构建了一个 c++ 库。应用程序 C++ 库,称为 app.so,依赖于 alib.so,它是库模块的 C++ 库。在应用程序的 android.mk 中,我有:

LOCAL_PATH := $(the_right_alib_path)
include $(CLEAR_VARS)

LOCAL_MODULE := alibsdk
LOCAL_SRC_FILES := libalib.so
include $(PREBUILT_SHARED_LIBRARY)

Gradle 同步在 prebuilt-library.mk 上失败,并显示消息 Android NDK:检查/the_right_alib_path/libalib.so 是否存在或其路径是否正确。

如果我使用 gradle 构建模块,该文件将存在,当我执行 gradle 同步时,它自然不存在。

如何跳过 prebuilt-library.mk 的执行?或者有一种方法可以告诉 ndk alib.so 将由另一个 gradle 模块构建?

附言。这更烦人,因为实际上它会检查所有库的不同版本/风格/尺寸,而且我不需要构建所有这些库来处理应用程序的开发版本。

最佳答案

您可以通过对 Android.mk 进行少量修改来避免该错误:

include $(CLEAR_VARS) 
LOCAL_MODULE := alibsdk
LOCAL_SRC_FILES := libalib.so
ifeq ($(findstring n,$(MAKEFLAGS)),n)
include $(BUILD_SHARED_LIBRARY)
else
include $(PREBUILT_SHARED_LIBRARY)
endif

这利用了 sync 期间传递给 ndk-build-n 标志。如果您愿意,可以为此创建自定义定义。 build-shared-library.mk 将生成关于奇怪 SRC 的警告,但不会失败。

同样可以在不触及 Android.mk 文件的情况下实现:在您的 build.gradle 中,使用

if (project.gradle.startParameter.taskNames.isEmpty()
|| project.gradle.startParameter.taskNames[0].contains(":generate")) {
android.defaultConfig.externalNativeBuild.ndkBuild.arguments += 'PREBUILT_SHARED_LIBRARY=$(BUILD_SHARED_LIBRARY)'
}

Android Studio 多次运行 ndk-build:没有任务(Sync 步骤),在 :generate[flavor][Debug|Release] 中来源,并在 :externalNativeBuild[flavor][Debug|Release] 内。

为了检索当前任务,我遵循了 https://stackoverflow.com/a/21603707/192373 .

也许最简单的解决方法是依赖于 prebuilt-library.mk*) 的模糊实现细节。在您的主 Android.mk 的早期,添加行

override prebuilt=$(if $(strip $(wildcard $(prebuilt_path))),$(prebuilt_path),.)

如有必要,这可以在 gradle 中完成:

android.defaultConfig.externalNativeBuild.ndkBuild {
arguments 'prebuilt=$(if $(strip $(wildcard $(prebuilt_path))),$(prebuilt_path),.)'
}

*) 已针对 NDK r19b 及更早版本进行验证。

关于android - 在 gradle sync android studio 上跳过 prebuilt-library.mk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985084/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com