c# - 无法从 Unity 命令行生成 Android APK

标签 c# android batch-file unity3d

当我从命令行运行以下构建脚本时,build.log 中没有错误,但也没有生成 APK。有时,我能够使用完全相同的命令进行构建,而没有添加或更改文件(我已经使用 Meld 检查了文件夹差异)。

如果我打开和关闭 unity,我似乎会更成功,但仍然不能保证它会使用命令行构建。关闭unity后还有添加或更改的文件。

它在通过 GUI 统一运行构建时始终有效。

Windows 命令行:

START /WAIT "" "C:\Program Files\Unity\Editor\Unity.exe" -batchmode -quit -executeMethod BuildScript.BuildAndroid -logfile build.log

我也尝试过 -nographics 无济于事

BuildScript.cs:

public class EditorSetup {
  public static string AndroidSdkRoot {
    get { return EditorPrefs.GetString("AndroidSdkRoot"); }
    set { EditorPrefs.SetString("AndroidSdkRoot", value); }
  }

  public static string JdkRoot {
    get { return EditorPrefs.GetString("JdkPath"); }
    set { EditorPrefs.SetString("JdkPath", value); }
  }

  // This requires Unity 5.3 or later
  public static string AndroidNdkRoot {
    get { return EditorPrefs.GetString("AndroidNdkRoot"); }
    set { EditorPrefs.SetString("AndroidNdkRoot", value); }
  }
}

public class BuildScript {
    public static string AndroidTitle = "Android"

    [MenuItem("Custom Build/Build AndroidHeadsetClient")]
    public static void BuildAndroid()
    {
        EditorSetup.AndroidSdkRoot = Environment.GetEnvironmentVariable("ANDROID_SDK_HOME");
        EditorSetup.JdkRoot = Environment.GetEnvironmentVariable("JDK_HOME");
        Debug.Log("JDK_HOME: " + EditorSetup.JdkRoot.ToString());
        Debug.Log("ANDROID_SDK_HOME: " + EditorSetup.AndroidSdkRoot.ToString());
        BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
        buildPlayerOptions.scenes = new[] { "Assets/Scenes/Main/" + AndroidTitle + ".unity" };
        buildPlayerOptions.locationPathName = "MyArtifact.apk";
        buildPlayerOptions.target = BuildTarget.Android;
        buildPlayerOptions.options = BuildOptions.None;
        BuildPipeline.BuildPlayer(buildPlayerOptions);
    }
}

文件结构:

.
├── Assets
│   ├── Animations
│   │   ├── ...
│   ├── Animations.meta
│   ├── Animators
│   │   ├── ...
│   ├── Animators.meta
│   ├── AudioClips
│   │   ├── ...
│   ├── AudioClips.meta
│   ├── Data
│   │   ├── ...
│   ├── Data.meta
│   ├── Documents
│   │   ├── ...
│   ├── Documents.meta
│   ├── Editor
│   │   ├── BuildScript.cs
│   │   ├── BuildScript.cs.meta
│   │   ├── ...
└──...

统一版本:5.6.1f1

如果您能就此问题提供任何帮助,我们将不胜感激。

最佳答案

[固定]

这可能由于多个问题而发生,这里真正的问题是,Unity 批处理模式没有在控制台或日志文件中显示正确的错误日志。

我删除了 -batchmode 选项并运行了命令。现在命令在 Unity 编辑器打开的情况下执行。现在,它会在日志中或弹出窗口中显示任何错误。

我的问题:

在我的例子中,我忘记了更改一些 keystore 参数,unity 向我显示了一个错误弹出窗口。

关于c# - 无法从 Unity 命令行生成 Android APK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789632/

相关文章:

c# - 线程安全方法?

C# Monotouch/Xamarin - iOS 蓝牙连接到多部手机?

c# - Sonarqube 规则的限制

android - 如何在android中使用achartengine在圆环图中滚动页面时控制图像缩放?

android - 当字段获得焦点时更改可绘制对象

java - 存档 opentok 音频/视频聊天时遇到问题

c# - 使用 JSON.Net 序列化包含撇号的字符串

batch-file - Set/P上的批处理脚本错误

windows - 批处理文件创建带有日期的文本文件

batch-file - 用于删除目录中具有唯一根茎的文件的批处理脚本