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

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

  1. 微信企业付款 ”错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置“报错的处理办法

    提示"错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置" 快速解决问题!!! 解说一下这个IP:这个IP是你发起支付的服务器外网I ...

  2. android mediaplayer 错误码,MediaPlayer 错误码

    android.media.MediaPlayer错误码: /** Unspecified media player error. * @see android.media.MediaPlayer.O ...

  3. android蓝牙错误码8,如何解决BluetoothGatt:Android中发生android.os.DeadObjectException错误?...

    我按照页面Bluetooth Low Energy开发Android 4.3的蓝牙低功耗. 我已经可以打开蓝牙,扫描设备并连接到BLE设备. 但是,在尝试连接到device(device.connec ...

  4. aidl远程服务调用Android,报错:Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe''

    aidl远程服务调用Android demo1: Alipay 支付App服务: 1.新建: Alipay\app\src\main\aidl\com\glsite\alipay\IAlipaySer ...

  5. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导. 但是在实际中打的错误日志内容和格式变 ...

  6. Android支付宝错误码62009,hb混合开发app 微信支付提示支付宝62009未知错误

    问题描述 hb混合开发app 微信支付提示支付宝62009未知错误 问题出现的环境背景及自己尝试过哪些方法 真机模拟测试 相关代码 获取通道 mounted(){ plus.payment.getCh ...

  7. Android支付宝错误码62009,[payment支付宝:62009]未知错误;到底什么问题啊啊啊啊啊...

    我也遇到这个问题 我的支付宝返回的报文是这样的: alipay_sdk=alipay-sdk-php-easyalipay-20191227&app_id=2021001151685431&a ...

  8. 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )

    文章目录 一. 报错信息 二. 问题分析 三. 解决方案 一. 报错信息 Flutter 使用 image_picker 时 , 需要进行 AndroidX 兼容 , 设置了 Android 编译 S ...

  9. android edittext设置内容为空,Android中给数据库添加EditText中内容,添加后数据为空的情况...

    搞了两天的代码,将EditText中内容添加至数据库,怎么都搞不定,总是插入数据为空: 这里需要将获取EditText内容的代码写在onClick函数中. 举例如下: EditText代码如下: an ...

最新文章

  1. jquery ajax多次请求接口解决方案
  2. 如何在查询分析器中执行dos命令
  3. vueRouter-命名视图
  4. delphi Post数据到网页
  5. Hacker学习发展流程图
  6. MQ如何防止消息丢失
  7. WiFi曝出安全漏洞几近“裸奔”:运营商能借机收割一波红利吗?
  8. codevs 1191 树轴染色 线段树区间定值,求和
  9. TF-tf.keras.layers.Dropout
  10. java读取资源文件(Properties)
  11. 第三次收获微软MVP
  12. Arduino学习笔记—— 猜数字游戏
  13. apache ActiveMQ反序列化漏洞(CVE-2015-5254)复现
  14. One Piece Introduction
  15. 淘宝/天猫买家信息 API
  16. 沉默是否是无言的抗争
  17. 基于spss的聚类分析(Cluster analysis)
  18. 万字长文Python面试题,年后找工作就靠这了
  19. 小白也能写前端?推荐一款超实用的app----JsHD调试器,助你写出炫酷的网页!
  20. 编程之美——1.2 中国象棋将帅问题(转)

热门文章

  1. 【c++】2.DISALLOW_COPY_AND_ASSIGN的用法
  2. 【学习笔记】投资理财,基金基础知识科普入门学习,凭运气赚回来的钱,会凭实力亏掉_20210115
  3. FTP 基础及连接跟踪
  4. 在iOS设备上安装Windows、Linux等操作系统!
  5. 服务器版博客系统、前后端交互1
  6. 这三年,一路走来,劈荆斩棘 – Vol 2
  7. 淘宝封杀返现模式 淘宝客返利网站模式遇挑战
  8. 中国移动云mas短信对接(http)
  9. java中隐函数求导法则_隐函数求导法则
  10. excel如何快速批量翻译单词