Skip to content

Commit b91a952

Browse files
authored
Feature/add command line option to set android external deps (#161)
* Add command line method to setup android external tools * Add logs
1 parent e837854 commit b91a952

12 files changed

Lines changed: 216 additions & 58 deletions
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace Plugins.StreamChat.EditorTools.Builders
2+
{
3+
public readonly struct AndroidExternalToolsSettings
4+
{
5+
public string JdkPath { get; }
6+
public string AndroidSdkPath { get; }
7+
public string AndroidNdkPath { get; }
8+
public string GradlePath { get; }
9+
10+
public AndroidExternalToolsSettings(string jdkPath, string androidSdkPath, string androidNdkPath, string gradlePath)
11+
{
12+
JdkPath = jdkPath;
13+
AndroidSdkPath = androidSdkPath;
14+
AndroidNdkPath = androidNdkPath;
15+
GradlePath = gradlePath;
16+
}
17+
18+
public override string ToString()
19+
{
20+
return $"{nameof(AndroidExternalToolsSettings)} - {nameof(JdkPath)}: {JdkPath}, {nameof(AndroidSdkPath)}: {AndroidSdkPath}, " +
21+
$"{nameof(AndroidNdkPath)}: {AndroidNdkPath}, {nameof(GradlePath)}: {GradlePath}";
22+
}
23+
}
24+
}

Assets/Plugins/StreamChat/EditorTools/Builders/AndroidExternalToolsSettings.cs.meta

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

Assets/Plugins/StreamChat/EditorTools/CommandLineParser.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

Assets/Plugins/StreamChat/EditorTools/CommandLineParsers.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Plugins.StreamChat.EditorTools.Builders;
4+
5+
namespace StreamChat.EditorTools.CommandLineParsers
6+
{
7+
public class AndroidExternalToolsCommandLineParser : CommandLineParserBase<AndroidExternalToolsSettings>
8+
{
9+
public const string JdkPathArgKey = "-jdkPath";
10+
public const string AndroidSdkPathArgKey = "-androidSdkPath";
11+
public const string AndroidNdkPathArgKey = "-androidNdkPath";
12+
public const string GradlePathArgKey = "-gradlePath";
13+
14+
protected override AndroidExternalToolsSettings Parse(IDictionary<string, string> args)
15+
{
16+
if (args.Count == 0)
17+
{
18+
throw new ArgumentException($"No arguments provided");
19+
}
20+
21+
return new AndroidExternalToolsSettings(GetKeyOrDefault(JdkPathArgKey), GetKeyOrDefault(AndroidSdkPathArgKey), GetKeyOrDefault(AndroidNdkPathArgKey),
22+
GetKeyOrDefault(GradlePathArgKey));
23+
24+
string GetKeyOrDefault(string key) => args.TryGetValue(key, out var arg) ? arg : string.Empty;
25+
}
26+
}
27+
}

Assets/Plugins/StreamChat/EditorTools/CommandLineParsers/AndroidExternalToolsCommandLineParser.cs.meta

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

Assets/Plugins/StreamChat/EditorTools/CommandLineParser.cs renamed to Assets/Plugins/StreamChat/EditorTools/CommandLineParsers/BuildSettingsCommandLineParser.cs

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Text;
4+
using StreamChat.EditorTools;
45
using StreamChat.EditorTools.Builders;
56
using StreamChat.Libs.Auth;
67
using StreamChat.Libs.Serialization;
78
using UnityEditor;
89

9-
namespace StreamChat.EditorTools
10+
namespace StreamChat.EditorTools.CommandLineParsers
1011
{
11-
public class CommandLineParser
12+
public class BuildSettingsCommandLineParser : CommandLineParserBase<(BuildSettings buildSettings, AuthCredentials authCredentials)>
1213
{
1314
public const string ApiCompatibilityArgKey = "-apiCompatibility";
1415
public const string ScriptingBackendArgKey = "-scriptingBackend";
@@ -17,32 +18,31 @@ public class CommandLineParser
1718

1819
public const string StreamBase64TestDataArgKey = "-streamBase64TestDataSet";
1920

20-
public (BuildSettings buildSettings, AuthCredentials authCredentials) GetParsedBuildArgs()
21+
protected override (BuildSettings buildSettings, AuthCredentials authCredentials) Parse(
22+
IDictionary<string, string> args)
2123
{
22-
var args = GetParsedCommandLineArguments();
23-
2424
if (IsAnyRequiredArgMissing(args, out var missingArgsInfo, BuildTargetPlatformArgKey,
25-
ApiCompatibilityArgKey, ScriptingBackendArgKey, BuildTargetPathArgKey, StreamBase64TestDataArgKey))
25+
ApiCompatibilityArgKey, ScriptingBackendArgKey, BuildTargetPathArgKey, StreamBase64TestDataArgKey))
2626
{
2727
throw new ArgumentException($"Missing argument: `{missingArgsInfo}`");
2828
}
2929

3030
if (!Enum.TryParse<BuildTargetPlatform>(args[BuildTargetPlatformArgKey], ignoreCase: true,
31-
out var targetPlatform))
31+
out var targetPlatform))
3232
{
3333
throw new ArgumentException(
3434
$"Failed to parse argument: `{args[BuildTargetPlatformArgKey]}` to enum: {typeof(BuildTargetPlatform)}");
3535
}
3636

3737
if (!Enum.TryParse<ApiCompatibility>(args[ApiCompatibilityArgKey], ignoreCase: true,
38-
out var apiCompatibility))
38+
out var apiCompatibility))
3939
{
4040
throw new ArgumentException(
4141
$"Failed to parse argument: `{args[BuildTargetPlatformArgKey]}` to enum: {typeof(BuildTargetPlatform)}");
4242
}
4343

4444
if (!Enum.TryParse<ScriptingBackend>(args[ScriptingBackendArgKey], ignoreCase: true,
45-
out var scriptingBackend))
45+
out var scriptingBackend))
4646
{
4747
throw new ArgumentException(
4848
$"Failed to parse argument: `{args[BuildTargetPlatformArgKey]}` to enum: {typeof(BuildTargetPlatform)}");
@@ -71,48 +71,6 @@ public TestAuthDataSet ParseTestAuthDataSetArg(IDictionary<string, string> args)
7171
return serializer.Deserialize<TestAuthDataSet>(rawTestDataSet);
7272
}
7373

74-
public IDictionary<string, string> GetParsedCommandLineArguments()
75-
{
76-
var result = new Dictionary<string, string>();
77-
ParseCommandLineArguments(Environment.GetCommandLineArgs(), result);
78-
79-
return result;
80-
}
81-
82-
public void ParseCommandLineArguments(string[] args, IDictionary<string, string> result)
83-
=> ParseCommandLineArguments(args, _ => result.Add(_.Key, _.Value));
84-
85-
public void ParseCommandLineArguments(string[] args, Action<(string Key, string Value)> onArgumentParsed)
86-
{
87-
for (int i = 0; i < args.Length; i++)
88-
{
89-
if (args[i].StartsWith("-"))
90-
{
91-
var key = args[i];
92-
var value = i < args.Length - 1 ? args[i + 1] : "";
93-
94-
onArgumentParsed?.Invoke((key, value));
95-
}
96-
}
97-
}
98-
99-
private static bool IsAnyRequiredArgMissing(IDictionary<string, string> args, out string missingArgsInfo,
100-
params string[] argKeys)
101-
{
102-
var missingKeys = new List<string>();
103-
104-
foreach (var key in argKeys)
105-
{
106-
if (!args.ContainsKey(key))
107-
{
108-
missingKeys.Add(key);
109-
}
110-
}
111-
112-
missingArgsInfo = missingKeys.Count == 0 ? string.Empty : string.Join(", ", missingKeys);
113-
return missingKeys.Count != 0;
114-
}
115-
11674
private BuildTargetGroup GetBuildTargetGroup(BuildTargetPlatform targetPlatform)
11775
{
11876
if (targetPlatform == BuildTargetPlatform.Standalone)
@@ -130,7 +88,6 @@ private BuildTargetGroup GetBuildTargetGroup(BuildTargetPlatform targetPlatform)
13088
private ApiCompatibilityLevel GetApiCompatibilityLevel(ApiCompatibility apiCompatibility)
13189
{
13290
#if UNITY_2021
133-
13491
switch (apiCompatibility)
13592
{
13693
case ApiCompatibility.NET_4_x: return ApiCompatibilityLevel.NET_Unity_4_8;

Assets/Plugins/StreamChat/EditorTools/CommandLineParsers/BuildSettingsCommandLineParser.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace StreamChat.EditorTools.CommandLineParsers
5+
{
6+
public abstract class CommandLineParserBase<TResult>
7+
{
8+
public TResult Parse()
9+
{
10+
var args = GetParsedCommandLineArguments();
11+
return Parse(args);
12+
}
13+
14+
public IDictionary<string, string> GetParsedCommandLineArguments()
15+
{
16+
var result = new Dictionary<string, string>();
17+
ParseCommandLineArguments(Environment.GetCommandLineArgs(), result);
18+
19+
return result;
20+
}
21+
22+
protected abstract TResult Parse(IDictionary<string, string> args);
23+
24+
protected void ParseCommandLineArguments(string[] args, IDictionary<string, string> result)
25+
=> ParseCommandLineArguments(args, _ => result.Add(_.Key, _.Value));
26+
27+
protected void ParseCommandLineArguments(string[] args, Action<(string Key, string Value)> onArgumentParsed)
28+
{
29+
for (int i = 0; i < args.Length; i++)
30+
{
31+
if (args[i].StartsWith("-"))
32+
{
33+
var key = args[i];
34+
var value = i < args.Length - 1 ? args[i + 1] : "";
35+
36+
onArgumentParsed?.Invoke((key, value));
37+
}
38+
}
39+
}
40+
41+
protected static bool IsAnyRequiredArgMissing(IDictionary<string, string> args, out string missingArgsInfo,
42+
params string[] argKeys)
43+
{
44+
var missingKeys = new List<string>();
45+
46+
foreach (var key in argKeys)
47+
{
48+
if (!args.ContainsKey(key))
49+
{
50+
missingKeys.Add(key);
51+
}
52+
}
53+
54+
missingArgsInfo = missingKeys.Count == 0 ? string.Empty : string.Join(", ", missingKeys);
55+
return missingKeys.Count != 0;
56+
}
57+
}
58+
}

Assets/Plugins/StreamChat/EditorTools/CommandLineParsers/CommandLineParserBase.cs.meta

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

0 commit comments

Comments
 (0)