Unity Android一键打包

29 篇文章 0 订阅
6 篇文章 0 订阅

开发过程中总是需要不停的打包,给策划或者测试人员测试,花费很多时间。在这里做一个一键打包工具,让测试人员自行打包,开发只需要上传代码,测试人员只需要拉取,然后打包就可以。

iOS 制作ipa,设置导出Xcode工程配置:https://blog.csdn.net/qq_33515628/article/details/106361332

一、效果图

1、配置签名:

项目需要配置签名,这里点击一下就可以配置签名(如果项目中不需要,可以忽略此处)

2、Build Addressable:

每次打包的时候,需要build Assressable,因为非开发人员,可能不知道具体怎么用或者操作比较繁琐,在这里也一键配置一下如果项目中不需要,可以忽略此处)

3、制作安卓包:

使用代码制作APK。旁边有toggle,如果点击“制作安卓包”包含上面所有的。“内网”如果勾选就是测试服,如果不勾选就是线上服。

测试人员,只需要点击“制作安卓包”按钮,就可以打出APK包,放在桌面上。

二、代码部分

1、菜单栏显示

方便不熟悉Unity界面人员使用

 [UnityEditor.MenuItem("xxxx/制作安卓包", false, 1)]

2、通过GUI画出面板

        GUILayout.Space(20);
        GUILayout.BeginVertical(); 
        bool clickSign = GUILayout.Button("配置签名", GUILayout.Height(30), GUILayout.Width(120));
        bool clickBuildAddress = GUILayout.Button("Build Addressable", GUILayout.Height(30), GUILayout.Width(120));
        GUILayout.BeginHorizontal();
        bool clickAndroid = GUILayout.Button("制作安卓包", GUILayout.Height(30), GUILayout.Width(120));
        this.isSign = GUILayout.Toggle( this.isSign, "配置签名");
        this.isBuildAddressable = GUILayout.Toggle(this.isBuildAddressable, "Build Addressable");
        this.isNeiWang = GUILayout.Toggle( this.isNeiWang, "内网");
        GUILayout.EndHorizontal();
       
        GUILayout.EndVertical(); 

3、配置签名

        PlayerSettings.companyName = "xxx";
        PlayerSettings.productName = "xxx";
        //需要把签名文件放在Assets同一级的目录中
        PlayerSettings.Android.keystoreName = "user.keystore";
        PlayerSettings.Android.keystorePass = "123456";
        //BundleID
        PlayerSettings.Android.keyaliasName = "com.xxxx.xxx.xxxxx";
        PlayerSettings.Android.keyaliasPass = "123456";

4、Build Addressable

 UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.BuildPlayerContent();

5、制作安卓包

        //获取桌面地址
        string buildPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        UnityEngine.Debug.Log("安装包路径:"+buildPath);
        string name = "安装包";
        //是否是开发环境,也可以配置到面板上
        EditorUserBuildSettings.development = true;
        //使用Unity打包,不需要出Android工程,防止其他人员的选项为Gradle
        EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Internal;
        //把所有的Scene加入
        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (!scene.enabled) continue;
            levels.Add(scene.path);
        }
        //选择安卓平台
        EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.Android);
        DateTime dt = DateTime.Now;
        string tempName = this.isNeiWang ? "内网" : "外网"; 
        string APKName = buildPath+"/"+name +"_"+ tempName + string.Format("{0:yyyyMMddHHmm}", dt) + ".apk";
        UnityEngine.Debug.Log("打包的名字:" + APKName);
        //开始制作安卓包
        BuildPipeline.BuildPlayer(levels.ToArray(), APKName, BuildTarget.Android, BuildOptions.Development);

三、全部代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class BuildAndroidApk : EditorWindow {
    static BuildAndroidApk m_Window;
    static int windowWidth = 440;
    static int windowHeight = 400;
    private bool isSign = true;
    private bool isBuildAddressable = true;
    private bool isNeiWang = true;
    static List<string> levels = new List<string>();

    [UnityEditor.MenuItem("xxx/制作安卓包", false, 1)]
    public static void ShowBuildPackage() {
        m_Window = GetWindow<BuildAndroidApk>(true, "Build Package");
        m_Window.minSize = m_Window.maxSize = new Vector2(windowWidth, windowHeight);
    }

    public void OnGUI() {
        GUILayout.Space(20);
        GUILayout.BeginVertical(); 
        bool clickSign = GUILayout.Button("配置签名", GUILayout.Height(30), GUILayout.Width(120));
        bool clickBuildAddress = GUILayout.Button("Build Addressable", GUILayout.Height(30), GUILayout.Width(120));
        GUILayout.BeginHorizontal();
        bool clickAndroid = GUILayout.Button("制作安卓包", GUILayout.Height(30), GUILayout.Width(120));
        this.isSign = GUILayout.Toggle( this.isSign, "配置签名");
        this.isBuildAddressable = GUILayout.Toggle(this.isBuildAddressable, "Build Addressable");
        this.isNeiWang = GUILayout.Toggle( this.isNeiWang, "内网");
        GUILayout.EndHorizontal();
       
        GUILayout.EndVertical(); 
        
        this.OnClickSetSign(clickSign);
        this.OnClickGUIBuildAnroid(clickAndroid);
        this.OnClickBuildAddressAble(clickBuildAddress);
    }

    private void OnClickSetSign(bool isClickSetSign) {
        if (!isClickSetSign) {
            return;
        }
        PlayerSettings.companyName = "xxx";
        PlayerSettings.productName = "xxxx";
        PlayerSettings.Android.keystoreName = "user.keystore";
        PlayerSettings.Android.keystorePass = "123456";
        PlayerSettings.Android.keyaliasName = "com.xxx.xxx.xxxx";
        PlayerSettings.Android.keyaliasPass = "123456";
    }

    private void OnClickBuildAddressAble(bool isClick) {
        // UnityEngine.AddressableAssets.
        if (!isClick) {
            return;
        }
        UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.BuildPlayerContent();
    }

    private void OnClickGUIBuildAnroid(bool click)
    {
        if (!click) {
            return;
        }
        string buildPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        UnityEngine.Debug.Log("安装包路径:"+buildPath);
        string name = "安装包";
        EditorUserBuildSettings.development = true;
        EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Internal;

        this.OnClickSetSign(this.isSign);
        this.OnClickBuildAddressAble(this.isBuildAddressable);
        GoldenDungeon.Network.NetworkManager.Instance.initUrlIndex = this.isNeiWang ? 0 : 1;
        
        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (!scene.enabled) continue;
            levels.Add(scene.path);
        }
        EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.Android);
        DateTime dt = DateTime.Now;
        string tempName = this.isNeiWang ? "内网" : "外网"; 
        string APKName = buildPath+"/"+name +"_"+ tempName + string.Format("{0:yyyyMMddHHmm}", dt) + ".apk";
        UnityEngine.Debug.Log("打包的名字:" + APKName);
        BuildPipeline.BuildPlayer(levels.ToArray(), APKName, BuildTarget.Android, BuildOptions.Development);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Unity 一键打包 Android Export Project 并编译 il2cpp,可以分为以下几个步骤: 1. 配置 Android 环境:在 Unity打包 Android 项目,需要配置好 Android SDK、NDK 和 JDK 环境变量。 2. 配置 Unity 设置:在 Unity 中,需要配置好 Android 平台的 Build Settings,设置好所需的 Android 版本和架构,同时也需要设置好 il2cpp 编译选项。 3. 编写自动化脚本:将上述配置步骤封装成自动化脚本,可以使用 Python、Shell 或其他脚本语言来实现。 4. 执行自动化脚本:执行自动化脚本,自动完成 Android Export Project 和 il2cpp 编译。 下面是一个 Python 脚本的示例,可以实现 Unity 一键打包 Android Export Project 并编译 il2cpp: ```python import os # 配置 Android 环境 ANDROID_HOME = "/path/to/android/sdk" ANDROID_NDK_HOME = "/path/to/android/ndk" JAVA_HOME = "/path/to/java" os.environ["ANDROID_HOME"] = ANDROID_HOME os.environ["ANDROID_NDK_HOME"] = ANDROID_NDK_HOME os.environ["JAVA_HOME"] = JAVA_HOME # 配置 Unity 设置 UNITY_PATH = "/path/to/unity/editor" UNITY_PROJECT_PATH = "/path/to/unity/project" UNITY_VERSION = "2019.4.0f1" UNITY_BUILD_TARGET = "android" UNITY_BUILD_ARCHITECTURE = "arm64" UNITY_IL2CPP = "1" UNITY_IL2CPP_CONFIG = "Release" # 执行 Unity 命令行打包 unity_cmd = f"{UNITY_PATH} -batchmode -quit " \ f"-projectPath {UNITY_PROJECT_PATH} " \ f"-logFile /dev/stdout " \ f"-executeMethod BuildPipeline.BuildAndroid " \ f"-buildTarget {UNITY_BUILD_TARGET} " \ f"-androidVersion {ANDROID_VERSION} " \ f"-androidArchitecture {UNITY_BUILD_ARCHITECTURE} " \ f"-il2cpp {UNITY_IL2CPP} " \ f"-il2cppConfig {UNITY_IL2CPP_CONFIG}" os.system(unity_cmd) # 编译 il2cpp il2cpp_cmd = f"{UNITY_PATH} -batchmode -quit " \ f"-projectPath {UNITY_PROJECT_PATH} " \ f"-logFile /dev/stdout " \ f"-executeMethod UnityEditor.Il2Cpp.BuildIl2Cpp " \ f"-buildOutputPath /path/to/output " \ f"-il2cppCompilerConfiguration {UNITY_IL2CPP_CONFIG} " \ f"-androidPlatformVersion {ANDROID_VERSION} " \ f"-androidTargetArch {UNITY_BUILD_ARCHITECTURE}" os.system(il2cpp_cmd) ``` 需要注意的是,上述脚本仅供参考,实际应用中需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值