Mac搭建cocos2dx+Android studio開發環境以及AnySDK的集成


配置環境:

  1. mac osx 10.12.6
  2. cocos2dx 3.14
  3. Android studio 2.3

目標:

在mac上配置cocos Android開發環境,接入AnySDK

配置:

1、安裝java jdk brew cask install java

配置環境之前搜過cocos+android studio ,有人說使用Android studio配置最新版的jdk8有已知的存在的問題,所以需要安裝舊版的jdk(但最終證明並沒有問題,這里提供mac安裝管理多個版本jdk的方法):使用homebrew 安裝
brew tap caskroom/versions && brew cask install java6

使用jenv管理多個jdk版本:

  1. 安裝jenv:brew install jenv
  2. 添加配置:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

這里根據自己的使用的shell來修改,如我用的zsh,所以對應的就是.zshrc

  1. 添加管理的jdk:
sudo jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
sudo jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  1. 刪除對於的版本:
    jenv remove 名

  2. 指定當前使用版本:jenv shell 1.6
    更多配置具體可參考csdn博文
    以及官方文檔

2、安裝Android-studio並且按照提示下載AndroidSDK【不需要使用shadow代理】

3、新建cocos項目
terminal 中使用:
cocos new androidDemo -p cn.bignerd.www -l lua -d xxx
4、安裝Android studio
安裝Android studio的時候,會提示設置proxy,但其實並不用設定,下面的很多問題都是設置了代理導致的(我使用了shadowsocks),取消設置代理,按照提示配置,下載Android sdk,最新版是Android8.0 api26,可以根據自己的機型情況下載。

5、執行cocos3.14框架文件下的setup.py

  • 設置NDK_ROOT,ndk可以在Android studio -> perference ->sysytem setting -> android SDK -> sdk tools 中下載,下載后設置路徑$HOME/Library/Android/sdk/ndk-bundle
  • 設置ANDROID_SDK_ROOT,$HOME/Library/Android/sdk
  • 設置ANT_ROOT,可以使用homebrew先進行安裝

6、編譯cocos項目
進入的androidDemo的proj.android-studio目錄下使用下面的cocos命令編譯:
cocos compile -p android --android-studio

注:為了可以在命令行的任意位置使用cocos命令,可以將其添加到.zshrc PATH中:
export PATH="$HOME/workspace/cocos2d-x/cocos2d-x- 3.14.1/tools/cocos2d-console/bin"

遇到的問題:

這里出現的第一個問題是:無法找到android命令,這個是因為下載最新版本的Android studio以及最新的sdk,Android SDK tools的版本也是26.0.1,這個版本已經不再支持這個命令,而cocos又依賴這個命令,所以辦法就是降級,下載舊版本的tools覆蓋/Library/Android/sdk目錄的tools內容下載地址

第二個問題:報錯malloc was not declared in this scope,在~/workspace/cocos2d-x/androidDemo/frameworks/runtime-src/proj.android-studio/app/jni 打開Application.mk添加:APP_DEPRECATED_HEADERS := true

第三個問題:提示androd-22sdk不存在,這里cocos生成的項目中指定的sdk版本是Android-22,所以要么下載Android-22sdk(Android studio中直接下載),要么修改proj.android-studio/app/build.gradle,compileSdkVersion與buildToolsVersion為26 與 26.0.0.1,同時要修改的還有androidDemo/frameworks/cocos2d-x/cocos/platform/android/libcocos2dx/build.gradle,修改方法一樣。

第四個問題:使用cocos compile 來編譯項目的原因是android studio 並不能幫助我們編譯cocos的c++代碼,而Android項目的編譯使用的是gradel,但是第一次compile成功並沒有自定執行gradlew命令,所以第二次運行cocos compile這個命令,編譯成功並且自動開始執行gradlew命令

第五個問題:執行gradlew報錯的問題,也是andoid命令不存在,解決辦法是刪除build.gradle中的android模塊就可以了

這里還有一個問題卡了很久,就是最初設置了代理,所以在終端也啟用的代理,執行gradle時會根據build.gradle中的dependencies中的classpath從jcenter下載依賴。

在完成https://services.gradle.org/distributions/文件的下載后會報錯,就是從jcenter下載依賴時,如圖:
jcenter

通過報錯可以看到請求的是127.0.0.1:1080,轉發到shadow來訪問的,因為之前在Android studio設置了代理,所在在proj.android-studio/gradle.properties中有代理的設置:

systemProp.https.proxyPort=1080
systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080

注釋掉之后可以正常訪問,因為jcenter也是不需要代理就可以直接訪問的。

7、Android studio 導入cocos項目
打開Android studio 直接選擇open exist android studio project,打開的過程會執行gradle,開始卡在了gradle resolve classpath

1>可能是網絡原因,導致classpath的內容gradle無法下載,之前一直配置使用代理(shadow+android studio http代理),這些全部關掉,可以提高下載速度

2>還有可能是gradle版本的問題,gradle的version(gradle-wrapper.properties)中與gradle.build中classpath中的版本。默認cococs生成的項目分別是2.4-all與1.3.0,按照Android studio2.3要求升級為3.3.-all與2.3.3

然后retry gradle報錯:

Gradle sync failed: Cannot create directory /Users/xxxx/workspace/cocos2d-x/androidDemo/frameworks/cocos2d-x/cocos/platform/android/libcocos2dx/build/intermediates/incremental/packageDebugAndroidTest/zip-cache
				Consult IDE log for more details (Help | Show Log)

添加權限

8、Android studio虛擬機

cocos默認編譯的架構是armeabi,但是android studio的虛擬機運行速度快的都是x86指令的,所以可以重新編譯:cocos compile -p android --android-studio --app-abi x86

配置anysdk

anysdk 官網給出的lua 快速集成指南中的示例是proj.android的,所以跟proj.android-studio目錄結構有些不同:
1、獲取 AnySDK Framework 這個不像ios,目錄與文檔介紹一致

2、拷貝 AnySDK Framework STL 庫到 protocols 文件夾,在proj.android-studio/app下面新建文件夾protocols

3、將 AnySDK_Framework_Lua/framework/protocols_gnustl_static 目錄下的 res 文件里的資源,拷貝到 proj.android-studio/app/res 目錄下,注意選擇合並,避免文件覆蓋。

4、將 AnySDK_Framework_Lua/3.x 目錄下的文件拷貝到 frameworks/runtime-src/Classes 目錄下

5、在 proj.android-studio/app 目錄下新建 libs 文件夾,然后將 proj.android-studio/app/protocols/android 目錄下的 libPluginProtocol.jar 移到該目錄下。

6、編輯 Android.mk 文件(按文檔即可,部分需要修改)

  1. $(call import-add-path,$(LOCAL_PATH)/../)
  2. 在 LOCAL_SRC_FILES 新增 Lua 綁定的 cpp 文件:anysdkbindings.cpp 和 anysdk_manual_bindings.cpp
  3. 新增 static lib LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic
  4. 新增modules $(call import-module,protocols/android)

7、添加設置 javaVM 代碼修改main.cpp文件
\#include "PluginJniHelper.h" 這里要寫完整的路徑所以是:#include "../../protocols/android/PluginJniHelper.h"

8、配置 AndroidManifest.xml 添加框架需要的權限(按文檔)

9、在 JAVA 層初始化 AnySDK Framework 框架
這里全部復制文檔中的代碼沒有問題

10、配置 AnySDK Lua 文件到項目中(按文檔執行)

全部執行完上面的操作,運行cocos compile -p android報錯:

無法找到AgentManager等,查詢發現是在AppDelegate中引入了anysdkbings.h,然后anysdkbingds.cpp中引入了AgentManager.h等頭文件,而這些頭文件都在我們添加的protocols\include文件夾,所以修改Android.mk文件的LOCAL_C_INCLUDES

# 添加include文件夾以解決appAgent找不到的錯誤
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes \
$(LOCAL_PATH)/../protocols/android \
$(LOCAL_PATH)/../protocols/include

這些頭文件定義的具體實現應該是在PluginProtocolStatic

11、編譯運行項目到魅族手機、提示不兼容

這里是因為之前的疏忽Application.mk中APP_ABI 多 添加了一個x86,所以cocos編譯的時候就出現了部分x86編譯的內容(不知道具體原因)

12、編譯運行閃退

圖

google的結果並沒有完全匹配這個問題的、有的說是ndk版本的問題、有的說Application.mk中指定api版本APP_PLATFORM := android-10(是否有用待測試),有的說是手機Android版本有關,所以手機是Android6.0,我用Android-23 sdk重新編譯了一下項目,這里注意不要忘了修改app/project.properties中的target版本,編譯成功。

13、anysdk打包

使用cocos compile 生成的apk文件打包,在手機安裝運行還是失敗,然后使用Android studio build apk再使用anysdk打包安裝到手機正常運行

14、魅族手機的幾個問題:

  1. 調試開啟開發者模式:關於手機點擊系統版本7次
  2. 允許安裝外來usb應用:手機管家->權限管理->usb安裝管理->允許
  3. 文件卸載殘留問題:訪客模式進入可顯示出未卸載干凈的app
  4. Android studio 中顯示log cat以便調試lua文件中打印的信息:開啟設置-輔助功能-開放者選項-性能優化-高級日志輸出-全部允許輸出

剛剛接觸cocos,相較於ios工程,Android工程環境搭建過程坑頗多,記錄分享給你,也許能對你有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM