Android NDK + 两个共享库 + RTTI + 动态转型 = 不可能的
创始人
2024-08-14 19:30:08
0

在Android NDK中使用两个共享库并支持RTTI和动态转型是可能的。下面是一个解决方案的代码示例:

首先,需要在Android.mk文件中添加相关的配置信息:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# 配置第一个共享库
LOCAL_MODULE := first_lib
LOCAL_SRC_FILES := first_lib.cpp
LOCAL_CPP_FEATURES += exceptions rtti
# 添加其他需要的编译选项

include $(BUILD_SHARED_LIBRARY)

# 配置第二个共享库
include $(CLEAR_VARS)

LOCAL_MODULE := second_lib
LOCAL_SRC_FILES := second_lib.cpp
LOCAL_CPP_FEATURES += exceptions rtti
# 添加其他需要的编译选项

include $(BUILD_SHARED_LIBRARY)

接下来,需要确保在C++代码中正确使用RTTI和动态转型。下面是一个简单的示例:

first_lib.cpp:

#include 

class Base {
public:
    virtual void print() {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    void print() override {
        std::cout << "Derived class" << std::endl;
    }
};

extern "C" {
JNIEXPORT void JNICALL Java_com_example_myapplication_MainActivity_testDynamicCast(JNIEnv* env, jobject obj) {
    Base* base = new Derived();
    Derived* derived = dynamic_cast(base);
    if (derived) {
        derived->print();
    } else {
        std::cout << "Dynamic cast failed" << std::endl;
    }
    delete base;
}
}

second_lib.cpp:

#include 

class SecondLibClass {
public:
    void print() {
        std::cout << "SecondLibClass" << std::endl;
    }
};

extern "C" {
JNIEXPORT void JNICALL Java_com_example_myapplication_MainActivity_testRtti(JNIEnv* env, jobject obj) {
    SecondLibClass secondLibObj;
    const std::type_info& typeInfo = typeid(secondLibObj);
    std::cout << "Type: " << typeInfo.name() << std::endl;
}
}

最后,在Java代码中调用这些函数:

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("first_lib");
        System.loadLibrary("second_lib");
    }

    public native void testDynamicCast();
    public native void testRtti();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        testDynamicCast();
        testRtti();
    }
}

这样,就可以在Android NDK中使用两个共享库并支持RTTI和动态转型了。请根据实际需求进行修改和调整。

相关内容

热门资讯

实测发现"赣牌圈的好... 实测发现"赣牌圈的好牌几率"开挂(平台)辅助平台有挂讲解-必胜教程《详细加薇136704302咨询》...
透视工具"新西游大厅... 透视工具"新西游大厅辅助"开挂(平台)辅助平台有挂技术-微扑克教程>>您好:软件加薇13670430...
一分钟秒懂"wepo... 一分钟秒懂"wepoker代打辅助"开挂(插件)辅助插件详细教程-解密教程;无需打开直接搜索加薇13...
玩家必备科技"卡五星... >>您好:卡五星辅助器逍遥确实是有挂的,很多玩家在这款卡五星辅助器逍遥游戏中打牌都会发现很多用户的牌...
2分钟细说"闲逸辅助... 2分钟细说"闲逸辅助器"开挂(下载)辅助下载证实有挂-切实教程 【无需打开直接搜索加薇1367043...
一分钟了解"微信游戏... 一分钟了解"微信游戏锄大地辅助器"开挂(脚本)辅助脚本有挂解惑-透明挂教程;无需打开直接搜索薇:13...
透视肯定"潮友会鱼虾... 潮友会鱼虾蟹脚本辅助器 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由...
透视好友"星悦辅助神... 透视好友"星悦辅助神器"开挂(下载)辅助下载有挂规律-存在挂教程 【无需打开直接搜索加薇136704...
透视好牌"hhpok... 透视好牌"hhpoker俱乐部是干嘛的"开挂(工具)辅助工具存在有挂-2026新版《详细加薇1367...
重大来袭"叮叮川南游... 叮叮川南游戏辅助软件开挂教程视频分享装挂详细步骤在当今的网络游戏中,叮叮川南游戏辅助软件作为一种经典...