色偷偷精品伊人,欧洲久久精品,欧美综合婷婷骚逼,国产AV主播,国产最新探花在线,九色在线视频一区,伊人大交九 欧美,1769亚洲,黄色成人av

240 發(fā)簡(jiǎn)信
IP屬地:四川
  • 120
    Android JNI學(xué)習(xí)(二)——實(shí)戰(zhàn)JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK與JNI基礎(chǔ)Android JNI學(xué)習(xí)(二)——實(shí)戰(zhàn)JNI之“hello world”Android JNI學(xué)習(xí)(三)...

  • native函數(shù)沒有指針數(shù)組哦,我看了一下android Q里邊的實(shí)現(xiàn),在注冊(cè)native函數(shù)的時(shí)候,通過反射獲取到j(luò)ava方法地址后,直接將native 函數(shù)的地址,寫入到 對(duì)應(yīng)java 方法地址開始往后的4個(gè)字節(jié)或8個(gè)字節(jié)的內(nèi)存空間里邊。
    具體實(shí)現(xiàn)在: android/art/runtime/art_method.h
    template<typename T>
    ALWAYS_INLINE void SetNativePointer(MemberOffset offset, T new_value, PointerSize pointer_size) {
    static_assert(std::is_pointer<T>::value, "T must be a pointer type");
    const auto addr = reinterpret_cast<uintptr_t>(this) + offset.Uint32Value();
    ///這邊將native函數(shù)地址進(jìn)行寫入哦
    if (pointer_size == PointerSize::k32) {
    uintptr_t ptr = reinterpret_cast<uintptr_t>(new_value);
    *reinterpret_cast<uint32_t*>(addr) = dchecked_integral_cast<uint32_t>(ptr);
    } else {
    *reinterpret_cast<uint64_t*>(addr) = reinterpret_cast<uintptr_t>(new_value);
    }
    }

    大致調(diào)用棧為:
    SetNativePointer()
    SetDataPtrSize()
    SetEntryPointFromJniPtrSize()
    SetEntryPointFromJni()
    RegisterNative()
    RegisterNatives()
    jniRegisterNativeMethods()
    registerNativeMethods()
    RegisterMethodsOrDie()

东阿县| 微博| 桦川县| 龙山县| 南通市| 修文县| 沅陵县| 古丈县| 肇源县| 清苑县| 海宁市| 札达县| 孝昌县| 尉犁县| 迁西县| 西林县| 潼关县| 炉霍县| 太原市| 连江县| 内乡县| 怀宁县| 娄烦县| 许昌县| 古交市| 安乡县| 紫云| 丰台区| 固安县| 天气| 荆门市| 彝良县| 绵阳市| 汝城县| 郸城县| 镶黄旗| 临澧县| 庄浪县| 叶城县| 五原县| 通山县|