问题: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 jni\prebuilt\*.so libs\armeabi\,就执行这样一个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中衔接,就实现了一个完整的支付流程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。