(轉載)使用Android Studio來爲Cocos2dx-lua項目打包

從事Android開發已經有一段時間了,本身的開發IDE也從Eclipse轉到了Android Studio。可是,需求上要求我把本身的Android Studio項目集成到一個Eclipse 下的ndk 項目上,在集成的過程當中,我有了一些值得分享的體驗,在這裏記錄下來。android

項目需求

在本身從事Android開發以前,本身作的是Cocos2dx-lua項目的開發工做。Cocos2dx-lua是一個跨平臺的引擎,主要的遊戲邏輯都是腳本,被當作資源放置在assets目錄下。同時對於Android平臺來講,這個Cocos2dx-lua項目就是一個ndk項目,而且它的環境是在eclipse下的。而須要與之集成的Android項目則是一個Android Studio下的普通Android project。直接點說,我在這裏作的就是在把咱們的Cocos2dx-lua的項目由Eclipse遷移到Android Studio底下。c++

步驟

(1)首先,咱們先用Cocos2dx-lua 的player 新建一個quick項目(我這裏說的Cocos2d-x項目也就是quick-cocos2d-x 3.3版本),它會自動生成一些Android Eclipse項目。咱們選擇其中的proj.android_no_anysdk項目來導入到咱們的Android Studio中。bash

(2)而後,打開proj.android_no_anysdk目錄下的build_native.bat文件,編譯咱們的引擎代碼,生成供Android調用的so文件等須要與ndk部分作交互的文件。編譯成功以後,咱們能夠在Eclipse中導入咱們的項目,並將項目打包在手機上,咱們能夠看見親切的「Hello World」。 
這個時候它是一個Eclipse項目,目錄以下: 
這裏寫圖片描述app

(3)可是這樣還僅僅是Eclipse項目,而使用Android Studio開發Android項目是大勢所趨,因此後面要作的就是把項目轉變爲一個Android Studio項目。首先咱們打開Android Studio,選擇File->New->Import Project,導入咱們剛纔的proj.android_no_anysdk這個Eclipse項目。而後會有一連串的窗口,點擊Next便可,它們會爲咱們在一個新的目錄建立一個全新的Android Studio項目,也就是Android Studio爲咱們作的轉化。 
這個時候的項目目錄是: 
這裏寫圖片描述eclipse

(4)這個時候項目報了一個錯誤,以下:ide

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,發現錯誤就已經消失了。gradle

(5)因爲咱們的項目已經顯示build successful了。咱們來嘗試debug一下,看看能不能把項目經過Android Studio安裝到手機上去。結果,運行發現了這個錯誤:ui

: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打開窗口,以下圖:lua

這裏寫圖片描述

在紅框內配置咱們的ndk目錄便可。spa

(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目錄下操做,因此並非最優的方式。在這裏記錄一下也是爲了方便本身查閱,若是有什麼改進的意見,但願能夠告知我~

相關文章
相關標籤/搜索