gpt4 book ai didi

安卓NDK : Compiling different libraries for different architectures

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:20 25 4
gpt4 key购买 nike

我有一个小型 C++ 库,必须为 armeabi 和 armeabi7a 编译。我还有一个非常大的 c++ 库,只需要为 armeabi 编译。现在正在为两种架构编译它们(使用 NDK),但这使我的 .apk 变得非常大。是否可以将大型图书馆定位为仅为 armeabi 编译?我该怎么做?

我的文件夹结构是这样的:

/jni/biglib/
/jni/smalllib/
/jni/Application.mk
/jni/Android.mk

我的/jni/Application.mk 文件包含:

APP_ABI := armeabi-v7a armeabi
APP_OPTIM := release

我的根/jni/Android.mk 文件结合了每个库的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

include $(addprefix $(LOCAL_PATH)/, $(addsuffix /Android.mk, \
biglib \
smalllib \
))

最佳答案

绝对有可能。有一些代码 fragment 可以帮助您前进(没有 Android.mk 的 biglib 和 smallib 的确切内容,我无法为您提供更多帮助)。

1) 在Application.mk中将APP_ABI的顺序改为APP_ABI := armeabi armeabi-v7a

2) 修改你的根 Android.mk:

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

# biglib is not built for armeabi-v7a
ifneq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
include $(LOCAL_PATH)/biglib/Android.mk
endif

# ----- cut here -----
# Place this snippet to every module which needs biglib, or where convenient.
# Now you will link against armeabi version of biglib.
ifeq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
LOCAL_LDFLAGS += $(LOCAL_PATH)/../obj/local/armeabi/libbigLib.so
endif
# ----- cut here -----

include $(LOCAL_PATH)/smalllib/Android.mk

就是这样 - 您的 apk 文件现在不包含 armeabi-v7a 的 libbiglib.so

关于安卓NDK : Compiling different libraries for different architectures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358130/

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