Unity3d通过脚本生成apk

参考链接:http://www.jianshu.com/p/a9261113b4ac

照着链接的方法并没有正确生成APK,IPA没有测试过,不过大致的方法是正确的,修改如下:

Environment.bat

:: set your own Unity path
set unity="D:\Program Files\Unity\Editor\Unity.exe"
:: -debug or -release
set debugParam=-release

set projectPath="E:\mycode\test\testpro"

UnityToApk.bat

call Environment.bat

echo "Start Build Unity to Apk"

%unity% -batchmode -projectPath %projectPath% -executeMethod CommandBuilder.PreBuild %debugParam% -quit -logFile ./PreBuild.log
%unity% -batchmode -projectPath %projectPath% -executeMethod CommandBuilder.Build %debugParam% -android -quit -logFile ./BuildApk.log

echo "End Build,please see log PreBuild.log and BuildApk.log"

cs脚本,放在Editor目录下

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;

public class CommandBuilder {

    private static string[] build_scenes = { "Assets/ddd.unity" };

    private static bool ms_isDebugBuild = false;
    private static BuildTarget ms_buildTarget = BuildTarget.Android;

    private static string XCODE_PROJECT_NAME = "XCodeProject";
    private static string BUILD_OUTPUT_ANDROID = Application.dataPath + "/Bin/Android/";

    private static void UpdateBuildFlag()
    {
        string[] args = System.Environment.GetCommandLineArgs();
        foreach (string oneArg in args)
        {
            if (oneArg != null && oneArg.Length > 0)
            {
                if (oneArg.ToLower().Contains("-debug"))
                {
                    Debug.Log("\"-debug\" is detected, switch to debug build.");
                    ms_isDebugBuild = true;
                    return;
                }
                else if (oneArg.ToLower().Contains("-release"))
                {
                    Debug.Log("\"-release\" is detected, switch to release build.");
                    ms_isDebugBuild = false;
                    return;
                }
            }
        }

        if (ms_isDebugBuild)
        {
            Debug.Log("neither \"-debug\" nor \"-release\" is detected, current is to debug build.");
        }
        else
        {
            Debug.Log("neither \"-debug\" nor \"-release\" is detected, current is to release build.");
        }

    }

    private static void UpdateBuildTarget()
    {
        string[] args = System.Environment.GetCommandLineArgs();
        foreach (string oneArg in args)
        {
            if (oneArg != null && oneArg.Length > 0)
            {
                if (oneArg.ToLower().Contains("-android"))
                {
                    Debug.Log("\"-android\" is detected, switch build target to android.");
                    ms_buildTarget = BuildTarget.Android;
                    return;
                }
                else if (oneArg.ToLower().Contains("-iphone"))
                {
                    Debug.Log("\"-iphone\" is detected, switch build target to iphone.");
                    ms_buildTarget = BuildTarget.iOS;
                    return;
                }
                else if (oneArg.ToLower().Contains("-ios"))
                {
                    Debug.Log("\"-ios\" is detected, switch build target to iphone.");
                    ms_buildTarget = BuildTarget.iOS;
                    return;
                }
            }
        }

        Debug.Log("neither \"-android\", \"-ios\" nor \"-iphone\" is detected, current build target is: " + ms_buildTarget);
    }

    public static void PreBuild()
    {
        Debug.Log("PreBuild");
        UpdateBuildFlag();
    }
    public static void Build()
    {
        Debug.Log("Build");
        UpdateBuildTarget();

        BuildOptions buildOption = BuildOptions.None;
        if (ms_isDebugBuild)
        {
            buildOption |= BuildOptions.Development;
            buildOption |= BuildOptions.AllowDebugging;
            buildOption |= BuildOptions.ConnectWithProfiler;
        }
        else
        {
            buildOption |= BuildOptions.None;
        }

        string locationPathName;
        if (BuildTarget.iOS == ms_buildTarget)
        {
            locationPathName = XCODE_PROJECT_NAME;
        }
        else
        {
            locationPathName = BUILD_OUTPUT_ANDROID;

         //原链接此处没有生成目录,而是使用rmdir mkdir生成,实际测试时无法将APK复制进目录中,所以讲目录修改如下
             if (Directory.Exists(locationPathName))
                Directory.Delete(locationPathName, true);

            Directory.CreateDirectory(locationPathName);

            System.DateTime time = System.DateTime.Now;
            locationPathName += "test_" + time.Month.ToString("D2") + time.Day.ToString("D2") +
                "_" + time.Hour.ToString("D2") + time.Minute.ToString("D2") + ".apk";
        }
        BuildPipeline.BuildPlayer(build_scenes, locationPathName, ms_buildTarget, buildOption);
    }
    public static void PostBuild()
    {
        Debug.Log("PostBuild");
    }

}
时间: 2024-10-08 07:55:23

Unity3d通过脚本生成apk的相关文章

Unity3D研究院之脚本生成Android Google Project

一般安卓自动化打包直接会生成个APK出来,但是我不想生成APK,我想生成Eclipse项目. 然后在自动化完成后面的打包工作. 1 2 3 4 5 6 7 8 9 10 11 using UnityEngine; using System.Collections; using UnityEditor; public class NewBehaviourScript : Editor { [MenuItem("Tools/Build Google Project")] static pu

android 用命令行打包生成 apk

android 用 ant 进行 build. android sdk 下面的 tools/ant 下面的 build.xml 就是 build 的整个过程. 其中的 build 参数可在 ant.properties 文件中进行 override.也可以自己定制 build 的脚本. 用 ant build 非常简单 1)安装 ant 并加入到系统 path 变量中 2)为项目生成 build.xml android update project -p . 3)生成 debug 版本 ant

快速生成apk 自动发布到网站 便于测试

遇到的问题: 开发者生成的apk 需要不断给 测试安装让他们测试.有没有脚本自动将最新apk上传到服务器,让测试自己安装测试呢?mac电脑 怎么自己搭建文件服务器  启动Tomcat功能在这里不在赘述,有不懂的请你多多百度和Google  然后把你的localhost启用起来!! 不要怂就是干!!! 解决方案: #!/usr/bin/env bash targetPath=/Library/WebServer/Documents/lixiaodaoaaa newRarApkFile=$(date

【转】Unity3D中脚本的执行顺序和编译顺序

支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对

eclipse android 设置及修改生成apk的签名文件

http://hold-on.iteye.com/blog/2064642 ---  原文 eclipse android 设置及修改生成apk的签名文件 博客分类: Android android eclipse 设置及修改生成apk的签名文件 1. 问题: 平时在使用eclipse进行android project开发时,由于每个项目组都有自身的签名, 但默认Eclipse ADT调试运行使用的是临时生成的Debug专用证书,默认为C:\Users\XXX\.android\debug.ke

Unity 生成APK 出错的解决方法

在unity生成apk时,报错: Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details. C:\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W\aapt.exe package --auto-add-overlay -v -f -m -J gen -M A

Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用aapt命令生成R.java文件 2.用aidl命令生成相应java文件 3.用javac命令编译java源文件生成class文件 4.用dx.bat将class文件转换成classes.dex文件 5.用aapt命令生成资源包文件resources.ap_ 6.用apkbuilder.bat打包资源

使用 jenkins 自动化编译cordova for android 生成 APK

引言 前文中已经介绍了什么是cordova 为什么要用cordova,基础的环境搭建以及如何编译打包生成APK安装包,接下来我们介绍如何使用Jenkins 自动化编译打包生成APK安装包! 服务器搭建 在搭建jerkins之前首先需要一台服务器环境,一个虚拟机或者阿里云租一台,这里我以阿里云服务器为例子: 准备一台阿里云服务器:系统为centos docker环境的搭建 准备一台阿里云服务器,准备一个域名指向该服务器,本例暂用 jenkins.zscode.com 不知道如何操作的小伙伴请自行百

转载:Eclipse build Android时不生成apk问题解决方法

Eclisps有时build后不生成apk.没有对Eclise做过设置调整,android工程代码也是没有问题的.反正就是莫名奇妙的遇到两次,解决方法如下: 1. 设置:Preferences -> Android -> Build中有一项“Skip packaging and dexing until export or launch....”,去除勾选状态 2. 删除debug.keystore,该文件位置: Preferences -> Android -> Build 下有