Guest User

Untitled

a guest
Apr 25th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. using UnityEditor;
  2. using UnityEngine;
  3. using System.IO;
  4. using System.Text.RegularExpressions;
  5. using System.Collections.Generic;
  6.  
  7. public class AndroidJarResolver : MonoBehaviour {
  8.  
  9. private static string sdkRoot = EditorPrefs.GetString("AndroidSdkRoot");
  10. private static string androidPluginDir = "Assets/Plugins/Android";
  11.  
  12.  
  13. [MenuItem("JarResolver/Resolve")]
  14. private static void resolveJar() {
  15.  
  16. // Examples
  17. /*
  18. addLibrary("com.google.android.gms", "play-services-basement");
  19. addLibrary("com.google.android.gms", "play-services-ads");
  20. addLibrary("com.android.support", "recyclerview-v7");
  21. addLibrary("com.android.support", "cardview-v7");
  22. addLibrary("com.android.support", "percent");
  23. addLibrary("com.android.support", "support-annotations");
  24. */
  25. }
  26.  
  27.  
  28. private static void addLibrary(string group, string artifact, string version = "LATEST") {
  29. var searchRegex = artifact.Replace("-", "\\-") + "\\-[0-9\\.]+";
  30. if (isExistLibrary(searchRegex)) {
  31. return;
  32. }
  33.  
  34. var dir = (group.StartsWith("com.android.", System.StringComparison.Ordinal)) ?
  35. "extras/android/m2repository" : "extras/google/m2repository";
  36.  
  37. var dirPath = Path.Combine(Path.Combine(Path.Combine(sdkRoot, dir), group.Replace('.', '/')), artifact);
  38.  
  39. if (version == "+" || version.Equals("LATEST", System.StringComparison.OrdinalIgnoreCase)) {
  40. version = getLatestVersion(dirPath);
  41. }
  42. var targetDir = Path.Combine(dirPath, version);
  43.  
  44. var libFileName = artifact + "-" + version + ".aar";
  45. var filePath = Path.Combine(targetDir, libFileName);
  46. if (!File.Exists(filePath)) {
  47. libFileName = artifact + "-" + version + ".jar";
  48. filePath = Path.Combine(targetDir, libFileName);
  49. }
  50.  
  51. var destPath = Path.Combine(androidPluginDir, libFileName);
  52.  
  53. File.Copy(filePath, destPath);
  54. Debug.Log(libFileName);
  55. }
  56.  
  57.  
  58. private static string getLatestVersion(string basePath) {
  59.  
  60. var versionList = new List<string[]>();
  61.  
  62. var baseDirInfo = new DirectoryInfo(basePath);
  63. foreach (var dirInfo in baseDirInfo.GetDirectories()) {
  64. var regex = new Regex("^[0-9\\.]+$");
  65. if (regex.IsMatch(dirInfo.Name)) {
  66. string[] s = dirInfo.Name.Split('.');
  67. versionList.Add(s);
  68. }
  69. }
  70.  
  71. string[] maxTokens = { "0" };
  72. foreach (var versionTokens in versionList) {
  73. bool isReplace = false;
  74. for (int i = 0; i < versionTokens.Length; i++) {
  75. if (i >= maxTokens.Length) {
  76. isReplace = true;
  77. break;
  78. }
  79. var token = versionTokens[i];
  80. var maxToken = maxTokens[i];
  81. if (int.Parse(token) > int.Parse(maxToken)) {
  82. isReplace = true;
  83. break;
  84.  
  85. } else if (int.Parse(token) < int.Parse(maxToken)) {
  86. break;
  87. }
  88. }
  89. if (isReplace) {
  90. maxTokens = versionTokens;
  91. }
  92. }
  93.  
  94. return string.Join(".", maxTokens);
  95. }
  96.  
  97.  
  98. private static bool isExistLibrary(string libNameRegex) {
  99. var dInfo = new DirectoryInfo(androidPluginDir);
  100. var regex = new Regex(libNameRegex + "\\.aar");
  101. foreach (var fInfo in dInfo.GetFiles("*.aar")) {
  102. if (regex.IsMatch(fInfo.Name)) {
  103. return true;
  104. }
  105. }
  106. regex = new Regex(libNameRegex + "\\.jar");
  107. foreach (var fInfo in dInfo.GetFiles("*.jar")) {
  108. if (regex.IsMatch(fInfo.Name)) {
  109. return true;
  110. }
  111. }
  112. return false;
  113. }
  114.  
  115. }
Add Comment
Please, Sign In to add comment