接入sdk的难点没有什么,不了解的人会觉得很棘手,真正的了解了才知道并没有什么技术含量。
第一步就是将我们要接入的sdk导入到我们的项目中,首先在app中新建一个libs文件夹,然后将我们的jar包拖进去,拖进去之后右键jar文件,选择 add as library,依赖于你的项目名称。然后你会在你的项目下的build.gradle中的dependencies中就能看到添加了你自己的jar包,这就导入成功了。如果没有自己生成,可以自己手动加上
implementation files('libs/amyyjtoolsdk.jar')
导入完成就是配置权限了,按照sdk中的Demo中的示例将需要拷贝的东西拷贝到相应的目录下就可以了。
然后就是代码之间的交互,在js中可以调用Java的静态方法。creator为我们提供了对应的接口,官网链接:
http://docs.cocos.com/creator/manual/zh/advanced-topics/java-reflection.html
有两个线程的问题,我暂时没有搞懂,能力有限,但是官网文档解释的还是很清楚的。
我写一下用法:
1,这一段代码是在android中的主activity中写的,creator中是AppActivity.java,将this复制给静态变量app,这样我们可以在我们的静态函数中拿到AppActivity的引用,我们要做的就是定义一个app,然后在onCreate中赋值。
2,定义静态方法,也就是在js客户端代码中点击按钮触发到这里,做应该有的操作,比如如果做支付,就在点击按钮的时候调用进入到这里,在这里接入对应的支付sdk。一定要使用runOnUiThread,具体可以去看一下官网的解释,上边我已将放了链接。
3,js客户端调用android静态方法。creator提供有方法,参数第一个是文件名,不用js中的 . 而是用的/ ,第二个参数是调用的静态方法 函数名第三个参数是方法签名,具体参考creator官网定义,也就是定义这个函数是否有返回值什么的,搞个签名。我这个签名是没有返回值的。后边的三个是我传过去的参数,直接使用string,number,boolean就可以。不过在android中拿到的这个值再通过强转转换到相应的值就可以了。Integer.parseInt() ,Float.parseFloat() 转换为int , 转换为float。
Java端也可以调用js函数。creator编译的android工程中,libcocos2dx文件夹下的Cocos2dxJavascriptJavaBridge文件中的
evalString方法就是通过Java端调用js代码的方法。
使用的方法也很简单,比如支付完成,在支付成功回调中调用该方法。val的值就是你写的Java的代码,加上“”,正常的代码。如果有变量要传,可以通过“+”拼接字符串,再传入。
Cocos2dxJavascriptJavaBridge.evalString(val);
使用的时候要在头文件中打开这个文件
import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
我的项目中有加入震动的需求,creator中有实现震动的接口,参数单位是秒,只能在真机上使用,如果在浏览器是会报错的
同时加入震动也要加入用户许可,在AndroidManifest.xml 添加用户需求,不然运行的时候会报错。亲测有效。
<uses-permission android:name="android.permission.VIBRATE"/>
我上边介绍的是我使用android studio实现的,同时也提一个点,creator打包的android studio 工程,接入了sdk后,再更改代码的时候,直接构建就行了,千万不要在creator中点编译,而是要在creator构建完成后,去android studio中编译,重新生成。在creator中编译会出错,再去看android studio工程,你之前做的sdk接入全废了,还要删了从头做。别问我为什么知道,我连续接了三遍sdk,可熟练了。