首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Lua 腳本自動化構建 APK:Cocos2d-x + Lua 項目完整流水線

     編輯:更多程式設計知識

從手寫 .bat 遷移到 Lua 腳本構建 APK,獲得**跨平台、可擴展、結構化**的構建流水線。本文提供適用於 **Cocos2d-x + Lua** 項目的完整構建腳本,涵蓋 SVN 更新、LuaJIT 編譯、ASMaker 加密、NDK 編譯、Ant 打包全流程。

腳本架構


-- 路徑配置區 (需按實際環境修改)
local JAVA_HOME = 'C:/Program Files/Java/jdk1.8.0_05'
local ANT_HOME = 'D:/ProgramSoftware/apache-ant-1.9.4'
local ANDROID_HOME = 'D:/ProgramSoftware/android-sdk'
local NDK_HOME = 'D:/ProgramSoftware/android-ndk-r9d'
local SVN_HOME = 'C:/Program Files/TortoiseSVN/bin'

local ENGINE_DIR = 'D:/engine'
local WORK_DIR = 'D:/engine/projects/XXXX/proj.android'
local RESOURCES_DIR = WORK_DIR .. '/../Resources'
local ASSETS_DIR = WORK_DIR .. '/assets'

核心流程函數

  1. 目錄檢查/創建:dir_exist()、check_mk_path()。
  2. 清理舊產物:刪除 assets/、舊 .apk。
  3. SVN 更新(可選):引擎碼、項目碼。
  4. LuaJIT 編譯:遍歷 Resources/,.lua → luajit -b 字節碼,其他文件複製到 Resources_jit/。
  5. ASMaker 加密:ASmaker.exe -i Resources_jit -o assets -f .lua -e .exe 加密 Lua 字節碼。
  6. NDK 編譯:ndk-build -C proj.android NDK_MODULE_PATH=... 編譯 C++ 原生庫。
  7. Android 工程更新:android update project、update lib-project。
  8. Ant Release 打包:ant release 生成簽名 APK。

關鍵實現片段


-- 遍歷 Resources 目錄進行 LuaJIT
local cmd = string.format('pushd %q & dir /b /s & popd', RESOURCES_DIR)
local file_list = io.popen(cmd)
for line in file_list:lines() do
    local line_to = string.gsub(line, 'Resources', 'Resources_jit')
    if dir_exist(line) then
        check_mk_path(line_to)
    else
        if string.find(line, '%.lua$') then
            jit_file(WORK_DIR, line, line_to)  -- luajit -b
        else
            copy_file(line, line_to)           -- 直接複製
        end
    end
end
file_list:close()

-- ASMaker 加密
local enc_cmd = WORK_DIR .. 'ASmaker.exe -i ' .. WORK_DIR .. '..Resources_jit -o ' .. ASSETS_DIR .. ' -f .lua -e .exe'
local enc_re = run_one_cmd(enc_cmd)
if enc_re:find("失敗") then os.exit(1) end

-- NDK Build
local ndk_cmd = 'call ' .. NDK_HOME .. 'ndk-build -C ' .. WORK_DIR .. ' NDK_MODULE_PATH=' .. ENGINE_DIR .. ';' .. ENGINE_DIR .. 'cocos2dx/platform/third_party/android/prebuilt'
if run_one_cmd(ndk_cmd):find("error") then os.exit(1) end

-- Ant Release
local ant_cmd = 'pushd ' .. WORK_DIR .. ' & call ' .. ANT_HOME .. 'bin/ant release'
if run_one_cmd(ant_cmd):find("failed") then os.exit(1) end

輔助函數 (需自行實現)

  • jit_file(work_dir, src, dst):調用 luajit -b src dst。
  • copy_file(src, dst):二進制複製。
  • run_one_cmd(cmd):io.popen(cmd):read('*a') 執行命令捕獲輸出。
  • rmdir(path)、delfile(path):遞歸刪除目錄/文件。

優勢總結

  • **Lua 語法優於 bat**:數據結構、字符串處理、錯誤處理、模塊化極其強大。
  • **跨平台潛力**:路徑分隔符統一用 /,Windows/Linux/macOS 少量調整即可運行。
  • **可擴展**:輕鬆接入 CI/CD (Jenkins/GitLab CI)、郵件通知、版本號自增、多渠道打包。
  • **單一腳本管理全流程**:從代碼更新到 APK 產出,一鍵執行,減少人為錯誤。

總結

用 Lua 重寫構建腳本是**工程化思維**的體現:將脆弱、難維護的 bat 替換為結構化、可測試、可擴展的真正程序。Cocos2d-x + Lua 項目天然適合 Lua 構建腳本,**開發語言即構建語言**,降低認知負荷,提升構建可靠性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved