Skip to content

Commit 63e3bfa

Browse files
authored
Merge pull request #733 from immutable/feat/sdk-294-android-build-target
feat(audience-sdk): enable Android build target on sample app (SDK-294)
2 parents e15c968 + 3bd05ca commit 63e3bfa

13 files changed

Lines changed: 495 additions & 7 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*.DotSettings.user.meta
2020
Directory.Build.props.meta
2121
Directory.Build.targets.meta
22+
src/Packages/Audience/README.md.meta
2223

2324
# MemoryCaptures can get excessive in size.
2425
# They also could contain extremely sensitive data
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#nullable enable
2+
3+
using System;
4+
using UnityEditor;
5+
using UnityEngine;
6+
7+
namespace Immutable.Audience.Samples.SampleApp.Editor
8+
{
9+
// Invoked by CI via:
10+
// Unity -batchmode -buildTarget Android \
11+
// -executeMethod Immutable.Audience.Samples.SampleApp.Editor.AndroidBuilder.Build \
12+
// -quit
13+
//
14+
// Optional CLI arg:
15+
// --buildPath <path> Output path for the APK (default: Builds/Android/audience.apk)
16+
internal static class AndroidBuilder
17+
{
18+
private const string DefaultBuildPath = "Builds/Android/audience.apk";
19+
20+
public static void Build()
21+
{
22+
string buildPath = GetArgValue("--buildPath") ?? DefaultBuildPath;
23+
24+
var options = new BuildPlayerOptions
25+
{
26+
scenes = new[] { "Assets/SampleApp/Scenes/SampleApp.unity" },
27+
locationPathName = buildPath,
28+
target = BuildTarget.Android,
29+
targetGroup = BuildTargetGroup.Android,
30+
options = BuildOptions.None,
31+
};
32+
33+
Debug.Log($"[AndroidBuilder] Building APK → {buildPath}");
34+
35+
var report = BuildPipeline.BuildPlayer(options);
36+
var summary = report.summary;
37+
38+
if (summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded)
39+
{
40+
Debug.Log($"[AndroidBuilder] Build succeeded ({summary.totalSize / 1024 / 1024} MB).");
41+
}
42+
else
43+
{
44+
Debug.LogError($"[AndroidBuilder] Build failed: {summary.totalErrors} error(s).");
45+
EditorApplication.Exit(1);
46+
}
47+
}
48+
49+
private static string? GetArgValue(string flag)
50+
{
51+
var args = Environment.GetCommandLineArgs();
52+
for (int i = 0; i < args.Length - 1; i++)
53+
{
54+
if (args[i] == flag)
55+
return args[i + 1];
56+
}
57+
return null;
58+
}
59+
}
60+
}

examples/audience/Assets/Editor/AndroidBuilder.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/audience/Assets/Editor/ScriptingBackendOverride.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ namespace Immutable.Audience.Samples.SampleApp.Editor
1818
// Mono → Disabled (Mono studios rarely strip; High under Mono can
1919
// strip Net.Http SSL chain code paths).
2020
//
21+
// Supported targets: Standalone, Android.
22+
//
2123
// Usage:
2224
// AUDIENCE_SCRIPTING_BACKEND=Mono2x Unity -batchmode -runTests ...
23-
// AUDIENCE_SCRIPTING_BACKEND=IL2CPP Unity -batchmode -runTests ...
25+
// AUDIENCE_SCRIPTING_BACKEND=IL2CPP Unity -batchmode -buildTarget Android ...
2426
//
2527
// Unset means "respect ProjectSettings.asset as-is".
2628
internal sealed class ScriptingBackendOverride : IPreprocessBuildWithReport
@@ -42,12 +44,15 @@ public void OnPreprocessBuild(BuildReport report)
4244
$"{EnvVar} must be 'IL2CPP' or 'Mono2x'; got '{requested}'"),
4345
};
4446

45-
var group = BuildTargetGroup.Standalone;
47+
var group = report.summary.platformGroup;
48+
if (group != BuildTargetGroup.Standalone && group != BuildTargetGroup.Android)
49+
return;
50+
4651
var currentBackend = PlayerSettings.GetScriptingBackend(group);
4752
if (currentBackend != backend)
4853
{
4954
PlayerSettings.SetScriptingBackend(group, backend);
50-
Debug.Log($"[{nameof(ScriptingBackendOverride)}] backend {currentBackend}{backend}.");
55+
Debug.Log($"[{nameof(ScriptingBackendOverride)}] {group} backend {currentBackend}{backend}.");
5156
}
5257

5358
var stripping = backend == ScriptingImplementation.IL2CPP
@@ -57,7 +62,7 @@ public void OnPreprocessBuild(BuildReport report)
5762
if (currentStripping != stripping)
5863
{
5964
PlayerSettings.SetManagedStrippingLevel(group, stripping);
60-
Debug.Log($"[{nameof(ScriptingBackendOverride)}] managedStrippingLevel {currentStripping}{stripping}.");
65+
Debug.Log($"[{nameof(ScriptingBackendOverride)}] {group} managedStrippingLevel {currentStripping}{stripping}.");
6166
}
6267
}
6368
}

0 commit comments

Comments
 (0)