• cocos2dx android SDK接入总结


    在游戏开发中,对接入三方支付SDK的总结,(此处主要以移动的支付sdk为例, 说说操作的大体步骤 或 其中遇到的一些问题。)

    问题:1.三方库的拷贝问题,(如果是将*.so放在libs/armeabi下, 有可能在编译后会被NDK清除掉,所以导致找不到库的问题: 
    解决方法1: 通过NDK,添加android.mk文件,进行拷贝,但此处NDK的拷贝,会导致*.so内部一些符号的修改,从而会导致有些的*.so库会编译不成功(如libmegjb.so移动基地sdk)。
    此方法是在jni目录中创建一个预编译文件夹prebuilt,将需要拷贝的*.so库,再创建一个Android.mk文件,指定要编译的库
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := libsmsiap
    LOCAL_SRC_FILES := libsmsiap.so
    include $(PREBUILT_SHARED_LIBRARY)

    再在jni下的Android.mk中添加需要编译的makefile
    LOCAL_SHARED_LIBRARIES := libsmsiap
    include $(OT_PATH)/prebuilt/Android.mk
    这样就可以在每次编译后,拷贝*.so文件到libs/armeabi下
    )

    解决方法2:可以自己新建一个*.bat文件,实行自己拷贝,在NDK执行后。此种方式简单好用。在jni目录下创建一个.bat文件,copy jniprebuilt*.so libsarmeabi,就执行这样一个copy命令,再按照新建NDK的方式,在Android工程中buidlers下新建一个编译器,放在NDK编译后面,就可以进行拷贝。


    1、cocos2d调用java中的方法,进行支付。(借用jni库进行调用通信)
    void AndroidPayment::callPayment(std::string payCo, std::string money)
    {
    cocos2d::JniMethodInfo method;
    jobject obj;

    //通过cocos2dx的JniHelper获取java类中的静态成员函数,进行调用
    //org.cocos2dx.cpp.AppActivity 调用java方法的包名+类名
    //order: 为调用java的方法名
    //"(Ljava/lang/String;Ljava/lang/String;)V":为jni定义的参数及返回类型
    //具体jni的一些调用,可参考:http://zhiweiofli.iteye.com/blog/1830321

    bool b = cocos2d::JniHelper::getStaticMethodInfo(method, "org.cocos2dx.cpp.AppActivity", "order", "(Ljava/lang/String;Ljava/lang/String;)V");
    if(b) 
    {
    jstring payCode = method.env->NewStringUTF(payCo.c_str());//"30000843784201"
    jstring jMsg = method.env->NewStringUTF(money.c_str());//"30000843784202"
    method.env->CallStaticVoidMethod(method.classID, method.methodID, payCode, jMsg);
    method.env->DeleteLocalRef(payCode);
    method.env->DeleteLocalRef(jMsg);
    }
    }

    java中的函数定义:
    public static void order(String payCode, String reserve){
    AppActivity.mPaycode = payCode;
    AppActivity.sContext.smsOrder(AppActivity.sContext, AppActivity.mListener);
    }

    //调用三方sdk的接口,进行order支付
    public void smsOrder(Context context, OnPurchaseListener listener) {
    try {
    purchase.order(context, mPaycode, listener);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }



    2、支付成功后调用cocos2d函数进行回调操作。
    在java中申明 native函数:
    public class IAPCallback {
    public static native void nativeInitResultCallback(int code, String msg);
    public static native void nativePayCallback(String paycode, String orderId, String tradeId, String tradeType,String leftDate);
    public static native void nativePaySucessCallback(int b);
    }

    通过javah对此java类进行编译,生成*.h文件,再实现.cpp文件:

    .cpp文件中在同cocos2d中衔接,就实现了一个完整的支付流程。

  • 相关阅读:
    R语言:随机抽样(sample函数)
    SNP (Single Nucleotide Polymorphism), SNV ( single nucleotide variants ) , Indel (insertion-deletion) 的区别
    剑指offer五十六之删除链表中重复的结点
    剑指offer五十五之链表中环的入口结点
    剑指offer五十四之字符流中第一个不重复的字符
    剑指offer五十三之表示数值的字符串
    剑指offer五十二之正则表达式匹配
    剑指offer五十一之构建乘积数组
    求游戏晋级花费的宝石的期望
    剑指offer五十一之构建乘积数组
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6091780.html
Copyright © 2020-2023  润新知