// // Copyright (C) 2014 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #if (UNITY_ANDROID || (UNITY_IPHONE && !NO_GPGS)) namespace GooglePlayGames.Editor { using System.IO; using UnityEditor; using UnityEngine; /// /// GPGS upgrader handles performing and upgrade tasks. /// [InitializeOnLoad] public class GPGSUpgrader { /// /// Initializes static members of the class. /// static GPGSUpgrader() { string prevVer = GPGSProjectSettings.Instance.Get(GPGSUtil.LASTUPGRADEKEY, "00000"); if (!prevVer.Equals(PluginVersion.VersionKey)) { // if this is a really old version, upgrade to 911 first, then 915 if (!prevVer.Equals(PluginVersion.VersionKeyCPP)) { prevVer = Upgrade911(prevVer); } prevVer = Upgrade915(prevVer); prevVer = Upgrade927Patch(prevVer); // Upgrade to remove gpg version of jar resolver prevVer = Upgrade928(prevVer); prevVer = Upgrade930(prevVer); prevVer = Upgrade931(prevVer); prevVer = Upgrade935(prevVer); prevVer = Upgrade941(prevVer); prevVer = Upgrade942 (prevVer); // there is no migration needed to 930+ if (!prevVer.Equals(PluginVersion.VersionKey)) { Debug.Log("Upgrading from format version " + prevVer + " to " + PluginVersion.VersionKey); prevVer = PluginVersion.VersionKey; } string msg = GPGSStrings.PostInstall.Text.Replace( "$VERSION", PluginVersion.VersionString); EditorUtility.DisplayDialog(GPGSStrings.PostInstall.Title, msg, "OK"); } GPGSProjectSettings.Instance.Set(GPGSUtil.LASTUPGRADEKEY, prevVer); GPGSProjectSettings.Instance.Set(GPGSUtil.PLUGINVERSIONKEY, PluginVersion.VersionString); GPGSProjectSettings.Instance.Save(); // clean up duplicate scripts if Unity 5+ int ver = GPGSUtil.GetUnityMajorVersion(); if (ver >= 5) { string[] paths = { "Assets/GooglePlayGames", "Assets/Plugins/Android", "Assets/PlayServicesResolver" }; foreach (string p in paths) { CleanDuplicates(p); } // remove support lib from old location. string jarFile = "Assets/Plugins/Android/libs/android-support-v4.jar"; if (File.Exists(jarFile)) { File.Delete(jarFile); } // remove the massive play services client lib string clientDir = "Assets/Plugins/Android/google-play-services_lib"; GPGSUtil.DeleteDirIfExists(clientDir); } // Check that there is a AndroidManifest.xml file if (!GPGSUtil.AndroidManifestExists()) { GPGSUtil.GenerateAndroidManifest(); } AssetDatabase.Refresh(); } /// /// Cleans the duplicate files. There should not be any since /// we are keeping track of the .meta files. /// /// Root of the directory to clean. private static void CleanDuplicates(string root) { string[] subDirs = Directory.GetDirectories(root); // look for .1 and .2 string[] dups = Directory.GetFiles(root, "* 1.*"); foreach (string d in dups) { Debug.Log("Deleting duplicate file: " + d); File.Delete(d); } dups = Directory.GetFiles(root, "* 2.*"); foreach (string d in dups) { Debug.Log("Deleting duplicate file: " + d); File.Delete(d); } // recurse foreach (string s in subDirs) { CleanDuplicates(s); } } private static string Upgrade942(string prevVer) { string file = "Assets/Plugins/Android/play-games-plugin-support.aar"; if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } return PluginVersion.VersionKey; } /// Upgrade to 0.9.41 /// This cleans up the Plugins/Android directory since /// the libraries where refactored into the .aar file. This /// also renames MainLibProj to GooglePlayGamesManifest. /// private static string Upgrade941 (string prevVer) { string[] obsoleteDirectories = { "Assets/Plugins/Android/MainLibProj", }; string[] obsoleteFiles = { "Assets/GooglePlayGames/Editor/GPGSDependencies.cs", "Assets/GooglePlayGames/Editor/GPGSDependencies.cs.meta" }; foreach (string directory in obsoleteDirectories) { if (Directory.Exists (directory)) { Debug.Log ("Deleting obsolete directory: " + directory); Directory.Delete (directory, true); } } foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } return PluginVersion.VersionKey; } /// /// Upgrade to 0.9.35 /// /// /// This cleans up some unused files mostly related to the improved jar resolver. /// /// Previous ver. private static string Upgrade935(string prevVer) { string[] obsoleteFiles = { "Assets/GooglePlayGames/Editor/CocoaPodHelper.cs", "Assets/GooglePlayGames/Editor/CocoaPodHelper.cs.meta", "Assets/GooglePlayGames/Editor/GPGSInstructionWindow.cs", "Assets/GooglePlayGames/Editor/GPGSInstructionWindow.cs.meta", "Assets/GooglePlayGames/Editor/Podfile.txt", "Assets/GooglePlayGames/Editor/Podfile.txt.meta", "Assets/GooglePlayGames/Editor/cocoapod_instructions", "Assets/GooglePlayGames/Editor/cocoapod_instructions.meta", "Assets/GooglePlayGames/Editor/ios_instructions", "Assets/GooglePlayGames/Editor/ios_instructions.meta", "Assets/PlayServicesResolver/Editor/DefaultResolver.cs", "Assets/PlayServicesResolver/Editor/DefaultResolver.cs.meta", "Assets/PlayServicesResolver/Editor/IResolver.cs", "Assets/PlayServicesResolver/Editor/IResolver.cs.meta", "Assets/PlayServicesResolver/Editor/JarResolverLib.dll", "Assets/PlayServicesResolver/Editor/JarResolverLib.dll.meta", "Assets/PlayServicesResolver/Editor/PlayServicesResolver.cs", "Assets/PlayServicesResolver/Editor/PlayServicesResolver.cs.meta", "Assets/PlayServicesResolver/Editor/ResolverVer1_1.cs", "Assets/PlayServicesResolver/Editor/ResolverVer1_1.cs.meta", "Assets/PlayServicesResolver/Editor/SampleDependencies.cs", "Assets/PlayServicesResolver/Editor/SampleDependencies.cs.meta", "Assets/PlayServicesResolver/Editor/SettingsDialog.cs", "Assets/PlayServicesResolver/Editor/SettingsDialog.cs.meta", "Assets/Plugins/Android/play-services-plus-8.4.0.aar", "Assets/PlayServicesResolver/Editor/play-services-plus-8.4.0.aar.meta", // not an obsolete file, but delete the cache since the schema changed. "ProjectSettings/GoogleDependencyGooglePlayGames.xml" }; foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } return PluginVersion.VersionKey; } /// /// Upgrade to 0.9.31 /// /// /// This cleans up some unused files. /// /// Previous ver. private static string Upgrade931(string prevVer) { string[] obsoleteFiles = { "Assets/GooglePlayGames/Editor/GPGSExportPackageUI.cs", "Assets/GooglePlayGames/Editor/GPGSExportPackageUI.cs.meta" }; foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } return PluginVersion.VersionKey; } /// /// Upgrade to 930 from the specified prevVer. /// /// Previous ver. /// the version string upgraded to. private static string Upgrade930(string prevVer) { Debug.Log("Upgrading from format version " + prevVer + " to " + PluginVersion.VersionKeyNativeCRM); // As of 930, the CRM API is handled by the Native SDK, not GmsCore. string[] obsoleteFiles = { "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Games.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Games.cs.meta", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/LoadPlayerStatsResultObject.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/LoadPlayerStatsResultObject.cs.meta", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/PlayerStats.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/PlayerStats.cs.meta", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/PlayerStatsObject.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/PlayerStatsObject.cs.meta", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/Stats.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/Stats.cs.meta", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/StatsObject.cs", "Assets/GooglePlayGames/Platforms/Android/Gms/Games/Stats/StatsObject.cs.meta" }; // only delete these if we are not version 0.9.34 if (string.Compare(PluginVersion.VersionKey, PluginVersion.VersionKeyJNIStats, System.StringComparison.Ordinal) <= 0) { foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } } return PluginVersion.VersionKeyNativeCRM; } private static string Upgrade928(string prevVer) { //remove the jar resolver and if found, then // warn the user that restarting the editor is required. string[] obsoleteFiles = { "Assets/GooglePlayGames/Editor/JarResolverLib.dll", "Assets/GooglePlayGames/Editor/JarResolverLib.dll.meta", "Assets/GooglePlayGames/Editor/BackgroundResolution.cs", "Assets/GooglePlayGames/Editor/BackgroundResolution.cs.meta" }; bool found = File.Exists(obsoleteFiles[0]); foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } if (found) { GPGSUtil.Alert("This update made changes that requires that you restart the editor"); } Debug.Log("Upgrading from version " + prevVer + " to " + PluginVersion.VersionKeyJarResolver); return PluginVersion.VersionKeyJarResolver; } /// /// Upgrade to 0.9.27a. /// /// This removes the GPGGizmo class, which broke the editor /// The patched version /// Previous version private static string Upgrade927Patch(string prevVer) { string[] obsoleteFiles = { "Assets/GooglePlayGames/Editor/GPGGizmo.cs", "Assets/GooglePlayGames/Editor/GPGGizmo.cs.meta", "Assets/GooglePlayGames/BasicApi/OnStateLoadedListener.cs", "Assets/GooglePlayGames/BasicApi/OnStateLoadedListener.cs.meta", "Assets/GooglePlayGames/Platforms/Native/AndroidAppStateClient.cs", "Assets/GooglePlayGames/Platforms/Native/AndroidAppStateClient.cs.meta", "Assets/GooglePlayGames/Platforms/Native/UnsupportedAppStateClient.cs", "Assets/GooglePlayGames/Platforms/Native/UnsupportedAppStateClient.cs.meta" }; foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } return PluginVersion.VersionKey27Patch; } /// /// Upgrade to 915 from the specified prevVer. /// /// Previous ver. /// the version string upgraded to. private static string Upgrade915(string prevVer) { Debug.Log("Upgrading from format version " + prevVer + " to " + PluginVersion.VersionKeyU5); // all that was done was moving the Editor files to be in GooglePlayGames/Editor string[] obsoleteFiles = { "Assets/Editor/GPGSAndroidSetupUI.cs", "Assets/Editor/GPGSAndroidSetupUI.cs.meta", "Assets/Editor/GPGSDocsUI.cs", "Assets/Editor/GPGSDocsUI.cs.meta", "Assets/Editor/GPGSIOSSetupUI.cs", "Assets/Editor/GPGSIOSSetupUI.cs.meta", "Assets/Editor/GPGSInstructionWindow.cs", "Assets/Editor/GPGSInstructionWindow.cs.meta", "Assets/Editor/GPGSPostBuild.cs", "Assets/Editor/GPGSPostBuild.cs.meta", "Assets/Editor/GPGSProjectSettings.cs", "Assets/Editor/GPGSProjectSettings.cs.meta", "Assets/Editor/GPGSStrings.cs", "Assets/Editor/GPGSStrings.cs.meta", "Assets/Editor/GPGSUpgrader.cs", "Assets/Editor/GPGSUpgrader.cs.meta", "Assets/Editor/GPGSUtil.cs", "Assets/Editor/GPGSUtil.cs.meta", "Assets/Editor/GameInfo.template", "Assets/Editor/GameInfo.template.meta", "Assets/Editor/PlistBuddyHelper.cs", "Assets/Editor/PlistBuddyHelper.cs.meta", "Assets/Editor/PostprocessBuildPlayer", "Assets/Editor/PostprocessBuildPlayer.meta", "Assets/Editor/ios_instructions", "Assets/Editor/ios_instructions.meta", "Assets/Editor/projsettings.txt", "Assets/Editor/projsettings.txt.meta", "Assets/Editor/template-AndroidManifest.txt", "Assets/Editor/template-AndroidManifest.txt.meta", "Assets/Plugins/Android/libs/armeabi/libgpg.so", "Assets/Plugins/Android/libs/armeabi/libgpg.so.meta", "Assets/Plugins/iOS/GPGSAppController 1.h", "Assets/Plugins/iOS/GPGSAppController 1.h.meta", "Assets/Plugins/iOS/GPGSAppController 1.mm", "Assets/Plugins/iOS/GPGSAppController 1.mm.meta" }; foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } return PluginVersion.VersionKeyU5; } /// /// Upgrade to 911 from the specified prevVer. /// /// Previous ver. /// the version string upgraded to. private static string Upgrade911(string prevVer) { Debug.Log("Upgrading from format version " + prevVer + " to " + PluginVersion.VersionKeyCPP); // delete obsolete files, if they are there string[] obsoleteFiles = { "Assets/GooglePlayGames/OurUtils/Utils.cs", "Assets/GooglePlayGames/OurUtils/Utils.cs.meta", "Assets/GooglePlayGames/OurUtils/MyClass.cs", "Assets/GooglePlayGames/OurUtils/MyClass.cs.meta", "Assets/Plugins/GPGSUtils.dll", "Assets/Plugins/GPGSUtils.dll.meta", }; foreach (string file in obsoleteFiles) { if (File.Exists(file)) { Debug.Log("Deleting obsolete file: " + file); File.Delete(file); } } // delete obsolete directories, if they are there string[] obsoleteDirectories = { "Assets/Plugins/Android/BaseGameUtils" }; foreach (string directory in obsoleteDirectories) { if (Directory.Exists(directory)) { Debug.Log("Deleting obsolete directory: " + directory); Directory.Delete(directory, true); } } Debug.Log("Done upgrading from format version " + prevVer + " to " + PluginVersion.VersionKeyCPP); return PluginVersion.VersionKeyCPP; } } } #endif