我试图通过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; :)
我知道这可能是不好的做法,所以我欢迎任何其他想法。
答案 0 :(得分:10)
sp<>
是特定于Android的。 sp<>
是强指针,wp<>
是弱指针;它们是Binder IPC实施的一部分。
开始寻找实现的地方是框架RefBase.h,这对于C ++新手来说有点曲折。您正在摆弄的任何内容都不是NDK定义的公共API的一部分,这意味着它可能会在发行版之间发生变化,因此请注意,您尝试执行的操作可能无法跨设备或软件更新。