Cocos的生态相比Unity要逊色很多,网上搜索的各种文章,基本都是比较早期的,无法在较新版本环境中使用,这里以Cocos 3.3版本为例,讲一下在自己的Android项目中嵌入Cocos项目。

一、创建Cocos项目(略)。

二、编译Cocos Android工程。

需要下载NDK。在偏好设置中,设置路径。

Cocos菜单中选择“项目——构建发布”,弹出如下界面。

我已经创建了一个名字为android的构建任务,大家可以新建一个。

“build”是 工程构建的目录,“android-001”是构建后,该项目存在的目录。

构建的工程都会放到Cocos项目目录下,比如你的目录为“D:\Source\cocos”,那构建后的目录就在“D:\Source\cocos\build”下。

在你构建的项目的目录下,比如“D:\Source\cocos\build\android-001”下,有两个目录。

“assets”是资源目录,proj是工程目录,我们要用Android Studio来编译proj下面的项目。在proj下的gradle.properties文件中,定义了一些公共变量,包括目录和版本等信息。

PROP_TARGET_SDK_VERSION=26# Android Build Tools version that will be used as the compile project
PROP_BUILD_TOOLS_VERSION=30.0.2# Android Application Name
PROP_APP_NAME=game_test# Instant App
PROP_ENABLE_INSTANT_APP=falsePROP_NDK_PATH=D:\\Source\\android-ndk-r23b# Cocos Engine Path
COCOS_ENGINE_PATH=D:/Program Files/CocosDashboard/resources/.editors/Creator/3.3.0/resources/resources/3d/engine-native# Res path
RES_PATH=D:/Source/cocos/build/android-001# Native source dir
NATIVE_DIR=D:/Source/cocos/native/engine/android# Application ID
APPLICATION_ID=com.cocos.android# List of CPU Archtexture to build that application with
# Available architextures (armeabi-v7a | arm64-v8a | x86 | x86_64)
# To build for multiple architexture, use the `:` between them
# Example - PROP_APP_ABI=arm64-v8a
PROP_APP_ABI=arm64-v8a

PROP_APP就设置为arm64-v8a即可,一般手机都没问题,如果加上x86,编译过不去,原因未解。

COCOS_ENGINE_PATH是指向Cocos安装目录的, 其中的“D:\Program Files\CocosDashboard\resources\.editors\Creator\3.3.0\resources\resources\3d\engine-native\cocos\platform\android\libcocos2dx”目录将被proj中的工程引用。

我们再看一下proj的setting.gradle文件。我给项目起的名称为cocos,大家随意即可。“:libservice”在proj自己的目录中。

include ':libcocos',':libservice',':cocos'
//这个就是指向了Cocos安装目录中的libcocos2dx
//如:D:\Program Files\CocosDashboard\resources\.editors\Creator\3.3.0\resources\resources\3d\engine-native\cocos\platform\android\libcocos2dx
project(':libcocos').projectDir     = new File(COCOS_ENGINE_PATH,'cocos/platform/android/libcocos2dx')
//这里就是引用的D:/Source/cocos/native/engine/android这个module
project(':cocos').projectDir    = new File(NATIVE_DIR, 'app')
if(PROP_ENABLE_INSTANT_APP == "true" || PROP_ENABLE_INSTANT_APP == "yes") {include ':instantapp'project(':instantapp').projectDir   = new File(NATIVE_DIR, 'instantapp')
}rootProject.name = "cocos"

用Android Studio打开proj项目。Cocos 3.3使用的是Gradle 4.1.0,可使用默认的设置进行编译。如果使用高版本Gradle的话,可能会报错,一些js文件没有打包进去,这个网上有修改方法,可自行查阅。

编译成功后,在Cocos项目目录下会多出一个native目录,“D:\Source\cocos\native”,Cocos从3.0开始,做了代码和配置的分离,将一部分代码和配置放入源码管理,位于项目目录下的 native\engine\当前构建的平台名称 文件夹中(例如native\engine\android)。

在“D:\Source\cocos\native\engine”下有两个目录,“android”目录是android代码,“common”目录是CMake相关的文件,用于编译C++用。

Cocos官方建议在这里进行二次开发,添加自己的业务和组件,这里的代码其实是作为Module被“build\android-001\proj”引入的,如果你已经有一个android工程,那么在这里开发绝对不是好的方法。

三、嵌入

先保证上面操作正常,“build\android-001\proj”编译通过。接下来新建一个Android工程。

首选在gradle.properties中定义对应的路径等变量。可复制Cocos工程下的proj中的gradle.properties内容。

接下来设置setting.gradle文件内容。

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()jcenter() // Warning: this repository is going to shut down soon}
}
rootProject.name = "My Application"
include ':app'
include ':libcocos'
project(':libcocos').projectDir     = new File(COCOS_ENGINE_PATH,'cocos/platform/android/libcocos2dx')
include ':libservice'

“:libcocos”的设置同上,“:libservice”可以import到当前项目的目录下。从“D:\Source\cocos\build\android-001\proj\libservice”下引入,也可以像“:libcocos”一样设置projectDir。

将Cocos项目编译后产生的“D:\Source\cocos\native\engine”目录下的“common”目录拷贝到Android项目下。

将“D:\Source\cocos\native\engine\android\jni”拷贝到Android项目下。

将“D:\Source\cocos\native\engine\android\CMakeLists.txt”拷贝到Android项目下。

因为相对于“D:\Source\cocos\native\engine”中,common目录的相对路径放生了变化,所以需要修改一下“CMakeLists.txt”内容。

将所有
${CMAKE_CURRENT_LIST_DIR}/../common
改为
${CMAKE_CURRENT_LIST_DIR}/common

将Cocos安装目录下的“D:\Program Files\CocosDashboard\resources\.editors\Creator\3.3.0\resources\resources\3d\engine-native\cocos\platform\android\java\libs”目录中的文件拷贝到Android项目中的libs目录下,然后在build.gradle文件中加入如下文字。

    implementation files('libs\\com.android.vending.expansion.zipfile.jar')implementation files('libs\\okhttp-3.12.7.jar')implementation files('libs\\okio-1.15.0.jar')

修改build.gradle文件。主要是externalNativeBuild和sourceSets。

plugins {id 'com.android.application'
}
RES_PATH = RES_PATH.replace("\\", "/")
COCOS_ENGINE_PATH = COCOS_ENGINE_PATH.replace("\\", "/")
android {compileSdk 32defaultConfig {applicationId "com.mh.myapplication"minSdk 21targetSdk 32versionCode 1versionName "1.0"externalNativeBuild {cmake {version "3.10.2"targets "cocos"arguments "-DRES_DIR=${RES_PATH}", "-DCOCOS_X_PATH=${COCOS_ENGINE_PATH}", "-DANDROID_STL=c++_static", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_LD=gold"cppFlags "-frtti -fexceptions -fsigned-char"}ndk { abiFilters PROP_APP_ABI.split(':') }}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}sourceSets.main {java.srcDirs "../src", "src"res.srcDirs "../res", 'res'jniLibs.srcDirs "../libs", 'libs'assets.srcDir "${RES_PATH}/assets"jniLibs {}}externalNativeBuild {cmake {path "../CMakeLists.txt"buildStagingDirectory "${RES_PATH}/proj/build"}}
}dependencies {implementation fileTree(dir: '../libs', include: ['*.jar','*.aar'])implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])implementation project(':libservice')implementation project(':libcocos')implementation 'androidx.appcompat:appcompat:1.4.1'implementation 'com.google.android.material:material:1.5.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.3'implementation files('libs\\com.android.vending.expansion.zipfile.jar')implementation files('libs\\okhttp-3.12.7.jar')implementation files('libs\\okio-1.15.0.jar')testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

这里路径指向了Cocos项目以及Cocos的安装路径,这些内容可以拷贝出来,放到项目中也是可以的。

四、运行

添加权限和meta-data。

    <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><meta-dataandroid:name="android.app.lib_name"android:value="cocos" />

在MainActivity中添加一个按钮,新建一个TestActivity继承自CocosActivity。

public class TestActivity extends CocosActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKWrapper.shared().init(this);}
}
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setClass(MainActivity.this,TestActivity.class);startActivity(intent);}});}
}

这样运行,点击按钮,就可以启动Cocos的画面了。

Android项目中嵌入Cocos游戏项目相关推荐

  1. ANDROID项目中嵌入高德地图(一)配置环境+显示地图

    最近在做项目中嵌入高德地图的工作,觉得有必要记录一下嵌入过程,虽然高德官方给说明文档了,但有写并不明确需要去查类,查资料,再此把过程记录一下. 一.显示地图 1.配置AndroidManifest.x ...

  2. android使用webview上传文件,Android项目中如何在webview页面中上传文件

    Android项目中如何在webview页面中上传文件 发布时间:2020-11-26 15:56:27 来源:亿速云 阅读:68 作者:Leah 本篇文章为大家展示了Android项目中如何在web ...

  3. Android项目中创建编译期的注解

    ==注解 生命周期为RetentionPolicy.RUNTIME,可在运行时通过反射获取. 生命周期为RetentionPolicy.CLASS, 编译期处理的注解,可以使用APT(Annotati ...

  4. Android项目中出现的Plugin with id ‘kotlin-android‘ not found解决方法

    Android项目中出现的Plugin with id 'kotlin-android' not found解决方法 参考文章: (1)Android项目中出现的Plugin with id 'kot ...

  5. flutter打开android界面,在已有Android项目中使用Flutter

    实现效果,在已存在的android项目中接入flutter,即android调用开启flutter页面(使用android打开flutter的指定页面),flutter调用原生android方法 步骤 ...

  6. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  7. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  8. XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

  9. android项目中导入opencv库,将第二个JNI库包含到我的Android项目(OpenCV)后...

    我试图将OpenCV添加到我现有的Android项目中,但是在合并它们时遇到了以下错误: 12-08 16:15:21.951 22052-22052/ai.inbi.face_recognition ...

  10. 在原有Android项目中快速集成React Native

    前言 对于现有的大多数项目来说都不是从头构建的,而要在原有项目的基础上引入React Native则肯定和用react-native init xxx创建工程不同.因此下面就来说下具体操作.不过在真正 ...

最新文章

  1. python播放视频
  2. Docker for Linux 安装
  3. 【POJ - 1330】Nearest Common Ancestors(lca,模板题)
  4. cad细等线体不显示_CAD图纸乱码、钢筋符号不显示解决办法(内含万能字体)
  5. 深度学习-KNN,K近邻算法简介
  6. 有戏!低于4000的iPhone SE2买不买?
  7. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar
  8. 错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
  9. day02数据类型方法整理
  10. nupkg 本地安装_使用Nuget安装离线包nupkg
  11. html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
  12. 434个H5游戏源码
  13. 非常精美的唐诗,无与伦比哦1
  14. Unity3d 真实的植物渲染
  15. GTP-3算法是一种“暴力美学”的胜利
  16. 嵌入式开发-服务器(一) MQTT服务器
  17. 江南春:30年,我用1000亿,换来这99句话
  18. 2021计算机应用基础形考作业1试题答案,国家开放大学计算机应用基础》形考作业二答案...
  19. 六、Web服务体系结构
  20. 隐私计算头条周刊(2.13-2.19)

热门文章

  1. 面对面的办公室——纪念艾伦•图灵百年诞辰
  2. 阿里矢量图标的三种使用方式整理(uniapp)
  3. SLAM和SFM有什么区别?
  4. 普通学校,非科班,从电脑小白到大厂offer的自学之路
  5. 外行也看得懂!了解量子计算的奇迹
  6. 界面开发控件DotNetBar for WPF教程:MobileRibbon快速入门指南
  7. urb分析,usb_fill_bulk_urb函数理解
  8. SAP HANA - 企业管理软件数据库表结构完整文档
  9. html5在线+网站,15个在线HTML5网页设计工具
  10. vs2013 MFC入门