在安卓 NDK 中使用"sp"

Use "sp" in Android NDK

本文关键字:sp NDK      更新时间:2023-10-16

我正试图通过LD_PRELOAD拦截一些本机库调用。

这对于用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_proad.cpp:88:1:错误:"sp"未命名类型

任何知道如何使用sp<..>的人在这里我想这不是安卓系统特有的,而是一个标准的C++——我对C++完全陌生,刚刚开始"今天":)

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

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

开始寻找实现的地方是框架RefBase.h,这对于一个C++新手来说有点曲折。你所做的一切都不是NDK定义的公共API的一部分,这意味着它可能会在不同版本之间发生变化,所以要注意,你试图做的事情可能无法在设备或软件更新中工作。