使用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项目,目录如下:
使用Android Studio来为Cocos2dx-lua项目打包_第1张图片

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

(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 Filea>

这个错误的解决方式是:在我们当前这个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打开窗口,如下图:

使用Android Studio来为Cocos2dx-lua项目打包_第3张图片

在红框内配置我们的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项目可以完整地运行在我们的手机上了!如下图:
使用Android Studio来为Cocos2dx-lua项目打包_第4张图片

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

你可能感兴趣的:(Cocos2d-x)