Skip to content

Commit 04b317f

Browse files
author
Stewart Miles
committed
Fixed resolution when the Assets/Plugins/Android is named incorrectly.
Fixed Android resolution when the `Assets/Plugins/Android` is named incorrectly. For example, `Assets/plugins/Android` is recognized by Unity as C# filesystem methods like Directory.Exists() are case insensitive. However, the Android Resolver uses Gradle to perform resolution which handles case sensitive filenames. Fixes issue googlesamples#110 Bug: 79546648 Change-Id: I40d83098dc105ecd80735e08d773248ded78d9e4
1 parent 11857f9 commit 04b317f

24 files changed

+98
-104
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Version 1.2.71 - May 10, 2018
2+
## Bug Fixes
3+
* Fixed resolution of Android dependencies when the `Assets/Plugins/Android`
4+
directory is named in a different case e.g `Assets/plugins/Android`.
5+
16
# Version 1.2.70 - May 7, 2018
27
## Bug Fixes
38
* Fixed bitcode flag being ignored for iOS pods.

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ project.ext {
153153
buildPath = file('build').absolutePath
154154
exportPath = file('build/plugin.unitypackage').absolutePath
155155
dllDir = 'Assets/PlayServicesResolver/Editor'
156-
pluginVersion = '1.2.70.0'
156+
pluginVersion = '1.2.71.0'
157157
currentPluginPath = file('.').absolutePath
158158
currentPluginBasename = 'play-services-resolver'
159159
currentPluginName = (currentPluginBasename + '-' + pluginVersion +

exploded/Assets/PlayServicesResolver/Editor.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.

exploded/Assets/PlayServicesResolver/Editor/Google.IOSResolver_v1.2.70.0.dll.meta

Lines changed: 0 additions & 24 deletions
This file was deleted.
Binary file not shown.

exploded/Assets/PlayServicesResolver/Editor/Google.JarResolver_v1.2.70.0.dll.meta

Lines changed: 0 additions & 24 deletions
This file was deleted.
Binary file not shown.

exploded/Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll.meta

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

exploded/Assets/PlayServicesResolver/Editor/Google.VersionHandlerImpl_v1.2.70.0.dll.meta

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

exploded/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.70.0.txt

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

exploded/Assets/PlayServicesResolver/Editor/play-services-resolver_v1.2.70.0.txt.meta

Lines changed: 0 additions & 12 deletions
This file was deleted.
-8.2 MB
Binary file not shown.

plugin/Assets/PlayServicesResolver.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/Google.IOSResolver.dll.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/Google.JarResolver.dll.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/Google.PackageManager.dll.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/Google.VersionHandlerImpl.dll.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/Assets/PlayServicesResolver/Editor/play-services-resolver.txt.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

source/PlayServicesResolver/src/SettingsDialog.cs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
namespace GooglePlayServices
1818
{
19+
using System;
1920
using System.IO;
2021
using UnityEditor;
2122
using UnityEngine;
@@ -105,6 +106,9 @@ internal void Save() {
105106

106107
private static ProjectSettings projectSettings = new ProjectSettings(Namespace);
107108

109+
// Previously validated package directory.
110+
private static string previouslyValidatedPackageDir;
111+
108112
/// <summary>
109113
/// Reset settings of this plugin to default values.
110114
/// </summary>
@@ -132,12 +136,14 @@ internal static bool InstallAndroidPackages {
132136
get { return projectSettings.GetBool(PackageInstallKey, true); }
133137
}
134138

139+
135140
internal static string PackageDir {
136141
private set { projectSettings.SetString(PackageDirKey, value); }
137142
get {
138-
return ConfigurablePackageDir ?
139-
ValidatePackageDir(projectSettings.GetString(PackageDirKey, DefaultPackageDir)) :
140-
DefaultPackageDir;
143+
return ValidatePackageDir(
144+
ConfigurablePackageDir ?
145+
(projectSettings.GetString(PackageDirKey, DefaultPackageDir)) :
146+
DefaultPackageDir);
141147
}
142148
}
143149

@@ -164,9 +170,32 @@ internal static bool VerboseLogging {
164170
}
165171

166172
internal static string ValidatePackageDir(string directory) {
167-
if (!directory.StartsWith(AndroidPluginsDir)) {
173+
// Make sure the package directory starts with the same name.
174+
// This is case insentitive to handle cases where developers rename Unity
175+
// project directories on Windows (which has a case insensitive file system by
176+
// default) then they use the project on OSX / Linux.
177+
if (!directory.ToLowerInvariant().StartsWith(AndroidPluginsDir.ToLower())) {
168178
directory = AndroidPluginsDir;
169179
}
180+
var searchDirectory = FileUtils.FindDirectoryByCaseInsensitivePath(directory);
181+
if (directory != searchDirectory &&
182+
(previouslyValidatedPackageDir == null ||
183+
searchDirectory != previouslyValidatedPackageDir)) {
184+
PlayServicesResolver.Log(
185+
String.Format("Resolving to Android package directory {0} instead of the " +
186+
"requested target directory {1}\n" +
187+
"\n" +
188+
"Is {0} in a different case to {1} ?\n",
189+
searchDirectory, directory), level: LogLevel.Warning);
190+
directory = searchDirectory;
191+
} else if (previouslyValidatedPackageDir == null ||
192+
searchDirectory != previouslyValidatedPackageDir){
193+
PlayServicesResolver.Log(
194+
String.Format("Android package directory {0} not found.",
195+
directory), level: LogLevel.Warning);
196+
}
197+
previouslyValidatedPackageDir = searchDirectory;
198+
170199
return directory;
171200
}
172201

source/VersionHandlerImpl/src/FileUtils.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
namespace Google {
1818
using System;
1919
using System.IO;
20+
using System.Collections.Generic;
2021

2122
/// <summary>
2223
/// Utility methods to assist with file management in Unity.
@@ -78,5 +79,52 @@ public static void CopyDirectory(string sourceDir, string targetDir) {
7879
}
7980
}
8081
}
82+
83+
/// <summary>
84+
/// Perform a case insensitive search for a path relative to the current directory.
85+
/// </summary>
86+
/// <remarks>
87+
/// Directory.Exists() is case insensitive, so this method finds a directory using a case
88+
/// insensitive search returning the name of the first matching directory found.
89+
/// </remarks>
90+
/// <param name="pathToFind">Path to find relative to the current directory.</param>
91+
/// <returns>First case insensitive match for the specified path.</returns>
92+
public static string FindDirectoryByCaseInsensitivePath(string pathToFind) {
93+
var searchDirectory = ".";
94+
// Components of the path.
95+
var components = pathToFind.Replace(
96+
Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar).Split(
97+
new [] { Path.DirectorySeparatorChar });
98+
for (int componentIndex = 0;
99+
componentIndex < components.Length && searchDirectory != null;
100+
componentIndex++) {
101+
var enumerateDirectory = searchDirectory;
102+
var expectedComponent = components[componentIndex];
103+
var expectedComponentLower = components[componentIndex].ToLowerInvariant();
104+
searchDirectory = null;
105+
var matchingPaths = new List<KeyValuePair<int, string>>();
106+
foreach (var currentDirectory in
107+
Directory.GetDirectories(enumerateDirectory)) {
108+
// Get the current component of the path we're traversing.
109+
var currentComponent = Path.GetFileName(currentDirectory);
110+
if (currentComponent.ToLowerInvariant() == expectedComponentLower) {
111+
// Add the path to a list and remove "./" from the first component.
112+
matchingPaths.Add(new KeyValuePair<int, string>(
113+
Math.Abs(String.CompareOrdinal(expectedComponent, currentComponent)),
114+
(componentIndex == 0) ? Path.GetFileName(currentDirectory) :
115+
currentDirectory));
116+
break;
117+
}
118+
}
119+
if (matchingPaths.Count == 0) break;
120+
// Sort list in order of ordinal string comparison result.
121+
matchingPaths.Sort(
122+
(KeyValuePair<int, string> lhs, KeyValuePair<int, string> rhs) => {
123+
return lhs.Key - rhs.Key;
124+
});
125+
searchDirectory = matchingPaths[0].Value;
126+
}
127+
return searchDirectory;
128+
}
81129
}
82130
}

0 commit comments

Comments
 (0)