Paquete Unity Android con un solo clic

Durante el proceso de desarrollo, siempre es necesario empaquetar y probar constantemente para los planificadores o evaluadores, lo que lleva mucho tiempo. Aquí se crea una herramienta de empaquetado con un solo clic para que los probadores puedan empaquetarlos ellos mismos. El desarrollo solo necesita cargar el código y los probadores solo necesitan extraerlo y empaquetarlo.

Cree ipa para iOS y establezca la configuración del proyecto de exportación Xcode: https://blog.csdn.net/qq_33515628/article/details/106361332

1. Dibujo de efectos

1. Configurar firma:

El proyecto necesita configurar una firma. Haga clic aquí para configurar la firma (si no es necesaria en el proyecto, puede ignorarlo)

2 、 Construir direccionable:

Cada vez que empaqueta, necesita compilar Assressable, porque es posible que los no desarrolladores no sepan cómo usarlo o la operación sea engorrosa. Aquí hay una configuración con un solo clic. Si no es necesario en el proyecto, puede ignorarlo)

3. Crea un paquete de Android:

Crea un APK usando código. Hay un interruptor al lado. Si hace clic en "Crear paquete de Android", incluirá todo lo anterior. Si se marca "Intranet", será un servidor de prueba, si no, será un servidor en línea.

Los evaluadores solo necesitan hacer clic en el botón "Crear paquete de Android" para crear el paquete APK y colocarlo en el escritorio.

2. Parte del código

1. Visualización de la barra de menú

Fácil de usar para personas que no están familiarizadas con la interfaz de Unity.

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

2. Dibuja el panel a través de la 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. Configurar firma

        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、Construir direccionable

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

5.Hacer paquete de Android

        //获取桌面地址
        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);

3. Todos los códigos

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);
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/qq_33515628/article/details/106359932
Recomendado
Clasificación