android嵌入cocos进行二次开发
首先配置
As版本: 2021.1.1.11
ndk: 19.2.5345600
target: 安卓33
安卓api区间: 23~33
jdk1.8.0_361 ( jre1.8.0_361)
接入的版本得跟cocos打出来的包版本差不多才能进行相互移植
一,Android方面的环境
这个是Cocos安装配置原生开发环境 sdk下载
https://docs.cocos.com/creator/2.4/manual/zh/publish/setup-native-development.html?h=%E5%AE%89%E5%8D%93
androidNDK下载
以及java jdk的安装以及下载
完成之后如果你是7.0的Gradle 需要换成4.x.x的gradle 不然会有很多问题 我尝试了三次换成4.x多的配置之后就成功了
到此我们android原生方面的环境就配置好了
二,cocos的环境搭建
下来对cocos项目进行拉取
下载cocos开发软件: https://www.cocos.com/
我的cocos环境版本是2.4.10
项目打开之后会让你选择版本点击那个版本就直接进去了
点击项目->构建发布->进入构建发布弹框
下来点击构建就可以了
点击三个点就能找到自己刚刚构建的项目
这个就是刚才构建的项目
可以使用android studio运行下面这个proj.android-studio这个项目
运行完成之后就能看到你的游戏
cocos的环境也准备完成
三,对cocos打的android项目迁移进入自己创建的项目
1,将我们构建的cocos项目的
cocos2d-x复制到我们创建的android项目的根目录下面
2,打开settings.gradle 然后将 礼包cocos2dx进行依赖
rootProject.name ="DesktopMeow"
include':app'
include':libcocos2dx'
project(':libcocos2dx').projectDir =new File('cocos2d-x\\cocos\\platform\\android\\libcocos2dx')
3,打开local.properties文件 对sdk跟ndk 跟 cocos构建的android项目进行对比
ndk.dir=C\:\\Users\\HXC401\\AppData\\Local\\Android\\Sdk\\ndk\\19.2.5345600
sdk.dir=C\:\\Users\\HXC401\\AppData\\Local\\Android\\Sdk
4,gradle.properties 文件跟cocos构建的android项目对比复制
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
# cocos ???
PROP_COMPILE_SDK_VERSION=33
PROP_MIN_SDK_VERSION=16
PROP_TARGET_SDK_VERSION=33
PROP_BUILD_TOOLS_VERSION=28.0.3
#PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64
PROP_APP_ABI=armeabi-v7a:arm64-v8a
#RELEASE_STORE_FILE=C\:/ProgramData/cocos/editors/Creator/2.4.10/resources/static/build-templates/native/debug.keystore
#RELEASE_STORE_PASSWORD=123456
#RELEASE_KEY_ALIAS=debug_keystore
#RELEASE_KEY_PASSWORD=123456
#android.injected.testOnly=false
我进行了注释以及不必要的都删除掉了
5,将 build-cfg.json文件复制过来了并修改里面的路径(我不知道这个文件干嘛的看到有就复制过来了 有小伙伴知道的可以评论告诉我)
修改之后的:
{ "ndk_module_path": [ "./cocos2d-x", "./cocos2d-x/cocos", "./cocos2d-x/external" ], "copy_resources": []}
6,打开根目录下的build.gradle文件增加一行代码
7,app下面增加jni文件
根目录下面增加jni文件
对复制过来的跟目录下的CocosAndroid.mk文件进行修改
增加两个jni文件
8,打开app下的build.gradle文件
import org.apache.tools.ant.taskdefs.condition.Os
plugins{
id'com.android.application'
id'org.jetbrains.kotlin.android'
}
android{
compileSdk32
defaultConfig{
applicationId"com.example.desktopmeow"
minSdk23
targetSdk32
versionCode1
versionName"1.0"
testInstrumentationRunner"androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild{
ndkBuild{
if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') !=0) {
// skip the NDK Build step if PROP_NDK_MODE is none
targets'cocos2djs'
arguments'NDK_TOOLCHAIN_VERSION=clang'
def module_paths = [project.file("../cocos2d-x"),
project.file("../cocos2d-x/cocos"),
project.file("../cocos2d-x/external")]
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
arguments'NDK_MODULE_PATH=' + module_paths.join(";")
}else {
arguments'NDK_MODULE_PATH=' + module_paths.join(':')
}
arguments'-j' + Runtime.runtime.availableProcessors()
}
}
ndk{
abiFilters PROP_APP_ABI.split(':')
}
}
}
sourceSets{
main{ jniLibs.srcDirs = ['libs']}
}
packagingOptions{
exclude'META-INF/proguard/coroutines.pro'
exclude'META-INF/proguard/okhttp3.pro'
}
externalNativeBuild{
ndkBuild{
if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') !=0) {
// skip the NDK Build step if PROP_NDK_MODE is none
path"jni/Android.mk"
}
}
}
signingConfigs{
release{
if (project.hasProperty("RELEASE_STORE_FILE")) {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
}
buildTypes{
release{
debuggablefalse
jniDebuggablefalse
renderscriptDebuggablefalse
minifyEnabledtrue
shrinkResourcestrue
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.release
}
externalNativeBuild{
ndkBuild{
arguments'NDK_DEBUG=0'
}
}
}
debug{
debuggabletrue
jniDebuggabletrue
renderscriptDebuggabletrue
externalNativeBuild{
ndkBuild{
arguments'NDK_DEBUG=1'
}
}
}
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions{
jvmTarget ='1.8'
}
}
android.applicationVariants.all{ variant->
delete"${buildDir}/intermediates/merged_assets/"
variant.mergeAssets.doLast{
def sourceDir ="${buildDir}/../../.."
copy{
from"${sourceDir}"
include"assets/**"
include"res/**"
include"src/**"
include"jsb-adapter/**"
into outputDir
}
copy{
from"${sourceDir}/main.js"
from"${sourceDir}/project.json"
into outputDir
}
}
}
dependencies{
implementation'androidx.core:core-ktx:1.3.1'
implementation'androidx.appcompat:appcompat:1.2.0'
implementation'com.google.android.material:material:1.4.0'
implementation'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation'junit:junit:4.13.2'
androidTestImplementation'androidx.test.ext:junit:1.1.3'
androidTestImplementation'androidx.test.espresso:espresso-core:3.4.0'
implementation fileTree(dir:'../libs',include: ['*.jar','*.aar'])
implementation fileTree(dir:'libs',include: ['*.jar','*.aar'])
implementation fileTree(dir:"../cocos2d-x/cocos/platform/android/java/libs",include: ['*.jar'])
implementation project(':libcocos2dx')
}
基本上就是复制过来然后修改路径 下来我说一下哪些地方需要修改
第一个修改下面这个路径的时候需要你把cocos下面的一些文件复制到你的项目上一层文件或者你写绝对路径指到你的本地cocoso项目目录也行
这个直接找你那个cocos2d-x的文件路径就行了
99,下来设置清单文件
将Activity以及sdkWrapper复制过来就可以直接运行了