Cocos2d-x學習之創建Android工程和編譯

安裝好,相應的環境之後,我們便可以開始創建cocos2d-x 的android 工程了

進入cocs2d-x目錄,用文本編輯器打開create-android-project.bat(在windows 7上如果正常雙擊,可能創建時有些文件的權限不足,導致創建工程不成,可以在此文件的第一行加上cd /d %~dp0,然後右鍵以管理員身份運行)

找到以下幾個定義:

複製代碼
@echo off
:: This script is used to create an android project.
:: You should modify _ANDROIDTOOLS _CYGBIN _NDKROOT to work under your environment.
:: Don't change it until you know what you do.
cd /d %~dp0
setlocal

:: Check if it was run under cocos2d-x root
if not exist "�%\create-android-project.bat" echo Error!!! You should run it under cocos2dx root & pause & exit 2    

if not exist "%~dpn0.sh" echo Script "%~dpn0.sh" not found & pause & exit 3

:: modify it to work under your environment     
set _CYGBIN=D:\cygwin\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & pause & exit 4

:: modify it to work under your environment
set _ANDROIDTOOLS=E:\android-sdk-windows\tools
if not exist "%_ANDROIDTOOLS%" echo Couldn't find android sdk tools at "%_ANDROIDTOOLS%" & pause & exit 5

:: modify it to work under your environment
set _NDKROOT=E:\android-ndk-r8-windows\android-ndk-r8
if not exist "%_NDKROOT%" echo Couldn't find ndk at "%_NDKROOT%" & pause & exit 6

:: create android project
set /P _PACKAGEPATH=Please enter your package path. For example: org.cocos2dx.example:
set /P _PROJECTNAME=Please enter your project name:
if exist "�%\%_PROJECTNAME%" echo "%_PROJECTNAME%" exists, please use another name & pause & exit 7
echo "Now cocos2d-x suppurts Android 2.1-update1, 2.2, 2.3 & 3.0"
echo "Other versions have not tested."
call "%_ANDROIDTOOLS%\android.bat" list targets
set /P _TARGETID=Please input target id:
set _PROJECTDIR=�%\%_PROJECTNAME%

echo Create android project
call "%_ANDROIDTOOLS%\android.bat" create project -n %_PROJECTNAME% -t %_TARGETID% -k %_PACKAGEPATH% -a %_PROJECTNAME% -p %_PROJECTDIR%
     
:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn0.sh"') do set _CYGSCRIPT=%%A

:: Resolve current dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "�%"') do set _CURRENTDIR=%%A

:: Resolve ndk dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%_NDKROOT%"') do set _NDKROOT=%%A
     
:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\bash --login "%_CYGSCRIPT%" %_CURRENTDIR% %_PROJECTNAME% %_NDKROOT% %_PACKAGEPATH% "windows"

pause
複製代碼

將_CYGBIN=設置爲cycgwin\bin安裝的的絕對路徑。

將_ANDROIDTOOLS設置爲android sdk 的tools絕對路徑

將_NDKROOT設置爲android ndk的絕對路徑

修改完畢,保存後

雙擊create-android-project.bat開始工程創建嚮導

首先是輸入包名(建議按照android的命名規則),如com.android.test

然後輸入工程名稱(注意不要輸入已有的文件夾的名字,如果同名,會被覆蓋掉的),如testandroid,如下圖:

wps_clip_image-15949

然後選擇target id,

wps_clip_image-14424

其會列出機器上安裝的所有版本的sdk,我們選擇6,即2.3.2的sdk.

wps_clip_image-2448

進入g:\cocos2d-x目錄發現多了一個名爲testandroid的目錄,裏面包含三個目錄

wps_clip_image-19661

其中Classes:是存放默認工程的C++文件

proj.android 是android的eclipse工程項目

Resources 資源文件

下來我們開始編譯剛創建的testandroid項目

打開cygwin,進入到testandroid/proj.android目錄,輸入 ./build_native.sh 開始編譯如下圖:

wps_clip_image-16275

執行完畢,發現編譯出錯,如下圖:

wps_clip_image-20029

發現報的是文件 Permission denied 錯誤,考慮的是windows 7的環境,我們看下jni/helloword/mai.cpp的文件的權限。

結果在進jni目錄時,邊報無權訪問了,如下圖:

wps_clip_image-22527

我們不管,因爲上面報的是具體文件(main.cpp)文件無權限,而非文件夾,說明編譯器已經能訪問到文件夾裏面了,觀察下main.cpp的文件權限:

wps_clip_image-6506

發現當前用戶(ming)都沒有讀寫的權限,編譯當然報錯了。我們給它賦個完全控制的權限,如下:

wps_clip_image-31043

點擊應用,和確定,再次執行./build_native.sh

wps_clip_image-27868

還是文件權限的問題,我們按之前的方法,重新賦權一下,再次編譯,如果過程中發現還有類似的問題,賦權即可,我爲了省麻煩,寫了個快速賦權的註冊表文件內容如下:

複製代碼
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\runas]
@="管理員取得所有權"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\exefile\shell\runas2]
@="管理員取得所有權"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\exefile\shell\runas2\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="管理員取得所有權"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
複製代碼

wps_clip_image-29719 以管理員身份運行這個文件後,就可以爲windows 7右鍵添加取得所有權的菜單。如下圖:

wps_clip_image-3967

如果再次出現有訪問權限的問題,右鍵點擊下目錄,選擇管理員取得所有權即可。

最後編譯成功截圖如下:

wps_clip_image-5538

編譯成功之後,會直接在testandroid\proj.android\libs\armeabi這個目錄底下生成so文件(libgame.so)

編譯完畢,下來就是在eclipse裏面編譯成apk文件,並安裝運行一把。

1、將剛編譯完的工程導入到eclipse中。

以管理員身份打開eclipse(因爲之前都是以管理員身份獲取的權限的,否則會出現編譯時權限有問題的),選擇FILE->New->Android Project,然後選擇如下:

wps_clip_image-17112

點擊next,選擇Build Target,如下:

wps_clip_image-25156

運行該工程,右鍵該工程,選擇Run as ->android application(從cocos2d-2.0-rc0a-x-2.0起,支持了open gl es2.0,默認的工程創建是要求運行於open gl es2.0上的,即目前模擬器還未支持,所以必須用真機去調試)

如下:

wps_clip_image-7431

發佈了37 篇原創文章 · 獲贊 19 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章