Win中一鍵打包Cocos Creator安卓包

一瓢湃、說明

在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)的資源中祟牲。 這一系列的操作每次打包都有些繁瑣隙畜,但可以用腳本來完成。

    1. 使用CocosCreator參數(shù)構(gòu)建資源
    1. 生成熱更文件
    1. 使用js腳本用熊貓?jiān)诰€壓縮圖片
    1. 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末占遥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子输瓜,更是在濱河造成了極大的恐慌瓦胎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搔啊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡北戏,警方通過查閱死者的電腦和手機(jī)负芋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜愈,“玉大人旧蛾,你說我怎么就攤上這事∪浼蓿” “怎么了锨天?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剃毒。 經(jīng)常有香客問我病袄,道長(zhǎng)搂赋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任益缠,我火速辦了婚禮脑奠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘左刽。我一直安慰自己捺信,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布欠痴。 她就那樣靜靜地躺著迄靠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喇辽。 梳的紋絲不亂的頭發(fā)上掌挚,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音菩咨,去河邊找鬼吠式。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抽米,可吹牛的內(nèi)容都是我干的特占。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼云茸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼是目!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起标捺,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤懊纳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亡容,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤疯,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年闺兢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茂缚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡列敲,死狀恐怖阱佛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戴而,我是刑警寧澤凑术,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站所意,受9級(jí)特大地震影響淮逊,放射性物質(zhì)發(fā)生泄漏催首。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一泄鹏、第九天 我趴在偏房一處隱蔽的房頂上張望郎任。 院中可真熱鬧,春花似錦备籽、人聲如沸舶治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霉猛。三九已至,卻和暖如春珠闰,著一層夾襖步出監(jiān)牢的瞬間惜浅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工伏嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坛悉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓承绸,卻偏偏與公主長(zhǎng)得像裸影,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子军熏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容