首页 > 代码库 > Cocos2d-JS: 2.编译到安卓和iOS

Cocos2d-JS: 2.编译到安卓和iOS

上面介绍了项目的创建,这一节记录如何编译成安卓和iOS的app,这里先记录如何编译成iOS的。

1.首先在终端中进入到项目的目录下,先看下编译命令有哪些功能,运行cocos compile -h:

 1 bogon:HelloC1 dn9x$ cocos compile -h 2 usage: cocos compile [-h] [-s SRC_DIR] [-q] [-p PLATFORM] [-m MODE] [-j JOBS] 3                      [--ap ANDROID_PLATFORM] [--ndk-mode NDK_MODE] 4                      [--source-map] [--sign-identity SIGN_ID] [--no-res] 5                      [--compile-script {0,1}] [--lua-encrypt] 6                      [--lua-encrypt-key LUA_ENCRYPT_KEY] 7                      [--lua-encrypt-sign LUA_ENCRYPT_SIGN] 8  9 Compiles the current project to binary10 11 optional arguments:12   -h, --help            show this help message and exit13   -s SRC_DIR, --src SRC_DIR14                         project base directory15   -q, --quiet           less output16   -p PLATFORM, --platform PLATFORM17                         select a platform (android, ios, mac, web, win32,18                         linux)19   -m MODE, --mode MODE  Set the compile mode, should be debug|release, default20                         is debug.21   -j JOBS, --jobs JOBS  Allow N jobs at once.22 23 Android Options:24   --ap ANDROID_PLATFORM25                         parameter for android-update.Without the parameter,the26                         script just build dynamic library for project. Valid27                         android-platform are:[10|11|12|13|14|15|16|17|18|19]28   --ndk-mode NDK_MODE   Set the compile mode of ndk-build, should be29                         debug|release|none, native code will not be compiled30                         when the value is none. Default is same value with -m31 32 Web Options:33   --source-map          Enable source-map34 35 iOS Options:36   --sign-identity SIGN_ID37                         The code sign identity for iOS. Its required when the38                         value of "-m, -mode" is release.39 40 lua/js project arguments:41   --no-res              Package without project resources.42   --compile-script {0,1}43                         Diable/Enable the compiling of lua/js script files.44 45 lua project arguments:46   --lua-encrypt         Enable the encrypting of lua scripts.47   --lua-encrypt-key LUA_ENCRYPT_KEY48                         Specify the encrypt key for the encrypting of lua49                         scripts.50   --lua-encrypt-sign LUA_ENCRYPT_SIGN51                         Specify the encrypt sign for the encrypting of lua52                         scripts.53 bogon:HelloC1 dn9x$ 

 

这里面可以看到很多的参数,-p可以指定编译成什么模式,-m可以指定编译的模式是调试还是正式,还有专门安卓编译的选项等,这里是先介绍iOS的,因为我现在还不会oc,所以这一块我们直接使用xcode进行编译。

 

2.在项目目录下有个frameworks/runtime-src目录,这个目录里面就是各个平台的代码,V3.0 R1版本的默认有4中,android, ios, linux, win32,如:

 

3.直接点击上面的HelloC1.xcodeproj就会用xcode打开了,

 

设置下运行的虚拟设备:

设置完之后点击运行按钮就可以运行了:

初次运行可能有点慢,所以要稍等下,运行以后效果如下:

 

 和浏览器中看到的效果是一样的。

 

4.编译成安卓的优点不太一样,这里你的电脑首先要安卓ndk,还要安装ant,所以推荐到谷歌网站上去下载adt套件,下载地址是:http://developer.android.com/sdk/index.html,ant可能要单独下载,下载地址是:http://ant.apache.org/bindownload.cgi,下载之后自己配置下环境变量,在/etc/profile中配置环境变量,如:

export NDK_ROOT=/Users/dn9x/Android/adt-bundle-mac-x86_64-20140702/android-ndk-r10export ANT_ROOT=/Users/dn9x/Android/apache-ant-1.9.4/binexport ANDROID_SDK_ROOT=/Users/dn9x/Android/adt-bundle-mac-x86_64-20140702/sdkexport PATH=/Users/dn9x/Cocos/cocos2d-js-v3.0-rc1/tools/cocos2d-console/bin:/Users/dn9x/Android/android-ndk-r9:/Users/dn9x/Android/adt-bundle-mac-x86_64-20140702/sdk/platform-tools:$PATH

 

 这里的NDK_ROOT是要配置的,ANT_ROOT和ANDROID_SDK_ROOT也是要配置的,这里之所以配置了所有的东西是为了一次性的配置完成,后面安卓使用的时候就不用配置了,当然ant的环境变量也是要配置的,之前刚开始用mac的时候环境变量我都是配置在/etc/profile中,后来我看了下profile是所有用户登录的时候都会读取的,不建议配置在这里,所以后面的配置我就配置在另外一个文件中了,/etc/bashrc

export ANT_HOME=/Users/dn9x/Android/apache-ant-1.9.4export PATH=${PATH}:${ANT_HOME}/bin

 

 配置好ndk和ant之后,重新启动下终端,

重启之后可以运行下ant -v看下是否配置成功,

 

5.开始编译为安卓程序,文章最开始的时候看过编译的命令,所以就直接使用命令行编译,这里介绍下,上面编译命令中有一个安卓命令的选项,如:

Android Options:  --ap ANDROID_PLATFORM                        parameter for android-update.Without the parameter,the                        script just build dynamic library for project. Valid                        android-platform are:[10|11|12|13|14|15|16|17|18|19]  --ndk-mode NDK_MODE   Set the compile mode of ndk-build, should be                        debug|release|none, native code will not be compiled                        when the value is none. Default is same value with -m

 

这里的--ap是指安卓版本,所以在编译的时候可以带上这个,这样他就可以编译为安卓指定版本了

bogon:HelloC1 dn9x$ cocos compile -p android --ap 19Running command: compileBuilding mode: debugbuilding nativeNDK build mode: debugThe Selected NDK toolchain version was 4.8 !running: /Users/dn9x/Android/adt-bundle-mac-x86_64-20140702/android-ndk-r10/ndk-build -C /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android -j1 NDK_MODULE_PATH=/Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/../../js-bindings:/Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/../../js-bindings/cocos2d-x:/Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/../../js-bindings/cocos2d-x/cocos:/Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/../../js-bindings/cocos2d-x/external NDK_DEBUG=1...........

 

编译的时间是比较久的,好了之后你可以看到:

 1 -post-package: 2  3 -do-debug: 4  [zipalign] Running zip align on final apk... 5      [echo] Debug Package: /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin/HelloC1-debug.apk 6 [propertyfile] Creating new property file: /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin/build.prop 7 [propertyfile] Updating property file: /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin/build.prop 8 [propertyfile] Updating property file: /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin/build.prop 9 [propertyfile] Updating property file: /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin/build.prop10 11 -post-build:12 13 debug:14 15 BUILD SUCCESSFUL16 Total time: 12 seconds17 Move apk to /Users/dn9x/work/study/cocos/HelloC1/runtime/android18 build succeeded.19 bogon:HelloC1 dn9x$  

 

6.安装编译后的程序到真机,这里把安卓手机通过数据线连接电脑,并且开启USB调试,通过adb命令安装,如果你按照上面的配置文件配置环境变量,那么应该可以直接使用adb命令,如:

  1 bogon:HelloC1 dn9x$ adb -h  2 Android Debug Bridge version 1.0.31  3   4  -a                            - directs adb to listen on all interfaces for a connection  5  -d                            - directs command to the only connected USB device  6                                  returns an error if more than one USB device is present.  7  -e                            - directs command to the only running emulator.  8                                  returns an error if more than one emulator is running.  9  -s <specific device>          - directs command to the device or emulator with the given 10                                  serial number or qualifier. Overrides ANDROID_SERIAL 11                                  environment variable. 12  -p <product name or path>     - simple product name like sooner, or 13                                  a relative/absolute path to a product 14                                  out directory like out/target/product/sooner. 15                                  If -p is not specified, the ANDROID_PRODUCT_OUT 16                                  environment variable is used, which must 17                                  be an absolute path. 18  -H                            - Name of adb server host (default: localhost) 19  -P                            - Port of adb server (default: 5037) 20  devices [-l]                  - list all connected devices 21                                  (-l will also list device qualifiers) 22  connect <host>[:<port>]       - connect to a device via TCP/IP 23                                  Port 5555 is used by default if no port number is specified. 24  disconnect [<host>[:<port>]]  - disconnect from a TCP/IP device. 25                                  Port 5555 is used by default if no port number is specified. 26                                  Using this command with no additional arguments 27                                  will disconnect from all connected TCP/IP devices. 28  29 device commands: 30   adb push [-p] <local> <remote> 31                                - copy file/dir to device 32                                  (-p to display the transfer progress) 33   adb pull [-p] [-a] <remote> [<local>] 34                                - copy file/dir from device 35                                  (-p to display the transfer progress) 36                                  (-a means copy timestamp and mode) 37   adb sync [ <directory> ]     - copy host->device only if changed 38                                  (-l means list but dont copy) 39                                  (see adb help all) 40   adb shell                    - run remote shell interactively 41   adb shell <command>          - run remote shell command 42   adb emu <command>            - run emulator console command 43   adb logcat [ <filter-spec> ] - View device log 44   adb forward --list           - list all forward socket connections. 45                                  the format is a list of lines with the following format: 46                                     <serial> " " <local> " " <remote> "\n" 47   adb forward <local> <remote> - forward socket connections 48                                  forward specs are one of:  49                                    tcp:<port> 50                                    localabstract:<unix domain socket name> 51                                    localreserved:<unix domain socket name> 52                                    localfilesystem:<unix domain socket name> 53                                    dev:<character device name> 54                                    jdwp:<process pid> (remote only) 55   adb forward --no-rebind <local> <remote> 56                                - same as adb forward <local> <remote> but fails 57                                  if <local> is already forwarded 58   adb forward --remove <local> - remove a specific forward socket connection 59   adb forward --remove-all     - remove all forward socket connections 60   adb jdwp                     - list PIDs of processes hosting a JDWP transport 61   adb install [-l] [-r] [-d] [-s] [--algo <algorithm name> --key <hex-encoded key> --iv <hex-encoded iv>] <file> 62                                - push this package file to the device and install it 63                                  (-l means forward-lock the app) 64                                  (-r means reinstall the app, keeping its data) 65                                  (-d means allow version code downgrade) 66                                  (-s means install on SD card instead of internal storage) 67                                  (--algo, --key, and --iv mean the file is encrypted already) 68   adb uninstall [-k] <package> - remove this app package from the device 69                                  (-k means keep the data and cache directories) 70   adb bugreport                - return all information from the device 71                                  that should be included in a bug report. 72  73   adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>] 74                                - write an archive of the devices data to <file>. 75                                  If no -f option is supplied then the data is written 76                                  to "backup.ab" in the current directory. 77                                  (-apk|-noapk enable/disable backup of the .apks themselves 78                                     in the archive; the default is noapk.) 79                                  (-obb|-noobb enable/disable backup of any installed apk expansion 80                                     (aka .obb) files associated with each application; the default 81                                     is noobb.) 82                                  (-shared|-noshared enable/disable backup of the devices 83                                     shared storage / SD card contents; the default is noshared.) 84                                  (-all means to back up all installed applications) 85                                  (-system|-nosystem toggles whether -all automatically includes 86                                     system applications; the default is to include system apps) 87                                  (<packages...> is the list of applications to be backed up.  If 88                                     the -all or -shared flags are passed, then the package 89                                     list is optional.  Applications explicitly given on the 90                                     command line will be included even if -nosystem would 91                                     ordinarily cause them to be omitted.) 92  93   adb restore <file>           - restore device contents from the <file> backup archive 94  95   adb help                     - show this help message 96   adb version                  - show version num 97  98 scripting: 99   adb wait-for-device          - block until device is online100   adb start-server             - ensure that there is a server running101   adb kill-server              - kill the server if it is running102   adb get-state                - prints: offline | bootloader | device103   adb get-serialno             - prints: <serial-number>104   adb get-devpath              - prints: <device-path>105   adb status-window            - continuously print device status for a specified device106   adb remount                  - remounts the /system partition on the device read-write107   adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program108   adb reboot-bootloader        - reboots the device into the bootloader109   adb root                     - restarts the adbd daemon with root permissions110   adb usb                      - restarts the adbd daemon listening on USB111   adb tcpip <port>             - restarts the adbd daemon listening on TCP on the specified port112 networking:113   adb ppp <tty> [parameters]   - Run PPP over USB.114  Note: you should not automatically start a PPP connection.115  <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1116  [parameters] - Eg. defaultroute debug dump local notty usepeerdns117 118 adb sync notes: adb sync [ <directory> ]119   <localdir> can be interpreted in several ways:120 121   - If <directory> is not specified, both /system and /data partitions will be updated.122 123   - If it is "system" or "data", only the corresponding partition124     is updated.125 126 environmental variables:127   ADB_TRACE                    - Print debug information. A comma separated list of the following values128                                  1 or all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp129   ANDROID_SERIAL               - The serial number to connect to. -s takes priority over this if given.130   ANDROID_LOG_TAGS             - When used with the logcat option, only these debug tags are printed.131 bogon:HelloC1 dn9x$ 

 

这里我们可以输入adb divices查看连接到电脑上的设备,

1 bogon:HelloC1 dn9x$ adb devices2 List of devices attached 3 4LRSDI5DIJVG7HFU    device4 5 bogon:HelloC1 dn9x$ 

 

在测试安卓程序的时候,使用真机会比使用模拟器要快,我一般都是使用真机测试,

安装程序到真机,这里可以看到adb中的一个命令:

1  adb install [-l] [-r] [-d] [-s] [--algo <algorithm name> --key <hex-encoded key> --iv <hex-encoded iv>] <file>2                                - push this package file to the device and install it3                                  (-l means forward-lock the app)4                                  (-r means reinstall the app, keeping its data)5                                  (-d means allow version code downgrade)6                                  (-s means install on SD card instead of internal storage)7                                  (--algo, --key, and --iv mean the file is encrypted already)

 

这里我们可以看到一些安装的详细参数,这里我们进入到/HelloC1/frameworks/runtime-src/proj.android/bin目录下,可以看到生成的HelloC1-debug-unaligned.apk,我们安装此文件到手机中,

1 bogon:bin dn9x$ adb install HelloC1-debug-unaligned.apk2 9771 KB/s (7920657 bytes in 0.791s)3 WARNING: linker: libvc1dec_sa.ca7.so has text relocations. This is wasting memory and is a security risk. Please fix.4 WARNING: linker: libvc1dec_sa.ca7.so has text relocations. This is wasting memory and is a security risk. Please fix.5     pkg: /data/local/tmp/HelloC1-debug-unaligned.apk6 Success7 bogon:bin dn9x$ pwd8 /Users/dn9x/work/study/cocos/HelloC1/frameworks/runtime-src/proj.android/bin9 bogon:bin dn9x$ 

 

 安装成功之后你的手机也会提示,然后再手机上打开可以看到和在浏览器中的效果是一致的,到这里你的cocos2d-js的项目就已经编译并且运行到安卓设备上了,

 

7.其实直接开发中我们往往都是在编译之后通过eclipse打开项目进行编译并且调试项目,这里我们就介绍下用eclipse打开项目并且运行项目,

首先打开eclipse,导入项目,

选择项目:

 

在eclipse中打开项目之后项目会报错,如:

这主要是因为我们要手动设置项目中需要的cocos提供的java文件,这些java文件的位置在:

/HelloC1/frameworks/js-bindings/cocos2d-x/cocos/platform/android/java/src

然后直接复制src中的整个org文件夹到项目的src中,如:

然后配置运行,这里我们在模拟器中运行下看看。在模拟器中就是太慢,还是运行在真机中把,我的手机是联想S568t,安卓版本的是:4.4.2,所以在运行是完全没有问题,

 

截取了下屏幕的快照,

 

下面就会开始记录cocos2d-js中的知识了,

Cocos2d-JS: 2.编译到安卓和iOS