ego_cheng 2014-05-14 02:51 采纳率: 0%
浏览 1609

cocos2d中函数通过JNI调用android中类方法的疑问

如题,我试图在cocos2d中调用android的某方法,android中被调用方法如下:

public class AppActivity extends Cocos2dxActivity {

static {
    System.loadLibrary("cocos2dcpp");
}    
public static void gotoActivity()
{
    Intent in = new Intent(AppActivity.getContext(),AndroidUI.class);
    AppActivity.getContext().startActivity(in);    
}
}

cocos2d中声明和提出调用的方法如下:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#endif</android></jni.h>

void HelloWorld::startAndroidEvent(Ref* sender){

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo minfo;
bool b = JniHelper::getStaticMethodInfo(minfo,
    "org.cocos2dx.cpp.AppActivity",   
    "gotoActivity",                    
    "()v;");            
if(!b){
    CCLog("JniHelper::getMethodInfo error...");
}else{
    CCLog("ready to invoke method...");
}
#endif
}

cocos2d生成的安卓程序可正常运行,但执行跳转时会出现如下错误信息:
CSDN移动问答

拜托有相关经验的朋友能否指点一下可能是哪个方面出现了问题

展开全部

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 18:30
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    首先,你需要确保你在Cocos2D-X项目中正确地包含了jni.h文件。如果还没有包含这个文件,可以在项目的头文件(例如:AppDelegate.h)中添加以下行:

    #import "jni.h"
    

    然后,在你的Java代码中使用JniHelper.getStaticMethodInfo()来获取JNI方法。你可以将"gotoActivity"替换为你想要调用的具体方法名。

    如果你在尝试从C++代码中调用这些方法,那么你需要在Cocos2D-X项目中正确地定义了JNI方法,并且正确地导入了jni.h文件。此外,你可能还需要确保在你的C++代码中正确地调用了JniHelper::getStaticMethodInfo()

    至于出现的问题,可能是由于以下原因导致的:

    1. 你的C++代码中没有正确地调用了JniHelper::getStaticMethodInfo(), 或者是在JNI调用过程中发生了异常。
    2. 在Cocos2D-X项目中,JNI方法的实现可能与你的实际需求不一致,或者存在一些其他问题。
    3. 你的Android应用版本可能过低,无法访问到足够的权限或库。

    为了解决这些问题,你可以参考官方文档和示例代码,检查是否有任何特定于你的设备或API级别的要求。此外,你还可以考虑使用一些开源的库,如OpenCV或TensorFlow,它们通常已经适配了多种平台和设备,包括Android。

    评论
    编辑
    预览

    报告相同问题?

    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部