首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何构建基于google AOSP源代码的自定义NDK包?

如何构建基于google AOSP源代码的自定义NDK包?
EN

Stack Overflow用户
提问于 2019-03-28 13:37:15
回答 1查看 304关注 0票数 1

我有一些原生库,并希望将它们构建到NDK包中,然后将构建的NDK包发布给其他开发人员。有什么关于构建定制NDK包的提示吗?

我可以运行基于AOSP r81源代码的"make ndk“,并获得out/soong目录下的"ndk”文件夹。但是只有"platform“和"sysroot”子目录位于out/soong/ndk下。此外,我找不到任何压缩文件,如从谷歌网站发布的NDK包。

有什么建议吗?

诚挚的问候

EN

回答 1

Stack Overflow用户

发布于 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来提醒自己解决这个问题)。不过,这非常简单:

您可以使用以下布局发布一个目录:

代码语言:javascript
复制
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将为:

代码语言:javascript
复制
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中使用这个:

代码语言:javascript
复制
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包的分发变得更容易,这仍然是一项正在进行的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55390795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档