我有一些原生库,并希望将它们构建到NDK包中,然后将构建的NDK包发布给其他开发人员。有什么关于构建定制NDK包的提示吗?
我可以运行基于AOSP r81源代码的"make ndk“,并获得out/soong目录下的"ndk”文件夹。但是只有"platform“和"sysroot”子目录位于out/soong/ndk下。此外,我找不到任何压缩文件,如从谷歌网站发布的NDK包。
有什么建议吗?
诚挚的问候
发布于 2019-06-06 08:00:52
我不建议这样做。分发整个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/mylib
安装到某个包目录中(在本例中为$PACKAGES
)。然后他们会在他们的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包的分发变得更容易,这仍然是一项正在进行的工作。
https://stackoverflow.com/questions/55390795
复制相似问题