穿山甲android对接错误码40029,空Android项目集成Cocos、穿山甲。Lua调用网络接口。...

1. 搭建安卓空项目、集成cocos、穿山甲广告新建安卓项目start new android projectEmpty Activity包名这里要和穿山甲上面已创建的应用的包...

1. 搭建安卓空项目、集成cocos、穿山甲广告新建安卓项目

start new android project

Empty Activity

包名这里要和穿山甲上面已创建的应用的包名一致,否则无法唤起广告,(所以这里先用 dongdezhuan 的)

集成Cocos, 让安卓项目能够正常运行lua游戏集成Cocos2dx的framework

File -> New -> import module -> ( 假设这里要导入 Cocos 3.10 版本的framework , 那我们就要找到 3.10 下面的

cocos -> platform -> android -> java

) 【附: 先去官网下载3.10 ,如果没有这个得话】

1.1 添加到依赖

找到 app下面的 build.gradle 文件, ( 如果在Android Studio 里面,则是 build.gradle(Module: app ) ) 修改 dependencies 把刚才引入的 libcocos2dx 这个模块添加到依赖项里面dependencies {

...

implementation project(path: ":libcocos2dx") //添加这一行

...

}

1.2 添加 libcocos2dlua.solibcocos2dlua.so 哪里来的?

这个是当一个cocos项目打包安卓工程时生成的。libcocos2dlua.so 的位置 ?

以 TvGameProject_DB 为例, .so 文件的位置在

frameworks -> runtime-src -> proj.android-studio -> app -> build -> intermediates -> jniLibs -> debug -> armeabi -> libcocos2dlua.so

注意: 在 3.17下面是和 3.10项目下面的位置不一样

3.17 下面的位置是: frameworks -> runtime-src -> proj.android -> app -> build -> intermediates -> ndkBuild -> debug/release -> armeabi -> libcocos2dlua.so

在android studio 左上角,点击 Android↓ , 修改为 project 。 然后找到 app 目录下面的 libs , 如果没有libs , 则手动创建一个libs 文件夹。

之后将上面包含 .so 文件的文件夹复制到 libs 下面。

这里是 :  armeabi -> libcocos2dlua.so

1.3 配置 .so 库的路径 以及 游戏资源路径

切换回 Android↓ 。 右击app , New -> Folder -> Assets Folder

打开build.gradle(:app) , 在 android 下 ( defaultConfig 同级) 添加下面代码sourceSets.main {

jniLibs.srcDir "libs"

assets.srcDir "src/main/assets"

}

修改 AndroidManefist.xml , 在 下面添加

android:value="cocos2dlua" />

新建 GameActivity , 作为游戏引擎的画面载体(入口)

在MainActivity同级下新建 java 文件。 继承 Cocos2dxActivity , 并且重写 onCreate 方法打开可重写方法列表的快捷键是 crtl + o , Mac上是 control + opackage com.dongdezhuan; // 自己项目的包名

import android.os.Bundle;

import org.cocos2dx.lib.Cocos2dxActivity;

public class GameActivity extends Cocos2dxActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

}

然后要在 AndroidManefist 下面, 设置应用的默认activity为刚才创建的 GameActivity

''' 这4行代码的作用就是用来告诉 application , 默认启动activity是谁 (放在哪个 activity 标签对下面,就是哪个activity)

'''

这个时候运行应用的话,还是会报错, 因为3.10 打包生成的 .so 库是32位的。 所以需要再配置一下

build.gradle(Module : app), 让APP启动时默认去找指定的架构版本下的 .so 库

在 defaultConfig 下面添加以下代码ndk {

abiFilters "armeabi","armeabi-v7a","x86","x86_64"

}

这个时候运行APP, 手机黑屏,log里没有严重错误。则表示cocos环境集成成功。

接下来导入游戏资源即可运行。

这里以 cat 为例。找到 cat 游戏目录下的 src、res。 将这两文件夹拖到 assets 目录下。 下一步,用vscode 打开 src 文件夹。点击搜索, 搜索 java 关键词。 并将所有调用java的代码全部注释。接着运行游戏。

如果没有报错,则游戏的集成到这一步为止全部完成。之后,打包游戏的话可以直接用这个Android项目。

手动打包的过程如下: Build -> Generate Signed Bundle/APK -> App

下一步选择 打包秘钥,如果没有的话,则创建一个Create New

key store path : 选择生成的秘钥路径

certificate 填一项即可

生成完成后,秘钥路径和密码会自动填充好,点下一步就行。

接下来选择 debug( 测试版 ) 或者 release ( 正式版 ). 全部勾选 v1, v2。 然后就打包了。

打包完成后apk路径是在 : app -> build -> output -> apk -> release 下面。

集成穿山甲广告

lua调用Java方法文档见README_LUA_JAVA.md

调用网络接口获取数据

restful 接口获取数据有两个,一个是 get ,一个是 post

这两个方法都可以向服务器发送数据。 但是get方法向服务器发送的数据大小是有限制的。所以一般向服务器上传数据时用Post方法。

Android在高版本中如果要调用 http 开头的接口,需要额外配置一下。

一: 打开 AndroidManifest.xml ,在 application 中添加下面这行

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:usesCleartextTraffic="true"// 添加这一行

android:theme="@style/AppTheme">

二: 在AndroidManifest.xml 中添加网络请求权限

接下来修改 main.lua , 分别调用 get 方法和 post 方法

请求网络用到的 lua 对象是 cc.XMLHttpRequest , 它是对web中的xmlhttprequest 的移植。

因为在cocos2dx的文档中并没有详细介绍,在3.17的文档中连api都没得。这里我们只能对照web中的XMLHttpRequest的用法来简单使用。

XMLHttpRequest的基本使用流程为新建 XMLHttpRequest 对象

设置响应类型

调用 open 方法 和服务器建立连接

设置响应回调方法,一般就是根据服务器返回的不同状态来进行后续处理

Lua中通过 registerScriptHandler 来绑定 响应回调方法

调用 send 方法,发送请求

GET-- GET 类型网络接口调用示例方法

-- 这个类型的方法,一般是从服务器里取数据

local function getTest()

local client = cc.XMLHttpRequest:new()

client.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING

local method = "GET"

local url = "http://111.231.105.133/login"

client:open(method,url) -- 到这一步,已经和服务器建立连接了

local function onReadyStateChange()

if client.readyState == 4 and (client.status>= 200 and client.status < 300) then

local s = client.response

print(TAG, s)

else

-- TODO: 接口请求失败

print(TAG,"request failed")

end

end

client:registerScriptHandler(onReadyStateChange)

client:send()

end

POST

因为post是向服务器上报数据,所以在send方法中,我们是要带上游戏数据-- POST 类型网络接口调用示例方法

-- 这个类型的方法,一般是在游戏里做数据上报时调用,即将游戏数据上传到服务器

local function postTest()

local json = require("json/json")

local client = cc.XMLHttpRequest:new()

client.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON

client:setRequestHeader("Content-Type","application/json")

local method = "POST"

local url = "http://111.231.105.133/upgrade"

client:open(method,url) -- 到这一步,已经和服务器建立连接了

local function onReadyStateChange()

if client.readyState == 4 and (client.status>= 200 and client.status < 300) then

local s = client.response

print(TAG, s)

else

-- TODO: 接口请求失败

print(TAG,"request failed")

end

end

client:registerScriptHandler(onReadyStateChange)

local game_data = {

name="小红",

game_gold=2300,

game_level=13

}

local data = json.encode(game_data)

client:send(data)

end

响应类型 responseType

typelua

jsoncc.XMLHTTPREQUEST_RESPONSE_JSON

textcc.XMLHTTPREQUEST_RESPONSE_STRING

arraybuffercc.XMLHTTPREQUEST_RESPONSE_ARRAYBUFFER

open方法

open(method,url)method: "GET", "POST","OPTION","DELETE" ...

onReadyStateChange回调

用到了三个重要属性, 都是上面 XMLHttpRequest 实例中的属性client.readyState

client.status

client.reponse

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值