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和动态转型了。请根据实际需求进行修改和调整。

相关内容

热门资讯

不少玩家反映!微乐江西小程序辅... 不少玩家反映!微乐江西小程序辅助器"详细辅助工具"果然真的是有挂(哔哩哔哩)微乐江西小程序辅助器破解...
透视模拟器!海贝之城辅助软甲下... 透视模拟器!海贝之城辅助软甲下载"详情辅助工具"确实存在有挂(哔哩哔哩)1、玩家可以在海贝之城辅助软...
透视工具!微信小程序旺旺福建辅... 透视工具!微信小程序旺旺福建辅助"专业辅助攻略"真是真的有挂(哔哩哔哩)1、该软件可以轻松地帮助玩家...
规律辅助挂!科乐填大坑辅助器免... 规律辅助挂!科乐填大坑辅助器免费下载"专业辅助软件"一贯是有挂(哔哩哔哩)1、很好的工具软件,可以解...
昨日!微乐卡五星有挂吗&quo... 昨日!微乐卡五星有挂吗"开挂辅助脚本"本来确实有挂(哔哩哔哩)1、微乐卡五星有挂吗免费脚本咨询教程、...
于此同时!遇悦游戏辅助&quo... 于此同时!遇悦游戏辅助"解迷辅助脚本"一直确实有挂(哔哩哔哩)遇悦游戏辅助是不是有人用挂微扑克wpk...
今天上午!卡五星辅助器&quo... 今天上午!卡五星辅助器"解迷辅助神器"竟然是有挂(哔哩哔哩)1、卡五星辅助器破解器简单,卡五星辅助器...
透视科技!赣牌圈控制牌型&qu... 您好,赣牌圈控制牌型这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩家...
这一现象值得深思!新蛮王辅助器... 这一现象值得深思!新蛮王辅助器"必备辅助插件"果然真的有挂(哔哩哔哩)1、新蛮王辅助器辅助器安装包、...
近期!新二号辅助软件下载&qu... 近期!新二号辅助软件下载"透视辅助软件"都是是真的有挂(哔哩哔哩)1、近期!新二号辅助软件下载"透视...