在Android NDK中如何使用"sp"?

6

我正在尝试通过LD_PRELOAD截取某些本地库调用。

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

以下是我的示例:

#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++事物 - 我完全是新手,刚刚开始学习“今天” :)
我知道这可能是不好的实践,因此我欢迎任何其他想法。
1个回答

13

sp<>是 Android 特有的。 sp<> 是强引用,wp<> 是弱引用;它们是作为 Binder IPC 实现的一部分而产生的。

查找实现的地方是框架RefBase.h,但对于 C++ 新手来说,这有点棘手。你所操作的内容都不是由 NDK 定义的公共 API 的组成部分,这意味着它在发布之间可能会发生变化,因此请注意您正在尝试的内容可能无法跨设备或软件更新工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接