zoukankan      html  css  js  c++  java
  • cocos2dx C++调用android,android调用C++

     C++调用android

    java部分: 一个类,一个静态方法,一个实例方法

    public class AppActivity extends Cocos2dxActivity{
    
        public static Context mContext;  //记录类实例
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            
            mContext = AppActivity .this;
            
        }
    
        // c++中調用的方法
        public static Object rtnActivity() {
            System.out.println("----------rtnActivity");
            return mContext;
        }
    
        public void showAD() {
            System.out.println("showAD 成功");
        }
    
    }
    

      

    C++部分:

    #include "cocos2d.h"
    //将所有代码包含在预编译块里,防止找不到<jni.h>报错
    USING_NS_CC;
    #include <vector>
    using namespace std;
    #include "JniTest.h"
    #if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
    #include <jni.h> //这个文件在ndk中,所以放在预编判断块中,不然编译器找不到这个文件会报错
    #include "platform/android/jni/JniHelper.h"
    
    JniTest::JniTest()
    {
    }
    
    JniTest::~JniTest()
    {
    }
    
    //请求广告
    	void JniTest::ddcallAd()
    	{
    		//定义Jni函数信息结构体;
    		JniMethodInfo minfo;
    		//返回一个bool值表示是否找到此函数;
    		bool isHave = JniHelper::getStaticMethodInfo
    				(minfo,"org/cocos2dx/lua/MergeAppActivity","rtnActivity", "()Ljava/lang/Object;");
    		jobject activityObj;
    		if (isHave) {
    		//CallStaticObjectMethod调用java函数,并把返回值赋值给activityObj
    			activityObj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
    
    			isHave = JniHelper::getMethodInfo(
    					minfo,"org/cocos2dx/lua/MergeAppActivity","showAD","()V");
    			if (!isHave)
    			{
    				cocos2d::log("jni:showAD 函数不存在;");
    			}
    			else
    			{
    				//调用displayWebView函数,并传入参数
    				minfo.env->CallVoidMethod(activityObj, minfo.methodID);
    			}
    		}
    
    	}
    
    #endif
    

    先getStaticMethodInfo找到静态方法,

    CallStaticObjectMethod执行静态方法得到类实例,

    getMethodInfo再找实例方法,

    CallVoidMethod再调用实例方法。

    android调用C++

     1:c++层代码示例,建立一个CPP的类

    #if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    #include "platform/android/jni/JniHelper.h"
    #include <jni.h>
     
    extern "C"
    {
    //java传入一个string,无返回值,严格按照这个格式JAVA_方法路径【以_隔开】(JNIENV* env,jobject this,方法参数)
    JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_AppActivity_onKeyback(JNIEnv* env,jclass clazz,jstring info) 
    {

    //your code
    }
    }
    #endif
    2:Android 层,在主Activity中添加方法
    public static native void onKeyback(String info); //声明c++的方法
  • 相关阅读:
    elementui form 相关表单验证
    函数注释备注
    elementui elform 某一值为数组,各项必填验证
    selenium等待的三种方式(详细)
    什么是python
    pytest基础
    pymysql数据库操作
    自动化测试1
    allure生成测试报告
    python读取excel的文件
  • 原文地址:https://www.cnblogs.com/mingfuqishi/p/14670426.html
Copyright © 2011-2022 走看看