unity Jenkins自动化打包


Jenkins 构建流水线规范

1. 参数解析与初始化
# Python 脚本示例:解析 Jenkins 参数
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--svn_repo", help="SVN 仓库地址", required=True)
parser.add_argument("--unity_project", help="Unity 工程路径", default="./UnityProject")
parser.add_argument("--build_target", choices=["android", "ios"], default="android")
args = parser.parse_args()
2. 工作区清理
# 清理旧文件
import shutil, os

def clean_workspace():
    # 删除旧 APK
    if os.path.exists("./build"):
        shutil.rmtree("./build") 
    # 还原 SVN 工程(避免残留冲突)
    os.system("svn revert --recursive .")  
    os.system("svn cleanup --remove-unversioned")
3. 代码与资源更新
# SVN 更新与冲突检测
def update_code():
    result = os.system("svn update --accept theirs-full")
    if result != 0:
        raise Exception("SVN 更新失败或存在未解决冲突!")
4. 资源分包处理
# 分包脚本核心逻辑
def split_assets():
    # 1. 读取配置清单 asset_config.json
    # 2. 按规则分割资源文件
    # 3. 生成每个分包的 MD5 校验文件
    # 4. 生成 version.xml(包含渠道 Sign、分包数量、服务器地址)
    with open("version.xml", "w") as f:
        f.write(f"<Version sign='{args.channel}'>...</Version>")
5. Unity 导出 Android 工程
# Unity 命令行导出(示例)
Unity -quit -batchmode -projectPath ./UnityProject -executeMethod BuildTool.ExportAndroidProject -logFile build.log

只保留主工程需要的文件,删除如mainfest,java,res的东西。

导出后清理冗余文件

# 删除非必要文件(Gradle 构建专用)
to_delete = ["src", "res", "AndroidManifest.xml"]
for path in to_delete:
    if os.path.exists(path):
        shutil.rmtree(path)
6. Gradle 构建 APK
// build.gradle 优化配置
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles 'proguard-unity.txt'
            signingConfig signingConfigs.release // 预配置签名
        }
    }
}

Jenkins 执行构建

./gradlew assembleRelease --stacktrace
7. APK 加固与签名
# 使用 ACE 加固(命令行工具)
def reinforce_apk():
    os.system("java -jar ace_cli.jar -i app-release.apk -o app-reinforced.apk")

# 强制重新签名(避免加固破坏签名)
os.system("apksigner sign --ks release.keystore app-reinforced.apk")

通过签名,玩家可以通过 apk大小生成一个哈希值,然后通过私钥+哈希值=证书,然后通过证书加算法可以得到对应的哈希值,然后通过哈希值可以反推apk文件是否发生改变,如果发生改变需要重新签名,
就相当于信封一样,证书和apk绑定在一起,如果修改apk就会导致哈希值变化也就是证书被损坏,所以任何导致apk变换的情况都需要重新签名,ace加固也会导致重新签名。

8. 上传与分发
# 上传至资源服务器(示例)
import requests

def upload_file(file_path):
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    with open(file_path, "rb") as f:
        response = requests.post("https://cdn.yourdomain.com/upload", files={"file": f}, headers=headers)
    if response.status_code != 200:
        raise Exception("上传失败!")

# 上传符号表(Bugly 兼容)
upload_file("mapping.txt") 
upload_file("app-release.md5")



通过以上规范,可实现高效、安全的自动化构建流程。建议配合 Jenkins Pipeline 可视化配置,并通过 Jenkinsfile 实现版本化构建脚本管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芊芊的君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值