在Android NDK中使用“sp”

时间:2014-10-09 12:39:07

标签: c++ android-ndk

我试图通过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_preload.cpp:88:1:错误:&#39; sp&#39;没有命名类型

任何人都知道如何使用sp&lt; ..&gt;这里?我认为它不是特定于Android的,而是标准的C ++ - 事情 - 我在C ++中是全新的,刚刚开始&#34;今天&#34; :)

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

1 个答案:

答案 0 :(得分:10)

sp<>是特定于Android的。 sp<>是强指针,wp<>是弱指针;它们是Binder IPC实施的一部分。

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