一瓢湃、說明
在Cocos Creator的安卓的項(xiàng)目中矢炼,一般會(huì)在安卓層加入一些登錄斤葱、支付慷垮、統(tǒng)計(jì)等第三方SDK,所以不能用Cocos Creator直接編譯生成apk揍堕,一般的操作會(huì)先用Cocos Creator生成一個(gè)安卓工程料身,然后將安卓工程復(fù)制到另一個(gè)目錄,然后安卓工程添加所需要的功能鹤啡,再用Android Studio來打包apk惯驼。需要用到資源更新時(shí),用Cocos Creator生成資源,再復(fù)制到新的安卓工程對(duì)應(yīng)的資源中祟牲。 這一系列的操作每次打包都有些繁瑣隙畜,但可以用腳本來完成。
- 使用CocosCreator參數(shù)構(gòu)建資源
- 生成熱更文件
- 使用js腳本用熊貓?jiān)诰€壓縮圖片
- gradlew命令行打包apk
二说贝、環(huán)境
- Cocos Creator 2.4.3: 安裝目錄為
D:\CocosDashboard\resources\.editors\Creator\2.4.3\CocosCreator.exe
- SVN:安裝了命令行模式议惰,并添加到環(huán)境變量中
- node
三、步驟
1. 整個(gè)項(xiàng)目的目錄布局
項(xiàng)目根目錄
├─AutoCosos # cocos項(xiàng)目
│ │
│ ├─assets # cocos資源
│ │ │ Scene.meta
│ │ │ Script.meta
│ │ │ Texture.meta
│ │ ├─resources # 所有資源文件目錄
│ │ │ │ project.manifest # 更熱比對(duì)文件
│ │ │ │ project.manifest.meta
│ │ │ │ version.manifest # 更熱版本文件
│ │ │ │ version.manifest.meta
│ │ │ └─Texture # 資源圖片文目錄
│ │ │
│ │ ├─Scene # 場(chǎng)景資源
│ │ └─Script # 腳本文件
│ │
│ ├─build # cocos 打包資源目錄
│ │ └─jsb-link
│
├─Build # 復(fù)制出來的安卓工程(從cocos項(xiàng)目->build->jsb-link復(fù)制)
│ │ .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. 配置文件說明
在發(fā)布目錄下有一個(gè)config.ini的打包配置文件
; 注意乡恕,'='號(hào)二邊不要加空格
[Common]
; 版本號(hào)說明言询,版本號(hào)格式為x.y.z。
; x:大版本號(hào)傲宜,一般大改動(dòng)時(shí)加一
; y:次版本號(hào)运杭,一般改動(dòng)后無法熱更解決時(shí)加一
; z:修訂版本號(hào)。自動(dòng)獲取函卒,游戲版本為打包日期辆憔,資源版本為git/svn版本號(hào),如無版本管理則用0
;游戲版本號(hào)
version=1.0
;資源版本號(hào)
res=1.0
;版本管理 none-無版本管理报嵌,git虱咧,svn
vc=git
;熱更地址
update=https://dev.zengwu.com.cn/hello_world
3. 調(diào)整gradlew工程版本號(hào)
修改 安卓工程下的proj.android-studio\app
目錄中的build.gradle
文件,使用安卓的版本號(hào)可以通過命令行傳入锚国。
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
// 新增代碼
def vc = 1 // 從android studio進(jìn)入時(shí)調(diào)試版本
def vn = "1.0" // 從android studio進(jìn)入時(shí)調(diào)試版本
if (project.hasProperty('VersionName')) {
vn = "${VersionName}"
}
if (project.hasProperty('VersionCode')) {
vc = "${VersionCode}".toInteger()
}
// 新增代碼結(jié)束
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變量
...
其余代碼未調(diào)整
4. 完整打包腳本
@echo off
::============= 打包時(shí)調(diào)整配置 ======================
:: 版本號(hào)說明腕巡,版本號(hào)格式為x.y.z。
:: x:大版本號(hào)血筑,一般大改動(dòng)時(shí)加一
:: y:次版本號(hào)绘沉,一般改動(dòng)后無法熱更解決時(shí)加一
:: z:修訂版本號(hào)。自動(dòng)獲取云挟,游戲版本為打包日期梆砸,資源版本為svn版本號(hào)
:: 游戲版本號(hào)
set version=
:: 資源版本號(hào)
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
::============= 環(huán)境及目錄配置 ======================
:: 腳本所在目錄
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
:: 進(jìn)入資源目錄,找到進(jìn)入文件對(duì)應(yīng)的meta文件园欣,找到里面的uuid填入startScene
set startScene=2d2f792f-a40c-49bb-a189-ed176a246e49
:: 項(xiàng)目中更熱比對(duì)文件路徑
set projectFile=%assets_path%\build\jsb-link\assets\resources\native\6c\6c72e2ae-37ff-4587-801b-6aa4aff1b0a4.manifest
:: 項(xiàng)目中更熱版本文件路徑
set versionFile=%assets_path%\build\jsb-link\assets\resources\native\06\066c7e06-dfd7-4527-ba79-a795e3b282c1.manifest
:: cocos creator 程序所在帖世。增加系統(tǒng)環(huán)境變理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版本號(hào)為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%
::============= 輸出打包配置信息 ======================
:: 完成詳細(xì)的版本號(hào)
set date=%date:~0,4%%date:~5,2%%date:~8,2%
set version=%version%.%date%
set res=%res%.%code%
:: 輸出打包信息
echo 當(dāng)前打包版本號(hào)為:%version% svn版本號(hào): %code%
::============= 打包流程 ======================
:: 打包流程
:main
:: 1. 構(gòu)建資源
call:ccBuild
:: 2. 生成熱更文件
call:hotUpdate
:: 3. 復(fù)制資源文件
:: 腳本這里這復(fù)制assets、jsb-adapter沸枯、src這個(gè)目錄的資源日矫,main.js熱更時(shí)會(huì)修改,調(diào)整后需要手動(dòng)復(fù)制绑榴,腳本不自動(dòng)復(fù)制
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. 復(fù)制資源到打包目錄哪轿,用于熱更等
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
::============= 以下是步驟函數(shù) ======================
:: 讀取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構(gòu)建資源======================
: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打包 ======================
:: 單渠道打包函數(shù)
: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. 腳本中環(huán)境配置
在腳本中需要配置一些環(huán)境遍變翔怎。
資源目錄
這里可以使用相對(duì)路徑窃诉,先獲取腳本所在的目錄杨耙,然后設(shè)置cocos項(xiàng)目的相對(duì)路徑,如:
set assets_path=%root_path%..\AutoCosos
工程名
項(xiàng)目名為Cocos Creator構(gòu)建發(fā)布時(shí)的游戲名稱
飘痛,如:
set project_name=hello_world
startScene場(chǎng)景名
找到Cocos Creator構(gòu)建發(fā)布時(shí)的初始場(chǎng)景
中的.fire文件珊膜,并前往所在目錄,找到同名.fire.meta的文件宣脉,用文本編輯器打開车柠,找到uuid。如:helloworld.fire.meta文件中的uuid為2d2f792f-a40c-49bb-a189-ed176a246e49
set startScene=2d2f792f-a40c-49bb-a189-ed176a246e49
熱更版本文件發(fā)布后路徑
在Cocos Creator項(xiàng)目中塑猖,裝版本更熱更文件project.manifest竹祷、 version.manifest放在了assets/resources目錄下,找到對(duì)應(yīng)的.meta文件羊苟,打開取出對(duì)應(yīng)的uuid值塑陵。然后設(shè)置版本文件的路徑,這個(gè)目錄前面為 build\jsb-link\assets\resources\native蜡励,后面為uuid前二位的目錄猿妈,再接uuid.manifest的文件名。如:
:: 項(xiàng)目中更熱比對(duì)文件路徑
set projectFile=%assets_path%\build\jsb-link\assets\resources\native\6c\6c72e2ae-37ff-4587-801b-6aa4aff1b0a4.manifest
:: 項(xiàng)目中更熱版本文件路徑
set versionFile=%assets_path%\build\jsb-link\assets\resources\native\06\066c7e06-dfd7-4527-ba79-a795e3b282c1.manifest
四巍虫、打包測(cè)試
直接雙擊運(yùn)行一鍵打包.bat
就可以了。 等待生成完成鳍刷,生成的文件會(huì)在腳本所在目錄的out目錄中
out
│ hello_world.v1.0.20210314.apk # 生成apk
│
└─1.0.1 # 生成資源目錄
│ project.manifest
│ version.manifest
│
├─assets
└─src
附:
完整的測(cè)試項(xiàng)目下載 https://github.com/zngw/auto-cocos