2014-10-09 384 views
4

我試圖通過LD_PRELOAD攔截一些本地庫調用。在Android NDK中使用「sp」

對於使用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++,剛開始「今天」:)

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

回答

6

sp<>是Android特有的。 sp<>是強指針,wp<>是弱指針;它們作爲活頁夾IPC實施的一部分而出現。

開始尋找實現的地方是框架RefBase.h,這對於C++新手來說有點麻煩。您所做的任何事都不是NDK定義的公共API的一部分,這意味着它可能會在不同版本之間發生變化,因此請注意,您嘗試執行的操作可能無法跨設備或軟件更新運行。