当前位置:   article > 正文

Android项目中嵌入Cocos游戏项目_prop_build_tools_version

prop_build_tools_version

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文件中,定义了一些公共变量,包括目录和版本等信息。

  1. PROP_TARGET_SDK_VERSION=26
  2. # Android Build Tools version that will be used as the compile project
  3. PROP_BUILD_TOOLS_VERSION=30.0.2
  4. # Android Application Name
  5. PROP_APP_NAME=game_test
  6. # Instant App
  7. PROP_ENABLE_INSTANT_APP=false
  8. PROP_NDK_PATH=D:\\Source\\android-ndk-r23b
  9. # Cocos Engine Path
  10. COCOS_ENGINE_PATH=D:/Program Files/CocosDashboard/resources/.editors/Creator/3.3.0/resources/resources/3d/engine-native
  11. # Res path
  12. RES_PATH=D:/Source/cocos/build/android-001
  13. # Native source dir
  14. NATIVE_DIR=D:/Source/cocos/native/engine/android
  15. # Application ID
  16. APPLICATION_ID=com.cocos.android
  17. # List of CPU Archtexture to build that application with
  18. # Available architextures (armeabi-v7a | arm64-v8a | x86 | x86_64)
  19. # To build for multiple architexture, use the `:` between them
  20. # Example - PROP_APP_ABI=arm64-v8a
  21. 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自己的目录中。

  1. include ':libcocos',':libservice',':cocos'
  2. //这个就是指向了Cocos安装目录中的libcocos2dx
  3. //如:D:\Program Files\CocosDashboard\resources\.editors\Creator\3.3.0\resources\resources\3d\engine-native\cocos\platform\android\libcocos2dx
  4. project(':libcocos').projectDir = new File(COCOS_ENGINE_PATH,'cocos/platform/android/libcocos2dx')
  5. //这里就是引用的D:/Source/cocos/native/engine/android这个module
  6. project(':cocos').projectDir = new File(NATIVE_DIR, 'app')
  7. if(PROP_ENABLE_INSTANT_APP == "true" || PROP_ENABLE_INSTANT_APP == "yes") {
  8. include ':instantapp'
  9. project(':instantapp').projectDir = new File(NATIVE_DIR, 'instantapp')
  10. }
  11. 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文件内容。

  1. dependencyResolutionManagement {
  2. repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  3. repositories {
  4. google()
  5. mavenCentral()
  6. jcenter() // Warning: this repository is going to shut down soon
  7. }
  8. }
  9. rootProject.name = "My Application"
  10. include ':app'
  11. include ':libcocos'
  12. project(':libcocos').projectDir = new File(COCOS_ENGINE_PATH,'cocos/platform/android/libcocos2dx')
  13. 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”内容。

  1. 将所有
  2. ${CMAKE_CURRENT_LIST_DIR}/../common
  3. 改为
  4. ${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文件中加入如下文字。

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

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

  1. plugins {
  2. id 'com.android.application'
  3. }
  4. RES_PATH = RES_PATH.replace("\\", "/")
  5. COCOS_ENGINE_PATH = COCOS_ENGINE_PATH.replace("\\", "/")
  6. android {
  7. compileSdk 32
  8. defaultConfig {
  9. applicationId "com.mh.myapplication"
  10. minSdk 21
  11. targetSdk 32
  12. versionCode 1
  13. versionName "1.0"
  14. externalNativeBuild {
  15. cmake {
  16. version "3.10.2"
  17. targets "cocos"
  18. 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"
  19. cppFlags "-frtti -fexceptions -fsigned-char"
  20. }
  21. ndk { abiFilters PROP_APP_ABI.split(':') }
  22. }
  23. }
  24. buildTypes {
  25. release {
  26. minifyEnabled false
  27. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  28. }
  29. }
  30. compileOptions {
  31. sourceCompatibility JavaVersion.VERSION_1_8
  32. targetCompatibility JavaVersion.VERSION_1_8
  33. }
  34. sourceSets.main {
  35. java.srcDirs "../src", "src"
  36. res.srcDirs "../res", 'res'
  37. jniLibs.srcDirs "../libs", 'libs'
  38. assets.srcDir "${RES_PATH}/assets"
  39. jniLibs {
  40. }
  41. }
  42. externalNativeBuild {
  43. cmake {
  44. path "../CMakeLists.txt"
  45. buildStagingDirectory "${RES_PATH}/proj/build"
  46. }
  47. }
  48. }
  49. dependencies {
  50. implementation fileTree(dir: '../libs', include: ['*.jar','*.aar'])
  51. implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
  52. implementation project(':libservice')
  53. implementation project(':libcocos')
  54. implementation 'androidx.appcompat:appcompat:1.4.1'
  55. implementation 'com.google.android.material:material:1.5.0'
  56. implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
  57. implementation files('libs\\com.android.vending.expansion.zipfile.jar')
  58. implementation files('libs\\okhttp-3.12.7.jar')
  59. implementation files('libs\\okio-1.15.0.jar')
  60. testImplementation 'junit:junit:4.+'
  61. androidTestImplementation 'androidx.test.ext:junit:1.1.3'
  62. androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  63. }

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

四、运行

添加权限和meta-data。

  1. <uses-permission android:name="android.permission.INTERNET"/>
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  4. <meta-data
  5. android:name="android.app.lib_name"
  6. android:value="cocos" />

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

  1. public class TestActivity extends CocosActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. SDKWrapper.shared().init(this);
  6. }
  7. }
  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
  7. @Override
  8. public void onClick(View view) {
  9. Intent intent = new Intent();
  10. intent.setClass(MainActivity.this,TestActivity.class);
  11. startActivity(intent);
  12. }
  13. });
  14. }
  15. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/132931?site
推荐阅读
相关标签
  

闽ICP备14008679号