如何基于Google AOSP源代码构建自定义的NDK软件包?

时间:2019-03-28 05:37:15

标签: android-ndk

我有一些本机库,想将它们构建到NDK包中,然后将构建的NDK包发布给其他开发人员。 关于构建定制的NDK软件包有什么提示吗?

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

有什么建议吗?

最诚挚的问候

1 个答案:

答案 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软件包的分发,这仍在进行中。