我有一些本机库,想将它们构建到NDK包中,然后将构建的NDK包发布给其他开发人员。 关于构建定制的NDK软件包有什么提示吗?
我可以基于AOSP r81源代码运行“ make ndk”,并获得out / soong目录下的“ ndk”文件夹。 但是仅在out / soong / ndk下只有“ platform”和“ sysroot”子目录。 此外,我找不到任何zip文件,例如从Google网站发布的NDK软件包。
有什么建议吗?
最诚挚的问候
答案 0 :(得分:0)
我不建议那样做。分发整个NDK听起来对分发您的库来说是过大的杀伤力。我认为您(更重要的是您的用户)可以通过更传统的分发方法得到更好的服务。
我们确实有一个名为cdep的工具可以提供帮助,但是它生成的构建系统集成对于CMake而言并不是惯用的,因此这不是您的首选。
CMake和ndk-build都内置了用于导入第三方库的机制。 https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html介绍了CMake方法。
目前尚未记录ndk-build的机制(我刚刚提交https://github.com/android-ndk/ndk/issues/998来提醒自己修复该机制)。不过,这很简单:
您发送的目录具有以下布局:
mylib
├── Android.mk
├── include
│ └── mylib
│ └── mylib.h
└── libs
├── arm64-v8a
│ └── libmylib.so
├── armeabi-v7a
│ └── libmylib.so
├── x86
│ └── libmylib.so
└── x86_64
└── libmylib.so
您的Android.mk为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libmylib
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libmylib.so
include $(PREBUILT_SHARED_LIBRARY)
然后,您的用户会将您的软件包安装为$PACKAGES
的某个软件包目录(例如$PACKAGES/mylib
)。然后,他们将在Android.mk中使用它:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libfoo
LOCAL_SRC_FILES := foo.cpp
LOCAL_SHARED_LIBRARIES := libmylib
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path,$(PACKAGES))
$(call import-module,mylib)
如果需要支持其他构建系统,请查阅这些文档。
您可能有兴趣订阅https://github.com/android-ndk/ndk/issues/916。我目前正在努力简化NDK软件包的分发,这仍在进行中。