一、所需工具
1、Android studio2.3
2、cocos2dx3.10
3、jdk1.8
4、ndkr9d
5、sdk
6、ant
7、python2.7.14
二、配置环境变量
1、sdk配置:
变量名:ANDROID_SDK_ROOT
变量值:C:\android-sdk-windows(这里写你sdk的根目录,不要在后面加上什么platform之类的,就是根目录!)
2、ndk配置:
变量名:NDK_ROOT
变量值:C:\\android-ndk-r10d(这里写你ndk的根目录,注意我上面的两个\\ 目前我还不清楚为什么,但是在Android studio中如果不加上这个的话,就会报错)然后在Path中添加sdk和ndk的变量值就好了,记得末尾加上分号;同时注意不要是拼音的分号。
3、python配置:
安装python,配置python的根目录到环境变量里。
4、cocos2dx配置:
安装cocos2dx,打开文件夹,双击setup.py,如果一闪而过,说明之前的配置成功,如果出错,说明有配置不对,重新配置之前的那些环境变量。
三、创建cocos2dx项目
1、运行 cocos new HelloWorld -p com.justcode.HelloWorld -l cpp -d D:\demo,新建HelloWorld项目。由于我们通过第二步配置好了环境,cocos命令才能在任意目录下运行。
参数说明:
HelloWorld为项目名称
-p后面接包名
-l后面接开发语言类型,有cpp, lua, js三种类型
-d后面接项目存放的目录
四、导入Android studio
项目目录在proj.android-studio,在导入之前,需要修改一些文件以缩短as编译时间
1、项目下build.gradle文件
dependencies {
classpath'com.android.tools.build:gradle:2.3.3'//修改成自己项目已有的gradle版本
}
2、项目下gradle里面wrapper下gradle-wrapper.properties文件
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip //改成自己的gradle版本
3、moudle下build.gradle文件
compileSdkVersion26
buildToolsVersion"26.0.2"
defaultConfig {
applicationId"com.zijinlong.plaza"
minSdkVersion10
targetSdkVersion26
versionCode1
versionName"1.0"
}
//修改成自己的版本
4、..\demo\cocos2d\cocos\platform\android\libcocos2dx 下build.gradle文件
compileSdkVersion 26 //修改
buildToolsVersion "26.0.2" //修改
useLibrary "org.apache.http.legacy" //新增
defaultConfig {
minSdkVersion 11
targetSdkVersion 26 //修改
versionCode 1
versionName "1.0"
}
五、运行cocos2dx项目
1、运行cocos compile -p android --android-studio,进行编译。
这一步会在proj.android-studio/app下生成一个libs文件夹,里面是编译出来的libcocos2dcpp.so库文件。注意命令里含有–android-studio,这是专门针对Android Studio进行编译。如果不运行这一步,原生C++代码无法运行。也可以用命令行cocos run -p android --android-studio --ap android-25 直接运行,也能直接生成apk并安装到手机上自动运行,优点是这种方式生成的安装包会比android studio打包生成的小一些,对安装包大小敏感的话可以用这种方式。
六、可能出现的问题
1、
解决方法:在下载android studio的地址中下载一个tools,把SDK的tools文件夹替换掉,再次编译。这个问题的原因是最新的sdk工具中不再支持android命令,这里替换tools文件为旧版的文件后可以编译(可以搜索tools_r25.2.3-windows.zip下载)。
2、
如果不是新建的项目,而是已经添加了其他C++源文件的项目,那么直接运行这一步会出现如下报错:error: undefined reference to ‘vtable for XXX’。其中XXX就是某个源文件名。这是因为编译器没有在Android.mk文件里面找到相关源文件的地址。所以解决办法就是在这一步之前再添一步,用vi,或者nano,或者其他你喜欢的方式打开proj.android-studio/app/jni/Android.mk,往里面添加相关源文件地址(只要你打开这个mk文件一看就秒懂)。
3、如果出错并提示:在 Android SDK的platforms下未找到文件夹 'android-25',请使用 --ap 指定需要的API版本。
那么找到你的SDK路径下的platforms文件夹,看里面最新版本是多少,比如是android-25的话,那么编译就用cocos compile -p android --android-studio --ap android-25
4、如果提示没有android命令,或android命令已被废除之类的
去下载一个较老版本的SDK(tools_r25.2.3-windows.zip),并把里面的tools文件夹覆盖现有的
5、
版本管理工具svn的坑,它的设置里面忽略了.a文件,导致其他人提交的cocos2dx工程里面/cocos2d-x/external 下面的所有.a文件缺失了,所以,你自己重新new一个cocos2dx工程,把/cocos2d-x/external 下面的.a文件拷贝到对应的目录然后编译就ok了
6、找不到org.apache.http.HttpEntity的类文件
主要是targetsdk23以上版本不在支持,如果需要使用的话,在build.gradle文件中添加配置:useLibrary "org.apache.http.legacy"
7、make.exe: *** Waiting for unfinished jobs....
[armeabi] Compile++ thumb: cocos2dcpp_shared <= FMContentJsonDictionary.cpp
make.exe: *** No rule to make target `/Developer/Game/CoralSdkDemo/proj.android/
../cocos2d/extensions/assets-manager/AssetsManager.cpp', needed by `obj/local/ar
meabi/objs/cocos_extension_static/assets-manager/AssetsManager.o'. Stop.
make.exe: *** Waiting for unfinished jobs....
[armeabi] Compile++ thumb: cocos2dcpp_shared <= Menu.cpp
make.exe: Leaving directory `C:/Users/Administrator/Desktop/12/BattleNet_Cocos2x
Demo_V1.0.0/CoralSDK_Cocos2d-x_Demo/proj.android'
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\12\BattleNet_Cocos2xDemo_V1.0.0\CoralSDK_
Cocos2d-x_Demo\proj.android\build_native.py", line 166, in
build(opts.ndk_build_param,opts.android_platform,opts.build_mode)
File "C:\Users\Administrator\Desktop\12\BattleNet_Cocos2xDemo_V1.0.0\CoralSDK_
Cocos2d-x_Demo\proj.android\build_native.py", line 153, in build
do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,and
roid_platform,build_mode)
解决办法:搜索project.android目录下的.o .d文件类型,并且删除之后重新编译即可通过;