Skip to content

FudanCraft Android移植的尝试

zlj09 edited this page Jun 30, 2017 · 1 revision
Ø 过程
	○ 先按照《Cocos2d-x实战 C++卷》第21章的步骤
		§ 已有JDK,安装ANT, SDK, NDK
		§ 采用cocos命令行工具编译
			□ cocos run -p android --ap=android-24
		§ MI 5s plus手机通过USB连接电脑,打开USB调试模式
		§ cocos例程HelloWorld编译通过,安装成功!
			□ 
			
			□ 
			
			□ 
	○ Google Protobuf移植
		§ 先尝试一下Windows下用Cmake编译Google Protobuf
			□ https://github.com/google/protobuf/blob/master/cmake/README.md
		§ 编译面向Android的protobuf
			□ 按照https://stackoverflow.com/questions/42458739/how-to-integrate-install-latest-c-protobuf-3-2-with-android-ndk的步骤
				® 编译失败
				® 
				
				® 
				® 编译器没有找到合适的进程库
				® 安卓应该是有pthread的
				® 注释掉if def语句,强制采用android配置
				® 这次出现了一大堆链接错误
				® 
				® 在google/protobuf/stubs/common.cc中加入下面的语句,将平台定义为Android
				® 
				® 在Android.mk中加入下面的语句,让编译器能找到android/log.h
				® 
				® 编译成功
				® 
				® 生成了好几个架构的libprotobuf.so
				® 
				® 不对啊,我要的是静态链接库……
				® 好吧,静态库好像不能加到APK里,还是用动态库吧
	○ 编译FudanCraft
		§ 第一个的问题就是Android.mk怎么写
			□ 首先要包含Google Protobuf
				® 也就是刚刚生成的libprotobuf.so
				® 按照http://bbs.csdn.net/topics/390397961中31楼的指点
			□ 然后还有一个boost/asio库
				® 先直接包含头文件吧
			□ 最后写好的Android.mk如下
				® 
		§ 改bug
			□ Visual Studio下写出来的C++和GCC要求的真是有很多不一样的
			□ to_string()不能用了
			□ 函数内部定义的成员函数不能加命名空间
		§ 仍然使用cocos命令行工具编译
			□ 得到了一大堆链接错误
				® 
				® 也是意料之中
Ø 问题
	○ Android SDK Manager闪退
		§ 采用命令行android.bat直接升级
			□  tools\android.bat update sdk --no-ui
			□ 能够运行
		§ 不要管SDK Manager了,谷歌粑粑升级了SDK,以后都直接从Android Studio里面管理
	○ Invalid or unsupported command "update project -t android-25 -p
		§ 找不到update命令,因为Android SDK升级了
		§ 采用http://forum.cocos.com/t/creator1-4-1-android/45151/7提供的tools
	○ 工程路径不能有空格……
		§ 
	○ 只要还有一个cmd窗口开着,新的cmd窗口也不会更新用户环境变量!
	○ cmake要在能够使用visual studio cl编译器的环境下运行
		§ x64_arm不行,x86_arm就可以,不知道为什么
			□ 
	○ protobuf单元测试有7个例子出错……
		§ 
		§ 倒霉,应该下release版的……
		§ 
		§ 用了release版(3.3.0)还是有一个错,不知道怎么回事
	○ NDK编译错误
		§ 命名空间重复声明错误
			□ 
			□ GCC对C++语法的要求更严格,在类内定义的成员函数开头不允许重写一遍命名空间
		§ 找不到to_string()
			□ 好像是GCC有点问题,换成sprintf吧