使用Android Studio来为Cocos2dx-lua项目打包

Posted YuNansen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Android Studio来为Cocos2dx-lua项目打包相关的知识,希望对你有一定的参考价值。

从事android开发已经有一段时间了,自己的开发IDE也从Eclipse转到了Android Studio。但是,需求上要求我把自己的Android Studio项目集成到一个Eclipse 下的ndk 项目上,在集成的过程中,我有了一些值得分享的体验,在这里记录下来。

项目需求

在自己从事Android开发之前,自己做的是Cocos2dx-lua项目的开发工作。Cocos2dx-lua是一个跨平台的引擎,主要的游戏逻辑都是脚本,被当做资源放置在assets目录下。同时对于Android平台来说,这个Cocos2dx-lua项目就是一个ndk项目,并且它的环境是在eclipse下的。而需要与之集成的Android项目则是一个Android Studio下的普通Android project。直接点说,我在这里做的就是在把我们的Cocos2dx-lua的项目由Eclipse迁移到Android Studio底下。

步骤

(1)首先,我们先用Cocos2dx-lua 的player 新建一个quick项目(我这里说的Cocos2d-x项目也就是quick-cocos2d-x 3.3版本),它会自动生成一些Android Eclipse项目。我们选择其中的proj.android_no_anysdk项目来导入到我们的Android Studio中。

(2)然后,打开proj.android_no_anysdk目录下的build_native.bat文件,编译我们的引擎代码,生成供Android调用的so文件等需要与ndk部分做交互的文件。编译成功之后,我们可以在Eclipse中导入我们的项目,并将项目打包在手机上,我们可以看见亲切的“Hello World”。
这个时候它是一个Eclipse项目,目录如下:

(3)但是这样还仅仅是Eclipse项目,而使用Android Studio开发Android项目是大势所趋,所以后面要做的就是把项目转变为一个Android Studio项目。首先我们打开Android Studio,选择File->New->Import Project,导入我们刚才的proj.android_no_anysdk这个Eclipse项目。然后会有一连串的窗口,点击Next即可,它们会为我们在一个新的目录创建一个全新的Android Studio项目,也就是Android Studio为我们做的转化。
这个时候的项目目录是:

(4)这个时候项目报了一个错误,如下:

Error:(12, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
<a href="openFile:F:\\android\\home_cocos\\app\\build.gradle">Open File</a>

这个错误的解决方式是:在我们当前这个Android Studio项目的根目录下新建gradle.properties文件,其中的内容是android.useDeprecatedNdk=true 即可。这个时候同步我们项目,然后点击Try Again,发现错误就已经消失了。

(5)由于我们的项目已经显示build successful了。我们来尝试debug一下,看看能不能把项目通过Android Studio安装到手机上去。结果,运行发现了这个错误:

:app:compileDebugNdk FAILED
Error:Execution failed for task ':app:compileDebugNdk'.
> NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\\\\ndk rather than C:\\ndk)
Information:BUILD FAILED

通过错误的log我们可以看出,出现这个错误的原因是我们没有配置NDK的路径。
解决的方法是:
点击File->Project Structure打开窗口,如下图:

在红框内配置我们的ndk目录即可。

(6)解决了上面的问题,我们再执行一下debug,希望编包在手机上面跑,之前的错误消失了,但是又有新的问题冒了出来。错误如下:

Error:F:\\android\\home_cocos\\app\\src\\main\\jni\\hellolua\\main.cpp:1:25: fatal error: AppDelegate.h: No such file or directory
compilation terminated.
make.exe: *** [F:\\android\\home_cocos\\app\\build\\intermediates\\ndk\\debug\\obj/local/armeabi-v7a/objs/cocos2dlua_shared/F_\\android\\home_cocos\\app\\src\\main\\jni\\hellolua\\main.o] Error 1

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\\android-ndk-r9d\\android-ndk-r9d\\ndk-build.cmd'' finished with non-zero exit value 2

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

F:\\android\\home_cocos\\app\\src\\main\\jni\\hellolua\\main.cpp:1:25: fatal error: AppDelegate.h: No such file or directory
:app:compileDebugNdk

这里显示无法找到我们的某些c++文件,在这里delegate文件是我们的一个入口文件,这里显示找不到,那么就无法把我们的库文件和Android原生代码相关联,导致无法编包。

解决方法:
打开我们当前目录下的build.gradle文件(不是整个项目的gradle文件),把如下代码

sourceSets.main 
      jniLibs.srcDir 'src/main/libs'
      jni.srcDirs = [] //disable automatic ndk-build call

贴在我们的gradle文件中,完整的build.gradle文件应该如下:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 19
    buildToolsVersion "23.0.2"

    defaultConfig 
        applicationId "com.ci123.jiayuanbao.home"
        minSdkVersion 9
        targetSdkVersion 9

        ndk 
            moduleName "cocos2dlua_shared"
        

        sourceSets.main 
            jniLibs.srcDir 'src/main/libs'
            jni.srcDirs = [] //disable automatic ndk-build call
        
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        
    

这个时候再点击bebug,发现我们的cocos-lua项目可以完整地运行在我们的手机上了!如下图:

其实我并没有太多的ndk项目的开发经验,但是这个步骤是我自己一步一步测出来的,我觉得可以绕过很多弯路,比如我用Eclipse生成的gradle导入到Andorid Studio中,死活找不到so库文件这样的问题。因为在这里没有自己的批处理文件,所以可能涉及到引擎的c++代码修改的话可能还要在Eclipse目录下操作,所以并不是最优的方式。在这里记录一下也是为了方便自己查阅,如果有什么改进的意见,希望可以告知我~

以上是关于使用Android Studio来为Cocos2dx-lua项目打包的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android Studio 查看共享首选项文件?

Android Studio 设计选项卡灰显

您可以在单元测试项目中使用 Visual Studio 数据库项目来为功能测试设置一个空数据库吗?

如何使用cocos2d

Android Studio 3.0下创建menu布局文件的图例

cocos2d Android中的CCTableView