Win中一键打包Cocos Creator安卓包

一、说明

  在Cocos Creator的安卓的项目中,一般会在安卓层加入一些登录、支付、统计等第三方SDK,所以不能用Cocos Creator直接编译生成apk,一般的操作会先用Cocos Creator生成一个安卓工程,然后将安卓工程复制到另一个目录,然后安卓工程添加所需要的功能,再用Android Studio来打包apk。需要用到资源更新时,用Cocos Creator生成资源,再复制到新的安卓工程对应的资源中。 这一系列的操作每次打包都有些繁琐,但可以用脚本来完成。

    1. 使用CocosCreator参数构建资源
    1. 生成热更文件
    1. 使用js脚本用熊猫在线压缩图片
    1. gradlew命令行打包apk

二、环境

  • Cocos Creator 2.4.3: 安装目录为 D:\CocosDashboard\resources\.editors\Creator\2.4.3\CocosCreator.exe
  • SVN:安装了命令行模式,并添加到环境变量中
  • node

三、步骤

1. 整个项目的目录布局

项目根目录
├─AutoCosos                    # cocos项目
│  │  
│  ├─assets                        # cocos资源
│  │  │  Scene.meta
│  │  │  Script.meta
│  │  │  Texture.meta
│  │  ├─resources                     # 所有资源文件目录
│  │  │  │  project.manifest        # 更热比对文件
│  │  │  │  project.manifest.meta
│  │  │  │  version.manifest        # 更热版本文件
│  │  │  │  version.manifest.meta
│  │  │  └─Texture                  # 资源图片文目录
│  │  │
│  │  ├─Scene                     # 场景资源
│  │  └─Script                    # 脚本文件
│  │          
│  ├─build                        # cocos 打包资源目录
│  │  └─jsb-link
│
├─Build                            # 复制出来的安卓工程(从cocos项目->build->jsb-link复制)
│  │  .cocos-project.json
│  │  cocos-project-template.json
│  │  main.js
│  │  project.json
│  │  
│  ├─assets
│  ├─frameworks
│  ├─jsb-adapter
│  └─src
│          
└─Distribute                    # 一键打包脚本目录
        config.ini                # 打包配置文件
        tinypng.js                # 压缩图片js脚本
        version_generator.js     # 热更文件生成js脚本
        一键打包.bat

2. 配置文件说明

在发布目录下有一个config.ini的打包配置文件

; 注意,'='号二边不要加空格
[Common]

; 版本号说明,版本号格式为x.y.z。 
; x:大版本号,一般大改动时加一
; y:次版本号,一般改动后无法热更解决时加一
; z:修订版本号。自动获取,游戏版本为打包日期,资源版本为git/svn版本号,如无版本管理则用0

;游戏版本号
version=1.0

;资源版本号
res=1.0

;版本管理 none-无版本管理,git,svn
vc=git

;热更地址
update=https://dev.zengwu.com.cn/hello_world

3. 调整gradlew工程版本号

修改 安卓工程下的proj.android-studio\app目录中的build.gradle文件,使用安卓的版本号可以通过命令行传入。

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

// 新增代码
def vc = 1          // 从android studio进入时调试版本
def vn = "1.0"  // 从android studio进入时调试版本
if (project.hasProperty('VersionName')) {
    vn = "${VersionName}"
}

if (project.hasProperty('VersionCode')) {
    vc = "${VersionCode}".toInteger()
}
// 新增代码结束

android {
    compileSdkVersion PROP_COMPILE_SDK_VERSION.toInteger()
    buildToolsVersion PROP_BUILD_TOOLS_VERSION

    defaultConfig {
        applicationId "com.zngw.autococos"
        minSdkVersion PROP_MIN_SDK_VERSION
        targetSdkVersion PROP_TARGET_SDK_VERSION
        versionCode vc    // 修改为前面的vc变量
        versionName vn // 修改为前面的vn变量
...
其余代码未调整

4. 完整打包脚本

@echo off

::============= 打包时调整配置 ======================
:: 版本号说明,版本号格式为x.y.z。 
:: x:大版本号,一般大改动时加一
:: y:次版本号,一般改动后无法热更解决时加一
:: z:修订版本号。自动获取,游戏版本为打包日期,资源版本为svn版本号

:: 游戏版本号
set version=
:: 资源版本号
set res=
:: 热更地址
set update=
:: 版本管理
set vc=

call:readini Common version version
call:readini Common res res
call:readini Common update update
call:readini Common vc vc

set buildType=%1

::============= 环境及目录配置 ======================
:: 脚本所在目录
set root_path=%~dp0
:: 工程目录
set project_path=%root_path%..\Build\frameworks\runtime-src\proj.android-studio\
:: 资源目录
set assets_path=%root_path%..\AutoCosos

:: 工程名
set project_name=hello_world
:: 进入资源目录,找到进入文件对应的meta文件,找到里面的uuid填入startScene
set startScene=2d2f792f-a40c-49bb-a189-ed176a246e49
:: 项目中更热比对文件路径
set projectFile=%assets_path%\build\jsb-link\assets\resources\native\6c\6c72e2ae-37ff-4587-801b-6aa4aff1b0a4.manifest
:: 项目中更热版本文件路径
set versionFile=%assets_path%\build\jsb-link\assets\resources\native\06\066c7e06-dfd7-4527-ba79-a795e3b282c1.manifest 

:: cocos creator 程序所在。增加系统环境变理CcPATH:D:\CocosDashboard\resources\.editors\Creator
set cc=D:\CocosDashboard\resources\.editors\Creator\2.4.3\CocosCreator.exe
:: 生成文件
set apk=%project_path%\app\build\outputs\apk\release\%project_name%-release.apk
:: 输出目录
set out_path=%root_path%out
if not exist %out_path% md %out_path%


::============= 获取本地svn版本号为VersionCode版本 ======================
set code=0
if "%vc%" == "svn" (
    :: SVN Version
    for /f "delims=" %%i in ('svn info ../ ^| findstr "Rev:"') do set rev=%%i
    set code=%rev:~18%
) else if "%vc%" == "git" (
    for /f %%i in ('git rev-list HEAD --count') do set code=%%i
)
echo %code%

::============= 输出打包配置信息 ======================
:: 完成详细的版本号
set date=%date:~0,4%%date:~5,2%%date:~8,2%
set version=%version%.%date%
set res=%res%.%code%

:: 输出打包信息
echo 当前打包版本号为:%version% svn版本号: %code%

::============= 打包流程 ======================
:: 打包流程
:main

:: 1. 构建资源
call:ccBuild

:: 2. 生成热更文件
call:hotUpdate

:: 3. 复制资源文件
:: 脚本这里这复制assets、jsb-adapter、src这个目录的资源,main.js热更时会修改,调整后需要手动复制,脚本不自动复制
xcopy /q /s /y %assets_path%\build\jsb-link\assets %root_path%..\Build\assets
xcopy /q /s /y %assets_path%\build\jsb-link\src %root_path%..\Build\src
xcopy /q /s /y %assets_path%\build\jsb-link\jsb-adapter %root_path%..\Build\jsb-adapter

:: 4. 压缩图片
call:tinypng

:: 5. 遍历打包
call:buildApk

:: 6. 复制资源到打包目录,用于热更等
xcopy /q /s /y %root_path%..\Build\assets %out_path%\%res%\assets\
xcopy /q /s /y %root_path%..\Build\src %out_path%\%res%\src\

goto finish

::============= 以下是步骤函数 ======================
:: 读取ini配置. %~1:域,%~2:key %~3:返回的value值
:readini 
@setlocal enableextensions enabledelayedexpansion
@echo off
set file=config.ini
set area=[%~1]
set key=%~2
set currarea=
for /f "usebackq delims=" %%a in ("!file!") do (
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" (
                if "x!key!"=="x!currkey!" (
                    set var=!currval!
                )
            )
        )
    )
)
(endlocal
    set "%~3=%var%"
)
goto:eof

::============= Cocos Creator构建资源======================
:ccBuild
echo 开始打包资源:%assets_path%
%cc% --path %assets_path% --build "title=%project_name%;platform=android;buildPath=./build;startScene=%startScene%;encryptJs=true;inlineSpriteFrames=true;template=link;md5Cache=false"
echo 打包资源完成
goto:eof

::============= 生成热更文件 ======================
:hotUpdate
echo 开始生成热更文件
if exist %out_path%\%res% (
    rd /s /q %out_path%\%res%
    md %out_path%\%res%
)

node version_generator.js -v %res% -u %update% -s %assets_path%/build/jsb-link/ -d %out_path%\%res%
echo copy /y %out_path%\%res%\project.manifest %projectFile%  
copy /y %out_path%\%res%\project.manifest %projectFile%  
copy /y %out_path%\%res%\version.manifest %versionFile%
echo 热更文件成生完成
goto:eof

::============= 压缩图片 ======================
:tinypng
echo 压缩图片
node ./tinypng.js -f %root_path%../Build/assets/resources/native -deep
goto:eof
::=============   gradle打包   ======================
:: 单渠道打包函数
:buildApk
echo 正在打包...
cd %project_path%

::call gradlew clean :%project_name%:assembleRelease -PVersionName=%version% -PVersionCode=%code%
call gradlew :%project_name%:assembleRelease -PVersionName=%version% -PVersionCode=%code%
if %errorlevel% == 1 (
    call:fail
)

set out=%out_path%\%project_name%.v%version%.apk
copy /y %apk% %out%
cd %root_path%

echo 打包完成

goto:eof

:: 失败
:fail
echo 打包失败
pause
exit 1

:: 完成
:finish
echo 完成打包
pause
::exit

4. 脚本中环境配置

在脚本中需要配置一些环境遍变。

资源目录

这里可以使用相对路径,先获取脚本所在的目录,然后设置cocos项目的相对路径,如:

set assets_path=%root_path%..\AutoCosos

工程名

项目名为Cocos Creator构建发布时的游戏名称,如:

set project_name=hello_world

startScene场景名

找到Cocos Creator构建发布时的初始场景中的.fire文件,并前往所在目录,找到同名.fire.meta的文件,用文本编辑器打开,找到uuid。如:helloworld.fire.meta文件中的uuid为2d2f792f-a40c-49bb-a189-ed176a246e49

set startScene=2d2f792f-a40c-49bb-a189-ed176a246e49

热更版本文件发布后路径

在Cocos Creator项目中,装版本更热更文件project.manifest、 version.manifest放在了assets/resources目录下,找到对应的.meta文件,打开取出对应的uuid值。然后设置版本文件的路径,这个目录前面为 build\jsb-link\assets\resources\native,后面为uuid前二位的目录,再接uuid.manifest的文件名。如:

:: 项目中更热比对文件路径
set projectFile=%assets_path%\build\jsb-link\assets\resources\native\6c\6c72e2ae-37ff-4587-801b-6aa4aff1b0a4.manifest
:: 项目中更热版本文件路径
set versionFile=%assets_path%\build\jsb-link\assets\resources\native\06\066c7e06-dfd7-4527-ba79-a795e3b282c1.manifest 

四、打包测试

直接双击运行一键打包.bat就可以了。 等待生成完成,生成的文件会在脚本所在目录的out目录中

 out
    │  hello_world.v1.0.20210314.apk  # 生成apk
    │  
    └─1.0.1                           # 生成资源目录
        │  project.manifest
        │  version.manifest
        │  
        ├─assets
        └─src

附:

完整的测试项目下载 https://github.com/zngw/auto-cocos

0%