gpt4 book ai didi

c++ - 在 Android NDK 中使用 "sp"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:43 25 4
gpt4 key购买 nike

我正在尝试通过 LD_PRELOAD 拦截一些 native 库调用。

这对于用 C 编写的简单库来说效果很好,但现在我尝试更进一步,从用 C++ 编写的 AOSP 中覆盖一些更复杂的类方法。

这是我的例子:

#include <rs/cpp/util/RefBase.h>

namespace android {
sp<MediaCodec> MediaCodec::CreateByType(const sp<ALooper> &looper, const char *mime, bool encoder) {
// TODO this will be implemented by me
return NULL;
}
}

在我的 Application.mk 中,我得到了以下代码:

APP_STL := gnustl_static

在 Android.mk 里面:

LOCAL_STATIC_LIBRARIES += libstlport_static

遗憾的是,我得到的错误如下:

jni/libhook/ld_preload.cpp:88:1: error: 'sp' does not name a type

有人知道如何在这里使用 sp<..> 吗?我假设它不是特定于 Android 的,而是标准的 C++ 东西——我是 C++ 的新手,“今天”才开始:)

我知道这可能是不好的做法,所以欢迎我提出任何其他想法。

最佳答案

sp<>是安卓特有的。 sp<>是强指针,wp<>是弱指针;它们是作为 Binder IPC 实现的一部分而产生的。

开始寻找实现的地方是框架 RefBase.h ,这对于 C++ 新手来说有点曲折。您正在摆弄的内容都不是 NDK 定义的公共(public) API 的一部分,这意味着它可能会在不同版本之间发生变化,因此请注意,您尝试做的事情可能无法跨设备或软件更新工作。

关于c++ - 在 Android NDK 中使用 "sp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26278657/

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