public static string GetAndroidSdkPath() { //TODO: ask IDE? it should know :) string repoFolder; var androidSdk = new[] { "ANDROID_HOME", "ANDROID_SDK", "ANDROID_SDK_ROOT" } .Select(i => Environment.GetEnvironmentVariable(i)) .Concat(new[] { Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), @"AppData\Local\Android\sdk") }) .Where(i => !string.IsNullOrWhiteSpace(i)) .OrderByDescending(i => Gradle.HasLocalRepositories(i, out repoFolder)) .FirstOrDefault(); return(androidSdk); }
public async Task Generate(string sourceProjectName) { var androidSdk = await ResolveAndroidSdkPathAsync(); if (string.IsNullOrWhiteSpace(androidSdk)) { return; } string workingDirectory = null; Exception exception = null; List <DependencyFile> resultDependencies = null; DependencyInputDialogResult dependencyInputResult = null; var inputSuccess = await _dependencyInputDialog.ShowAsync(repositores : Gradle.DefaultRepositores, taskExecuter : (dependencyInput) => { dependencyInputResult = dependencyInput; return(Task.Factory.StartNew(() => { try { resultDependencies = Gradle.ExtractDependencies(dependencyInput.DependencyId, androidSdk, out workingDirectory, dependencyInput.DependencyRepository).ToList(); } catch (Exception exc) { exception = exc; } })); }); if (!inputSuccess) { return; } if (exception != null) { _errorDialog.ShowError(exception.ToString()); return; } try { string readMeContent = string.Format("Binding for:\n{0}\n\nDependencies:\n\n{1}", dependencyInputResult.DependencyId, string.Join("\n", resultDependencies.Select(d => string.Format("{1}{0}, Path={2}", Path.GetFileName(d.File), d.IsTransitive ? "\t" : "", d.File)))); var bindingInfoFilePath = Path.Combine(workingDirectory, "GeneratedBindingInfo.txt"); File.WriteAllText(bindingInfoFilePath, readMeContent); //if we have only one binary if (resultDependencies.Count == 1 && !resultDependencies[0].IsTransitive) { await _bindingProjectGenerator.GenerateAsync(sourceProjectName, dependencyInputResult.AssemblyName, resultDependencies, bindingInfoFilePath); } else { var filteredDependencies = await _dependencyOutputSelectorDialog.FilterDependenciesAsync(resultDependencies); if (filteredDependencies != null && filteredDependencies.Any()) { await _bindingProjectGenerator.GenerateAsync(sourceProjectName, dependencyInputResult.AssemblyName, filteredDependencies, bindingInfoFilePath); } } } catch (Exception exc) { _errorDialog.ShowError(exc.ToString()); } }