一.Cocos2dx3.10以后只要做这两步就可以发布工程;
二,具体配置环境
三.修理Android.mk;
四 .打包成release版
五.导入到eclipse
六.接入微信
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一.Cocos2dx3.10以后只要做这两步就可以发布工程;
一到七步; 装软件,添加环境变量, 就可以发布;
=========================================
2017发布过:COCOS2D-X3.10;
Python 用最新版如2.7.9版本, 不能用3.3版的,语法不一样;
VS2013;
cocos2d-x-3.10;
JDK; 用最新版jdk-8u144-windows-x64.exe; jdk和jre不能装在一个目录下;
ANT; 用最新版;apache-ant-1.10.1-bin.zip ;
NDK; 用android-ndk-r10d-windows-x86_64.exe;
ADT; 用adt-bundle-windows-x86_64-20140702.zip; 里面包含了Eclipse和SDK;
1.检查和添加环境变量:
Windows–运行–cmd;
转到目录 :D:\cocos2dx\cocos2dx3\cocos2d-x-3.10\下:
输入命令: python setup.py
按提示输入下面的路径;
当然也有其它的方法添加环境变量如:
我的电脑–属性–高级系统设置—高级—环境变量;新建变量;添加上面的名字和路径;
新建 JAVA_HOME 变量: D:\Java\jdk
PATH 变量: D:\jre\bin; D:\Java\jdk\bin; D:\cocos2dx3\cocos2d-x-3.2
新建CLASSPATH变量: D:\Java\jdk\lib; D:\Java\jdk\lib\tools.jar
NDK_ROOT D:\cocos2dx3\NDK\android-ndk-r10e
ANDROID_SDK_ROOT D:\cocos2dx3\ADT\adt-bundle-windows-x86_64-20140702\sdk
ANT_ROOT D:\cocos2dx3\ANT\apache-ant-1.10.1-bin\bin \ 上面的少了个bin;
照上面的抄; 这里改了路径,再运行setup.py时,显示的就是改后的路径;
重启电脑;
2.运行发布:
在工程目录下的proj.android; 空白处shift+右键 打开终端;
输入命令:cocos run -p android 或者 cocos compile -p android
输入命令:cocos run -p win32
在bin目录下就会生成apk, 或者win32;
上面的方法只能发布新建的工程;
要添加了自己写的类,就要在Android.mk添加;后面有详细的修理Android.mk;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二,具体配置环境
一。 JDK ; 作用: WIN系统下的JAVA开发环境;
WIN7. 64位系统:
java8有一个无法接受的特点就是不支持windows XP。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
jdk-8u144-windows-x64.exe //用最新版,//cocos2dx3.10; 2017.10成功
jdk和jre不要装到一个文件夹里;
安装完成,接下来配置环境变量
1.打开控制面板,点击‘高级系统设置—环境变量’
2.配置path变量和classpath变量;
即找到PATH变量,点编辑;在原来的变量值后面加分号“;”(以分号为间隔的,不要改变了其它的变量;) ,然后把你的jdk安的目录的bin文件路径复制上去;
如:D:\Java\jdk\bin 。
找到CLASSPATH变量,点编辑;在原来的变量值后面加分号“;”(以分号为间隔的,不要改变了其它的变量;) ,然后把你的jdk7安的目录的lib文件路径复制上去;
如:D:\Java\jdk\lib
整理要添加的目录如下:
新建 JAVA_HOME 变量: D:\Java\jdk
PATH 变量: D:\Java\jre\bin; D:\Java\jdk\bin
新建CLASSPATH变量: D:\Java\jdk\lib; D:\Java\jdk\lib\tools.jar
3.测试
点击‘开始-运行’,输入cmd 命令 打开DOS窗口,再输入java;
java -version能运行;jar能运行;
步骤阅读
二. 安装ANT;
下载http://archive.apache.org/dist/ant/binaries/
解压;
apache-ant-1.10.1-bin.zip //cocos2dx3.10; 2017.10用最新版成功
新建ANT_ROOT环境变量 C:\cocos2dx\COCOS310\ANT\apache-ant-1.10.1\bin \ 上面的少了个bin;
检查:
在ANT解压目录C:\cocos2dx\COCOS310\ANT\apache-ant-1.10.1\bin下打开命令窗口(shift+右键,在此处打开命令窗口),
输入:ant -version 可以查看版本;
三. Android NDK; 作用:使程序能在Android系统运行;
百度上去下吧: android-ndk-r10e-windows-x86_64.exe;//r10e ;2017.10成功;
新建NDK_ROOT环境变量 D:\cocos2dx3\NDK\android-ndk-r10e //2017.10r10d不用更新也成功
最新版本:r12以上编译时找不到版本号
http://developer.android.com/tools/sdk/ndk/index.html ; //官网
android-ndk-r14b-windows-x86_64.zip //r14 //r12以上找不到版本号r14 ;2017.10;
四。Android SDK 作用:运行程序时可以模拟手机环境;
ADT (android develop tool);包含 eclips(程序编辑器) 和SDK(android手机上运行的函数库);
百度上搜:adt-bundle-windows-x86_64-20140702.zip ;
环境变量ANDROID_SDK_ROOT D:\cocos2dx3\ADT\adt-bundle-windows-x86_64-20140702\sdk
没试过最新版本:
https://developer.android.com/studio/index.html官网上一直 在更新; Android studio代替了eclips;
需要在电脑上看到运行结果或者在编译器上看过程的就要下载安装Android studio;
五。cocos2dx; 作用: cocos2dx工程运行的类库和环境;
网址:
http://www.cocos2d-x.org/download/version
下载:cocos2d-x-3.10.zip
解压就是;
PATH 变量: D:\cocos2dx3\cocos2d-x-3.10
六。安装VS2013;
网上下一下吧,这个容易找;VS2013好像不支持XP;
D:\cocos2dx3\cocos2d-x-3.10\build\cocos2d-win32.vc2012.sln;
打开运行一下;
七。python ; 作用: 创建cocos2dx工程; 用VS不能直接创建cocos2dx工程;
网址:
https://www.python.org/download/releases/2.7.6
下载:python-2.7.8.msi; 不能用3.3版的,语法不一样;
安装。。。。。
设置环境变量:path: D:\Program Files\android\python
/////////////////////////////////////////////////
- Cocos2d-x3.10创建项目:
cmd打开控制台:
定位到目录“cocos2d-x-3.10\tools\cocos2d-console\bin”。----cocos.py的存在路径。
然后输入命令:cocos new gamename -p com.cleopard.newgame -l cpp -d E:\Cocos”
默认创建好的项目在:(不加-d)
D:\cocos2dx3\cocos2d-x-3.10\tools\cocos2d-console\bin
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
三.修理Android.mk;
修理Android.mk;
上面的是新建的工程;先把新建的工程弄成功,再弄自己的工程;
自己的工程需要修改D:\cocos2dx\cocos2dxProject\hhh\proj.android\jni\Android.mk;
两横线之间的部分为Android.mk; 对照之前的Android.mk;文件,修改#########之间的部分;
FILE_LIST := 这一段是编译时找不到文件直接加的目录,其实后面已经包含了,
#是注释符号, 相关的语法可以查找makefile脚本程序规则;
#####################################################################
LOCAL_PATH := (call my-dir) ##1) include (CLEAR_VARS)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d) ##4)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/external)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/cocos)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
#####################################################################
FILE_LIST := hellocpp/main.cpp \ ##2)
…/…/Classes/data/ConfigData.h
…/…/Classes/come/xml/rapidxml.hpp
(wildcard (LOCAL_PATH)/…/…/Classes/come/xml/.)
FILE_LIST += (wildcard (LOCAL_PATH)/…/…/Classes/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/base/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/box2d/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/sprite/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/sprite/hero/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/sprite/solider/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/ui/mainUi/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/ui/poplayer/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/come/xml/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/config/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/data/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/game/maincity/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/game/mode/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/game/scence/login/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/game/scence/war/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/net/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/util/*.cpp)
LOCAL_SRC_FILES := (FILE_LIST:(LOCAL_PATH)/=)
LOCAL_C_INCLUDES := (LOCAL_PATH)/../../Classes/com/xml \ ##3)
(LOCAL_PATH)/…/…/Classes
(LOCAL_PATH)/hellocpp \
(LOCAL_PATH)/…/…/Classes\com\base
(LOCAL_PATH)/../../Classes/com/box2d \
(LOCAL_PATH)/…/…/Classes\com\sprite
(LOCAL_PATH)/../../Classes/com/sprite/hero \
(LOCAL_PATH)/…/…/Classes/com/sprite/solider
(LOCAL_PATH)/../../Classes/com/ui/mainUi \
(LOCAL_PATH)/…/…/Classes/com/ui/poplayer
(LOCAL_PATH)/../../Classes/config \
(LOCAL_PATH)/…/…/Classes/data
(LOCAL_PATH)/../../Classes/game/maincity \
(LOCAL_PATH)/…/…/Classes/game/mode
(LOCAL_PATH)/../../Classes/game/scence/login \
(LOCAL_PATH)/…/…/Classes/game/scence/war
(LOCAL_PATH)/../../Classes/net \
(LOCAL_PATH)/…/…/Classes/util
(LOCAL_PATH)/../../cocos2d/extensions \
(LOCAL_PATH)/…/…/cocos2d/cocos/editor-support/cocostudio
$(LOCAL_PATH)/…/…/cocos2d\cocos\ui \
############################################
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static ##4)
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
############################################
include (BUILD_SHARED_LIBRARY) ##6) #include (BUILD_STATIC_LIBRARY)
############################################
(call import-module,.) ##4)
(call import-module,audio/android)
(call import-module,Box2D)
(call import-module,editor-support/cocosbuilder)
(call import-module,editor-support/spine)
(call import-module,editor-support/cocostudio)
(call import-module,network)
(call import-module,extensions)
1).Makefile的一些语法:
$(LOCAL_PATH)是Android.mk所在的文件目录;
:=是覆盖赋值; +=是后面添加;
/…/…/是返回两个目录;
LOCAL_PATH := (call my-dir) // my-dir:返回当前 Android.mk 所在的目录的路径;
include(CLEAR_VARS) // 用于重置除LOCAL_PATH变量外的变量,
//Makefile变量都是全局的,无论在哪声明,这里的作用是让外面声明的同名变量不起作用;
LOCAL_MODULE := cocos2dcpp_shared //这是模块的名字,它必须是唯一的,而且不能包含空格。
//作用,当引入外部库的时候,也有个Android.mk; 要调用它,就用模块名;
LOCAL_MODULE_FILENAME := libcocos2dcpp //生成的目标文件名libcocos2dcpp.so。发布后生成的库的名字
2). 源文件路径: LOCAL_SRC_FILES;
FILE_LIST := hellocpp/main.cpp \
../../Classes/data/ConfigData.h \
$(wildcard $(LOCAL_PATH)/../../Classes/come/xml/*.*)
LOCAL_SRC_FILES := (FILE_LIST:(LOCAL_PATH)/=)
FILE_LIST 是文件字符串;
LOCAL_SRC_FILES: 这是要编译的源代码文件列表; 不必列出头文件,系统会找出依赖文件。只有.h文件的就要列出;
//可以LOCAL_SRC_FILES := (call all-subdir-java-files)这种形式来包含local_path目录下的所有java文件。
LOCAL_SRC_FILES原文件目录, ()是引用的意思;
(LOCAL_PATH)/%=% 是把(LOCAL_PATH)/ 替换成%; 这里的作用是把$(LOCAL_PATH)/去掉;
列出文件夹下的源文件;这个是可以用的3.10上成功;
(wildcard (LOCAL_PATH)/…/…/Classes/.cpp) \ //查找文件夹下的所有.cpp文件; \是连接号,前面有空格;
(wildcard (LOCAL_PATH)/…/…/Classes/data/.c) \ // 缺点是不能查找子文件夹里的;
另一种查找全部子文件的方法;
遍历目录及子目录的函数
define walk
(wildcard (1)) (foreach e, (wildcard (1)/*), (call walk, $(e)))
endef
遍历Classes目录
ALLFILES = (call walk, (LOCAL_PATH)/…/…/Classes)
FILE_LIST := hellocpp/main.cpp
从所有文件中提取出所有.cpp文件
FILE_LIST += (filter %.cpp, (ALLFILES))
从所有文件中提取出所有.c文件
FILE_LIST += (filter %.c, (ALLFILES))
LOCAL_SRC_FILES := (FILE_LIST:(LOCAL_PATH)/=)
3). 包含的搜索目录: LOCAL_C_INCLUDES;
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes/com/xml \
可以再添加FILE_INCLUDES := (shell find (LOCAL_PATH)/…/…/Classes -type d)
然后LOCAL_C_INCLUDES := (FILE_INCLUDES) 就可以了。 这里不用 把(LOCAL_PATH)/去掉;
4). 导入的外部库文件
(1)添加目录到NDK_MODULE_PATH(编译定义的库的目录变量)中的路径列表:
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/external)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/cocos)
(call import-add-path,(LOCAL_PATH)/…/…/Classes)
比如protobuf库,放在$(LOCAL_PATH)/…/…/Classes下就要添加$(call import-add-path,$(LOCAL_PATH)/…/…/Classes)
(2)静态库的路径;(makefile会在这个目录下找到Android.mk)
(call import-module,Box2D)
(call import-module,editor-support/cocosbuilder)
(call import-module,editor-support/spine)
(call import-module,editor-support/cocostudio)
(call import-module,network)
(call import-module,extensions)
$(call import-module,protobuf)
比如:(call import-module, ,Box2D)是(LOCAL_PATH)/…/…/cocos2d下的Box2D;
比如protobuf库,放在$(LOCAL_PATH)/…/…/Classes下就要添加$(call import-module,protobuf)
编译这个库的Android.mk 要放在protobuf里;makefile会在这个目录下找到Android.mk 编译这个库;
如果外部库是自己引进的,如protobuf的库,Android.mk 就要自己写,要添加所有原文件和目录;复制一个,修改一下;
(3)引用静态库模块;(模块名,其实是引用的外部库放置头文件的文件夹)
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
比如Box2D:
Box2D/Android.mk 定义了box2d_static;
LOCAL_MODULE := box2d_static //定义的模块名
LOCAL_MODULE_FILENAME := libbox2d //编译后输出的模块名
编译后在D:\uu6\proj.android\obj\local\armeabi下生成了libbox2d.a和box2d_static
比如protobuf:
protobuf/Android.mk 定义了protobuf_static;
LOCAL_MODULE := protobuf_static //定义的模块名
LOCAL_MODULE_FILENAME := libprotobuf //编译后输出的模块名
编译后在D:\uu6\proj.android\obj\local\armeabi下生成了libprotobuf.a和protobuf_static
5). 静态库文件
LOCAL_LDFLAGS = $(LOCAL_PATH)/libtest.a //添加外面引入的库
这些是包含的静态库文件;
LOCAL_STATIC_LIBRARIES: 表示该模块需要使用哪些静态库,以便在编译时进行链接
6). 库的类型
include (BUILD_SHARED_LIBRARY) //表示生成动态库, .so ;
#include (BUILD_STATIC_LIBRARY) //表示生成静态库, .a ;
7). 生成库的结果
编译后,生成的库都在proj.android\obj\local\armeabi 下;
Windows和Windows Phone平台动态链接库文件是.dll文件,静态链接库是.lib文件;
在Linux和Android平台动态链接库文件是.so文件,静态链接库是.a文件;
Mac OS X和iOS等平台动态链接库文件是.dylib文件,静态链接库是.a文件。
//LOCAL_STATIC_LIBRARIES += libxxxx
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面是2个Android.mk源文件;
一个是D:\uu6\proj.android\jni\Android.mk
一个是D:\uu6\Classes\protobuf\Android.mk
/////////////////////////////////一个是D:\uu6\proj.android\jni\Android.mk//////////////////////////////////////////////////////////////////
LOCAL_PATH := (call my-dir)
include (CLEAR_VARS)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/external)
(call import-add-path,(LOCAL_PATH)/…/…/cocos2d/cocos)
(call import-add-path,(LOCAL_PATH)/…/…/Classes)
(call import-add-path,(LOCAL_PATH))
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
##################################################################################################
FILE_LIST := hellocpp/main.cpp
…/…/Classes/MDefine.h
…/…/Classes/net/MSGTemplate.h
…/…/Classes/net/MSGprotobuf.pb.h
…/…/Classes/net/MSGprotobuf.pb.cc
FILE_LIST += (wildcard (LOCAL_PATH)/…/…/Classes/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/common/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/MJSC/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/net/.cpp)
(wildcard (LOCAL_PATH)/…/…/Classes/PKNN/*.cpp)
LOCAL_SRC_FILES := (FILE_LIST:(LOCAL_PATH)/=)
LOCAL_C_INCLUDES := (LOCAL_PATH)/../../Classes \
(LOCAL_PATH)/…/…/Classes/protobuf
(LOCAL_PATH)/../../Classes/common \
(LOCAL_PATH)/…/…/Classes/MJSC
(LOCAL_PATH)/../../Classes/net \
(LOCAL_PATH)/…/…/Classes/PKNN
##################################################################################################
_COCOS_HEADER_ANDROID_BEGIN
_COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES +=protobuf_static
_COCOS_LIB_ANDROID_BEGIN
_COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
############################################
(call import-module,.)
(call import-module,protobuf)
#$(call import-module,protobuf-2.6.1)
_COCOS_LIB_IMPORT_ANDROID_BEGIN
_COCOS_LIB_IMPORT_ANDROID_END
////////////////////////////////////////////////一个是D:\uu6\Classes\protobuf\Android.mk///////////////////////////////////////////////
protobuf2.6.1版,从官网下载后,在linux下编译生成过;
Android.mk里并没用添加进去所有源文件,用添加所有源文件的在cocos2dx3.10的android移植编译时会出错;
//////////////////////////////////////////////////////////////////////////////////////////////
LOCAL_PATH := (call my-dir)
include (CLEAR_VARS)
LOCAL_MODULE := protobuf_static
LOCAL_MODULE_FILENAME := libprotobuf
LOCAL_SRC_FILES :=
google/protobuf/io/coded_stream.cc
google/protobuf/stubs/common.cc
google/protobuf/descriptor.cc
google/protobuf/descriptor.pb.cc
google/protobuf/descriptor_database.cc
google/protobuf/dynamic_message.cc
google/protobuf/extension_set.cc
google/protobuf/extension_set_heavy.cc
google/protobuf/generated_message_reflection.cc
google/protobuf/generated_message_util.cc
google/protobuf/io/gzip_stream.cc
google/protobuf/compiler/importer.cc
google/protobuf/message.cc
google/protobuf/message_lite.cc
google/protobuf/stubs/once.cc
google/protobuf/compiler/parser.cc
google/protobuf/io/printer.cc
google/protobuf/reflection_ops.cc
google/protobuf/repeated_field.cc
google/protobuf/service.cc
google/protobuf/stubs/structurally_valid.cc
google/protobuf/stubs/strutil.cc
google/protobuf/stubs/substitute.cc
google/protobuf/stubs/stringprintf.cc
google/protobuf/text_format.cc
google/protobuf/io/tokenizer.cc
google/protobuf/unknown_field_set.cc
google/protobuf/wire_format.cc
google/protobuf/wire_format_lite.cc
google/protobuf/io/zero_copy_stream.cc
google/protobuf/io/zero_copy_stream_impl.cc
google/protobuf/io/zero_copy_stream_impl_lite.cc
google/protobuf/io/strtod.cc
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/…
LOCAL_C_INCLUDES := (LOCAL_PATH)/.. \
(LOCAL_PATH)/.
(LOCAL_PATH)/.. \
(LOCAL_PATH)/google/protobuf/ \
include $(BUILD_STATIC_LIBRARY)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2017发布android所遇到的问题;
-
关于protobuf;
D:\QiPai5\Classes\protobuf\google
D:\QiPai5\Classes\protobuf\lib
1)把网上下的protobuf-2.6.1\src下的所有文件放到D:\QiPai5\Classes\protobuf下就可以,并不需要整个protobuf-2.6.1;
2)把protobuf-2.6.1\config.h复制到D:\QiPai5\Classes\protobuf下;
3)在D:\QiPai5\Classes\protobuf下建立一个Android.mk;
这样win和android都可以用这个库;
注意只有.h或者.cc的文件,要添加进去; -
清理 ;
修改了环境变量,或者库目录,先把
D:\QiPai5\proj.android\obj下的全部删除,再编译; -
只要是WIN的东西,都加上#ifdef WIN32 #endif ;
#ifdef WIN32
#include <windows.h>
#endif
#ifdef WIN32
#include <SDKDDKVer.h>
#include <stdio.h>
#include <tchar.h>
#endif
- 头文件的program once 改成
#ifndef UILoginMgr_H
#define UILoginMgr_H
#endif
-
文件格式
如果android编译时,出现定位到字符的错时,就是文件的编码有问题,得转成utf-8格式
有好多转码器没用;推荐水淼文件编码转换器 V1.23.rar -
程序有好多用不了的函数都得换
上面所遇到的问题;
- 找不到文件;
文件路径在:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/…/…/Classes/com/xml \
路径上有错就找不到,要仔细; 我就把com写成了come; 搞得总是在找makefile的语法错误;
-
LOCAL_C_INCLUDES := $(LOCAL_PATH)/…/…/Classes/com/xml
最后那个\后面不能有空格, 会报错;而它的前面是有空格的; -
在找makefile的错误时,以为find, call, wildcard;这些函数要在linux下运行;
安装过cygwin; 1G多的版本; 运行后还是一样;
网上已经提示NDK r7版本以后,已经集成了gcc 之类, 不需要安装cygwin了; -
程序里有throw的, NDKr9里不支持, 要改掉;
-
扩展的和cocos studio之类的文件没加进库的, 包含目录: LOCAL_C_INCLUDES上添加就是:
LOCAL_C_INCLUDES :=(LOCAL_PATH)/../../cocos2d/extensions \ (LOCAL_PATH)/…/…/cocos2d/cocos/editor-support/cocostudio
$(LOCAL_PATH)/…/…/cocos2d\cocos\ui \ -
NDK里好像不支持UTF_16;把classes里的文件都转成utf_8就行了;;
-
Eclipse导入工程时,可以导入整个工程的文件夹mygame,
也可以只导入mygame/proj.android; 这个能少很多问题; -
不支持和 std之类的C++库要怎么解决;
可以在Application.mk文件里
APP_STL := c++_static
APP_STL+=stlport_static
NDK_TOOLCHAIN_VERSION=clang
加上红色的那行就行;
但是有问题,待解决;
10.NDK_MODULE_PATH:环境变量:
NDK_MODULE_PATH
D:\cocos2dx\cocos2dxProject\hhh\cocos2d\cocos;
D:\cocos2dx\cocos2dx3\cocos2d-x-3.2\cocos\platform\android;
D:\cocos2dx\cocos2dx3\cocos2d-x-3.2;
D:\cocos2dx\NDK\android-ndk-r9d\sources\cxx-stl\stlport\libs\armeabi;
11.替换目录: game1.vcxproj ;
一个项目;和原来的相同,换了个存放位置,或者更新了,不想再次添加文件目录;
把文件: D:\cocos2dx\cocos2dxProject\hhh\proj.win32\hhh.vcxproj
替换掉: E:\game1\game1.vcxproj ;
用记事本打开, 查找替换:D:\cocos2dx\cocos2dxProject\hhh替换成:E:\game1
-
parseSdkContent failed
开Eclipse出现错误“parseSdkContent failed”,Android的模拟器启动不了。尝试了不少方法,终于搞定。
1).删除文件夹 C:\Documents and Settings\用户名.android 网上一般就只有这一步,为的是删除AVD的镜像文件,但是我 删除后却依然不行。
2.)删除工作目录下的的.metadata文件夹 例如:E:\Android\workspace.metadata
重启Eclipse后即可正常
- Platform L is a preview and requires application manifest to set minSdkVersion to ‘L’
解决:双击出错的文件:AndroidManifest.xml;打开;
点 use sdk; 把 min sdk version 的值7改成10; 保存文件;
或者改成L;
- parseSdkContent failed
Could not initialize class android.graphics.TypefaceVc
Resource–linked resources----linkedresources----absolute path location ----libcocos2d–edit;
改成:D:\cocos2dx\cocos2dx3\cocos2d-x-3.2\cocos\platform\android\java\src;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
四 打包成release版
命令:cocos run -p android -m release进行apk打包;
打包release版本的apk需要签名;用KeyTool生成;KeyTool在jdk的bin目录下
cmd下jdk的bin目录下
命令: keytool -genkey -v -keystore my-release-key.keystore -alias my-release-key.keystore -keyalg RSA -keysize 2048 -validity 10000
命令解释:
-genkey 产生证书文件
-keystore 指定密钥库的.keystore文件
-keyalg 指定密钥的算法
-alias 产生别名
-validity 有限时间
之后会有密码和一系列问题需要输入即可,证书my-release-key.keystore 会生成在jdk的bin目录下;
注意:在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。
最后是给release版本的apk签名
在项目下的/proj.android/ant.properties文件中加入以下代码后用ant打包release版本的apk就可以自动签名了(密码是生成证书时自己输入的密码)
key.store=my-release-key.keystore
key.alias=my-release-key.keystore
key.store.password=123456
key.alias.password=123456
或者将没有签名的release版本apk和key.keystore放在用一个目录
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
五.导入到eclipse
一定要在复制的工程上做,不然随时烂掉,得重新来;
1.打开eclipse导入工程:
file–import–android–existing android code in workspace–next–brows
选择: 工程D:\uu\proj.android -----完成
2.导入库:
file–import–android–existing android code in workspace–next–brows
要选择: D:\uu\cocos2d\cocos\platform\android\java
选择: 引擎C:\cocos2dx\COCOS310\Cocos2d-x\cocos2d-x-3.10\cocos/platform/android/java下的没用
工程右键----properties–android–library—add—libcocos2dx—ok;
3.添加CDT编译器
工程右键----properties----builders—CDT Builder勾选; 不然project—build all没用;
4.更新SDK;
我的sdk是20的即4.4W;编译3.10会显示cocos库出错,更新到22即5.1.1和23可以通过,现在的最新版是26即8.0;
Eclipse—window—android sdk manager
会显示一大堆要更新;
只要更新
tools----android sdk build tools ----23.0.0
android6.0—sdk platform
//tools里build-tools更新相应的版本;android sdk tools 和android sdk platform tools要更新
不然都更新得几十个G;
1).
它是通过build tools 来调用相应的sdk版本;android6.0在cocos2dx3.10编译不成功;android4.4W可以;
2).
android8.0.0里的
android wear intelx86 atom systemimage 是创建手机模拟器用的,还是不用的好,用时久,不一定能运行;
问题:
android6.0在cocos2dx3.10编译不成功;android4.4W可以
已经更新到build tools ----23.0.0和android6.0;删了还是编译不过;
可以修改D:\uu\cocos2d\cocos\platform\android\java\project.properties下的target=android-20;
可以修改D:\uu\proj.android\project.properties下的target=android-20;
5.打包;
工程右键—android tools—export signed application package
然后是一大堆填的, 打出的包在蓝叠电脑手机模拟器上运行会闪退,但是在手机上能运行;
6.工程烂了;
更新SDK后,可能会导致工程烂掉,即出现一大堆问题,
解决方法,
1.)删除工程,重新建一个,
2).关掉eclipse;删除计算机用户C:\Users\qbkf.android下的.android和workspace重新来一遍;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
六.接入微信
1.生成API ID:
打开蓝叠手机模拟器,安装工程的APK包;
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&lang=zh_CN
下载签名生成工具:Gen_Signature_Android2.apk;安装到手机模拟器;
打开它,输入包名(com.cleopard.uu)生成(0799d6a9a011611006b64bab111b1a73)
2.导入SKD包:
打开下载的Android_SDK.zip。解压,将libs目录下的wechat-sdk-android-with-mta.jar拷到D:\uu\proj.android\libs。
右键工程----刷新
右键工程–Build Path—Configure Build Path.—Libraries—Add Jars…导入工程D:\uu\proj.android\libs目录下的wechat-sdk-android-with-mta.jar
在工程的目录下就添加了referenced libraries就会有相应的类;不同的版本有不同的名字;
3.调用微信的JAVA类:
D:\uu\src\org.cocos2dx.cpp下的AppActivity.java;
复制别人的代码
4.微信回调(返回信息)的JAVA类:
微信SDK回调,新建一个包,包名必须为wxapi,而且这个包必须要在cocos包名的目录下,比如你包名是com.csn.cocosNew 那么新建的这包就是com.csn.cocosNew.wxapi,然后在这个包下面新建一个WXEntryActivity类,类名也是必须这样,没办法微信的要求,
新建包:右键D:\uu\src----new —package—输入名称(com.cleopard.uu.wxapi)(uu/gen下是包名com.cleopard.uu);
新建类:右键包com.cleopard.uu.wxcall—new–class—类名WXEntryActivity;
复制别人的代码
5.JAVA的JniHelper类:
新建类:右键包D:\uu\src\org.cocos2dx.cpp下–new–class—类名JniHelper;
复制别人的代码
6.cocos调用JAVA的类:
新建类:在工程D:\uu\classes下创建C++类:ManagerJNI;
复制别人的代码
7.添加权限:
工程下的AndroidManifest.xml下添加红色的部分;
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="cocos2dcpp" />
<activity android:name="org.cocos2dx.cpp.AppActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
问题
1.)新加的类,eclipse总是不识别,而vs打开时不出错
解决;
D:\uu\proj.android\jni\Android.mk 把源文件加进去;