Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Easy Mobile - Many-in-one package for mobile games

Discussion in 'Assets and Asset Store' started by pt5011, Jan 28, 2017.

  1. Mayureshete

    Mayureshete

    Joined:
    Jan 18, 2014
    Posts:
    198
    ok sure

    Edit: Well When i make a demo project and install only easy mobile, the ad works just fine.... will see if i can find something i have done wrong.
     
    Last edited: Jul 12, 2018
    pt5011 likes this.
  2. hakan7373

    hakan7373

    Joined:
    Nov 19, 2015
    Posts:
    13
    Hi there,
    After several years of struggling with the other popular asset, I finally decide to buy this one hoping to deal with unnecessarily time consuming ads, leaderboard requirements. But here we are, from the very first day I feel like it is not different than the other one!. First I get exceptions from the xcode project then I wanted to give a chance to Android but it does not even compile on the editor. Obviously the exception may arise from GooglePlay libraries but, what is the point if the bundle cannot cope with them?

    This is what I get from the editor on Android platform,

    NullReferenceException: Object reference not set to an instance of an object
    UnityEditor.InspectorWindow.OnSelectionChange () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:147)
    System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
    Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
    System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232)
    System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
    UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:295)
    UnityEditor.HostView.Invoke (System.String methodName) (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:288)
    UnityEditor.HostView.OnSelectionChange () (at /Users/builduser/buildslave/unity/build/Editor/Mono/HostView.cs:168)
    UnityEditor.AssetDatabase:Refresh()
    GooglePlayGames.Editor.GPGSUpgrader:.cctor() (at Assets/GooglePlayGames/Editor/GPGSUpgrader.cs:114)
    UnityEditor.EditorAssemblies:processInitializeOnLoadAttributes()


    This is from the xcode error log which;

    Undefined symbols for architecture arm64:
    "__ReportAchievement", referenced from:
    _achievements__ReportAchievement_m537607730 in Bulk_Assembly-CSharp_0.o
    (maybe you meant: _achievements__ReportAchievement_m537607730)
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
     
  3. EyeOfDBeholder

    EyeOfDBeholder

    Joined:
    Jun 6, 2013
    Posts:
    5
    Thank you so much for your interest! The only thing I didn't tried was the blank project, I actually managed to setup a blank project with EMP but encountered different errors due to my lack of patience at that point, but I managed to figure out what was going on. I'll leave this here just for general knowledge.

    So, as I said, it didn't work on some devices which was odd, you usually get that type of error on every device. The thing is, those devices were using Arm64 and for some reason, my build settings had the arm64 box checked so it built arm64 enabled versions and when the game running on that type of device instead of searching for armv7 libraries were searching for arm64 and of course, no dice! The GPG library only has x86 and v7 libraries and that's why it didn't work, all it took was to uncheck that box reimport, setup and bla bla bla but that did the trick!

    Anyway, as I side note, I truly love this plugin, may I suggest a localization feature? A general one, not just for the features covered already, the plugins I've found are usually focused on the editor completely overlooking translations when assigning texts from script and I have a lot of those xD. Anyway, seeing how well you guys organize your work to make things easier it seemed like a good suggestion, perhaps on a separate plugin or a new feature for pro users. For now I'll just stick to reading from files.
     
    pt5011 likes this.
  4. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    Hi @hakan7373 ,

    Thank you for trying our plugin. It's a pity the first impression wasn't as good as expected :). But let's see if we can sort things out:

    Regarding the editor error on Android platform:

    - What version of GPGS did you use?
    - Maybe there's something wrong during the import of the plugin. Have you tried reimport GPGS?

    Regarding the Xcode errors:

    - What are your xcode and unity versions?
    - Beside EM, have you imported any other plugin into the project? (especially those that you imported and then removed)
    - Will the errors still occur if you build an empty project with only EM imported?

    Well, I wish EM could do miracle and cope with all sorts of problems including files being missing, 3rd party SDKs behaving funny, misconfiguration and the likes. If only that was feasible. What we try to do actually, is to make sure the plugin can be as robust as possible, and works as expected provided the prerequisites are fulfilled and setup is done as per instructions. If something unexpected happens, we're happy to provide support.
     
  5. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @EyeOfDBeholder

    Thank you so much for sharing the information, which will definitely help!

    On localization: I've personally tried a few localization plugins on Asset Store and found them decent for my needs, which were not anything sophisticated. I agree that there's always room for improvement. We'll need to investigate the opportunity but if we do start with building something, that would probably be a separate plugin. Thank you for your suggestion!
     
  6. junrill

    junrill

    Joined:
    Jul 27, 2016
    Posts:
    8
    Will the other Interstitial Ads be shown automatically if the default one has no ads? Or no ads will be shown if the default is not ready?
     
  7. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @junrill

    Short answer is no. But for that purpose you can setup mediation networks via AdMob or Heyzap, which are supported by EM. They are commercial mediation solutions that are widely used. We decided to not reinvent the wheel.

    Thanks.
     
  8. EyeOfDBeholder

    EyeOfDBeholder

    Joined:
    Jun 6, 2013
    Posts:
    5
    Hey everyone, so I'm integrating the GIF recorder to my game, but given the nature of my game I believe that instead of a single gif it would be cooler to capture multiple moments, up to 5, so that the player can choose which ones he likes best. But I'm encountering a problem, when I capture multiple gifs I get an error saying that I'm trying to play a disposed or empty clip. It seems that only the first capture works, is there a way I can get it to work that way?
     
  9. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @EyeOfDBeholder
    Are you using one recorder attached to the main camera or multiple recorders? Is it possible to share the relevant script?
     
  10. EyeOfDBeholder

    EyeOfDBeholder

    Joined:
    Jun 6, 2013
    Posts:
    5
    Sure, just 1 recorder attached to the main camera, not as a child game object but as an added component to the main camera, and here's the script, please keep in mind it's no way near final, the whole list + array for example is not efficient but if I get it to work I'll fix all the potential memory leaks:

    Code (CSharp):
    1. public class ScreenRecorder : MonoBehaviour
    2. {
    3.  
    4.  
    5.     public static ScreenRecorder Instance;
    6.  
    7.     public Recorder recorder;
    8.     public int maxClips = 5;
    9.     public AnimatedClip[] animatedClips;
    10.     private List<AnimatedClip> myClips = new List<AnimatedClip>();
    11.  
    12.     public GameObject thumbnail;
    13.     private Animator scrollAnimator;
    14.     public ClipPlayerUI thumbnailPlayer;
    15.  
    16.     private void Awake()
    17.     {
    18.         Instance = this;
    19.     }
    20.  
    21.     private void Start()
    22.     {
    23.         animatedClips = new AnimatedClip[maxClips];
    24.     }
    25.  
    26.     public void BeginTimedCapture()
    27.     {
    28.  
    29.         BeginCapture();
    30.  
    31.         Invoke("StopRecording", recorder.Length);
    32.  
    33.     }
    34.     public void BeginCapture()
    35.     {
    36.         if(Gif.IsRecording(recorder)){
    37.             CaptureCurrentGif();
    38.         }
    39.         Gif.StartRecording(recorder);
    40.  
    41.     }
    42.  
    43.     public void CaptureCurrentGif(){
    44.         AnimatedClip clip = Gif.StopRecording(recorder);
    45.         if (clip.Length < recorder.Length)
    46.         {
    47.             myClips.Add(clip);
    48.  
    49.         }
    50.     }
    51.  
    52.     public void StopRecording()
    53.     {
    54.         AnimatedClip clip = Gif.StopRecording(recorder);
    55.         if (clip.Length < recorder.Length)
    56.         {
    57.             myClips.Add(clip);
    58.             CommitClips();
    59.         }
    60.     }
    61.  
    62.     public void CommitClips(){
    63.  
    64.         int maxIndex = maxClips;
    65.         if (maxClips > myClips.Count)
    66.             maxIndex = myClips.Count;
    67.      
    68.         for (int i = 0; i < maxIndex; i++){
    69.             animatedClips[i] = myClips[i];
    70.         }
    71.         thumbnail.SetActive(true);
    72.         StartCoroutine("PlayHighlightThumbnail");
    73.  
    74.     }
    75.  
    76.     IEnumerator PlayHighlightThumbnail()
    77.     {
    78.      
    79.         do
    80.         {
    81.             for (int i = 0; i < animatedClips.Length; i++){
    82.                 AnimatedClip currentClip = animatedClips[i];
    83.                 Gif.PlayClip(thumbnailPlayer, currentClip, 0, false);
    84.                 yield return new WaitForSeconds(recorder.Length);
    85.             }
    86.         } while (gameObject.activeInHierarchy);
    87.     }
    88.  
    89.     public void ShowReel(){
    90.         scrollAnimator.SetTrigger("Enlarge");
    91.     }
    92.  
    93.     public void HideReel(){
    94.         scrollAnimator.SetTrigger("Shrink");
    95.     }
    96.  
    97.     public void ShareClip(){
    98.      
    99.     }
    100.  
    101. }
    So this is how I use this script, the moment something like a large combo begins or you start charging a special power for example it starts recording, whenever a certain criteria is met I call the CaptureCurrentGif method and add that to the array. When you reach the gameover screen then I stop all recording, save the last 5 and discard the rest if any, and start playing them one by one but all I get is that error, I'll try to find out if the last clip at least get's played by reversing the loop.

    Edit: so While I get around that issue I changed it to work only with one gif and it works so I copy/paste the code for exporting and uploading from the user guide, it works on the editor but when I build from Xcode the game crashes at 43 percent or so, I added the privacy options for library in the plist, any idea what it could be? Your demo code on a separate project works just fine
     
    Last edited: Jul 21, 2018
  11. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @EyeOfDBeholder

    Did the BeginCapture() method get called again after CaptureCurrentGif() or StopRecording()? Otherwise the recorder would stop after the first clip was collected, and never get started again, which may be the reason why empty clips were returned from the subsequent calls of Gif.StopRecording(recorder). Please check that and you may want to add some simple calls to Debug.Log() to verify the start/stop state of the recorder.

    Regarding the export error: what specific errors did you get in Xcode? It's likely that the native iOS library for EM was missing. It's located at Assets/EasyMobile/Plugins/iOS/libEasyMobile.a. If it's indeed missing, you can reimport EM to get it back.

    Hope this helps.
     
  12. blitzcloud

    blitzcloud

    Joined:
    Aug 18, 2015
    Posts:
    27
    I'm having issues with EM_Settings failing to save any changes. It happened before too but I just needed to update EM. Now it's simply not working. Deleted the EM folder too and reimported. Still doesn't save any changes.

    Also, if feature requests are welcome, it'd be nice to have a gravity setter for the popups (login, achivement unlock), so I don't have to hack it within the automatic login (my banner ads are on top as they're less obstrusive for gameplay and notifications appear on bottom for better visibility)
     
  13. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    Hi, thank you for choosing EM!

    Regarding your issues: on what Unity version were you having these issues? And were there any error in the console? Will restart Unity help?

    Feature requests are always welcome! I took a note and hopefully we'll have it in a near future update. Thank you for bringing it up!
     
  14. blitzcloud

    blitzcloud

    Joined:
    Aug 18, 2015
    Posts:
    27
    I'm running 2018.1.3, but i'll try updating to 2.1 right now (update: error persists).
    No errors. Restarting unity as in closing and opening it won't fix it. Reinstalling EM didn't fix it either

    The issue is that the EM settings scriptable stays in the status it is permanently. I can't alter it any further because it won't save any change I do to it
     
    Last edited: Jul 29, 2018
  15. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @blitzcloud

    That sounds weird. EM_Settings is a just a normal scriptable object so using Unity built-in serialization system (which should work). We haven't encountered this issue ourselves, nor have we received similar report from other users.

    Does it happen to a particular project (have you tried importing EM into a new empty project)?
     
    blitzcloud likes this.
  16. blitzcloud

    blitzcloud

    Joined:
    Aug 18, 2015
    Posts:
    27
    it happens to my project. On a new one it works. As I said it happens over time, I don't get what catalyzes it.
     
  17. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @blitzcloud
    You may want to try menu Edit > Project Settings > Editor and and play around with different Asset Serialization modes. That will force re-serialization of the scriptable object. Not sure will help but worth trying.
     
    blitzcloud likes this.
  18. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    Hi.
    I've just bought a copy of Easy Mobile Pro.

    I find it really easy and interesting thanks to all its features. The documentation is also well written even if some .html pages have problems to be opened (i'm using chrome as browser).

    Anyway, I bought this asset because I wanted to avoid a few problems while building the .apk of my game, which I've kept having in the last 2 weeks, after trying to integrate AdMob and Google Play Game Services for Cloud Saving.

    Even if I followed Easy Mobile documentation step by step to import AdMob , I keep getting the same error: "Failed to recompile android resource files".

    failed to recompile android resource files.png

    error.png
    (Right before importing AdMob, my project was building fine, btw)

    The console shows this error, which I can't understand:

    CommandInvokationFailure: Failed to recompile android resource files.
    C:/Program Files/Java/jdk1.8.0_172\bin\javac.exe -bootclasspath "C:/Users/Derek/AppData/Local/Android/Sdk\platforms\android-28\android.jar" -d "K:\progetti unity\Game Name Stable\Temp\StagingArea\bin\classes" -source 1.6 -target 1.6 -encoding UTF-8 "android\arch\lifecycle\R.java" "android\support\compat\R.java" "android\support\coreui\R.java" "android\support\coreutils\R.java" "android\support\customtabs\R.java" "android\support\fragment\R.java" "android\support\mediacompat\R.java" "android\support\v4\R.java" "com\google\android\gms\ads\R.java" "com\google\android\gms\ads\impl\R.java" "com\google\android\gms\ads_base\R.java" "com\google\android\gms\ads_identifier\R.java" "com\google\android\gms\common\R.java" "com\google\android\gms\gass\R.java" "com\google\unity\ads\R.java" "com\new\GameName \R.java" "com\sglib\easymobile\androidnative\R.java"

    stderr[
    com\new\GameName \R.java:8: error: <identifier> expected
    package com.new.GameName ;
    ^
    com\new\GameName \R.java:8: error: class, interface, or enum expected
    package com.new.GameName ;
    ^
    com\new\GameName \R.java:8: error: class, interface, or enum expected
    package com.new.GameName ;
    ^
    3 errors
    ]
    stdout[

    ]
    exit code: 1
    UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
    UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
    UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg)
    UnityEditor.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEngine.GUIUtility:processEvent(Int32, IntPtr)

    To try to fix it I tried to do: Assets -> Play Services Resolver -> Android Resolver -> Force Resolve, which ended with a "Resolution succeded" that made me all happy but it didn't solve the problem.

    resolution succeded.png

    I need to build my project to test if AdMob and Automatic Ad are working fine.

    Here are a bit of informations about the versions of the Unity/SDK/JDK I'm using:
    - Unity 2017.3.0f3
    - Android 28 (I've already tried to solve the problem by downgrading to previous versions like the web says but this didn't solve the problem)
    - jdk1.8.0_172

    I really hope some of you can help a game developer brother out.

    Thanks in advance.
     
  19. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @drktoninato

    Hi, thank you for choosing EM!

    So the project actually built fine before importing the GoogleMobileAds (GMA) plugin? What version of the GMA did you use?

    Looks like there's some syntax (some keyword, e.g. class, enum, etc. is missing) in the Java code of the package com.new.GameName, which looks strange. Do you know where that package came from?
     
    drktoninato likes this.
  20. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    Hi, thank you for replying.

    Yes the project always built fine.
    The only problem, if we can call it in that way, is that I can only build it in internal and not in gradle.

    About GMA plugin, I am using Google Mobile Ads Unity Plugin v3.15.0 downloaded from here:
    https://github.com/googleads/googleads-mobile-unity/releases

    I was redirected to that github page by clicking "Download Google Mobile Ads Plugin" in Easy Mobile settings tab, and after importing the package, Easy Mobile notificated me that the package was imported fine, exactly like the documentation says.

    admob setup EM.png

    About the com.new.GameName package, I think it was generated after I choose my package name when I followed this
    (right at that minute and second of the linked video)
    and linked (?) it, when I was submitting an alpha .apk of my game in order to get the fingerprint I needed in the Google Play Console to connect the API to test the Cloud Saving of my game.

    (Sorry for the messy explanation, but it's the first time I'm making an app game and honestly I didn't understand both what Google was asking and how I got it to work).
     
  21. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    I'm looking for a plugin with iOS and Android cloud save support, which this plugin has.

    Is it possible to trim down what is imported into my project to only include the EasyMobile.GameServices.SavedGames handling? I don't need anything else from the plugin. Other plugins I've tried have 60+ MB of things that need to be imported into my project, which I'm trying my best to avoid!

    I already have my own managers/handling for Game Center and Google Games in my project. If I use the Easy Mobile plugin, is it going to conflict/cause issues? Specifically, does Easy Mobile attempt to sign the user in to Game Center / Google Games, and depend on its own handling of that, or can it be used if I have my own handling?
     
  22. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    Yes, if I am not wrong, you can avoid to make Easy Mobile to auto sign the user in, simply by unchecking the Auto Init box.

    auto init.png

    To be sure, check Easy Mobile documentation. It's really well written and fast to consult.
    Here's the link to what you are watching for:
    https://sglibgames.gitbooks.io/easy-mobile-user-guide/content/auto-initialization-setup.html
     
    pt5011 likes this.
  23. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    Thanks for the link. I've already read through all of the documentation, and I did see that you can choose not to auto-init, but in the rest of the docs it says that you still need to handle initialization at some point...and it's inside their Initialization call that I can't see/know what it does.

    Ideally I want to be able continue using my own handling for sign in, and have the Easy Mobile plugin recognize that the user is already signed in to Google Games / Game Center, and I can't verify this without seeing the code. :)

    The docs really are great though, very well written and useful!
     
    Last edited: Aug 6, 2018
  24. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @drktoninato

    So if com.new.GameName is the actual bundle ID you use for the project now, I think it may be worth trying replacing it with another ID and avoid the "new" keyword there. Generally you'd want a more specific bundle ID for your game, e.g. we use com.sglib.easymobile for our demo APK.
     
    drktoninato likes this.
  25. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    Hi @smithmj5

    Thank you for your interest in EM!

    Yes you can disable auto-init and use your own handling to sign in. EM should be able to recognize the user is already signed in or not. Just remember to enable GPGS's saved games feature during initialization (Game Center doesn't require this) and you should be able to use our saved games API no problemo :)

    If you have other questions just let me know.
     
  26. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    Awesome, that’s great to hear! Thanks for the quick response!

    I’m also wondering if I can delete most of the plugin from my project, as I only require the cloud saves portion. Is that possible? Or is the entire plugin treated as one large inter-connected thing?

    Trying to avoid adding hundreds of files to my project if I only need a handful of them, if that makes sense.

    Thanks!
     
  27. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    You are right!
    I've just created a new project and reimported AdMob, and now it's building even in gradle.
     
    Last edited: Aug 6, 2018
  28. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @smithmj5

    I would advise against deleting anything from the plugin, as you may get issues due to missing files if that's not done properly. In fact, that wouldn't help with reducing the build size either.

    The main part of EM that will get into your build is the scripts. Other resources (images, sounds, etc.) that are not referenced anywhere in your scenes won't get into the build. And scripts don't take much space. Better yet, most scripts of those modules that are disabled won't even be compiled so they won't be included in your build too!

    A quick way to test is build a project with and without EM and see the difference. I bet it wouldn't be anything noticeable ;)
     
  29. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    drktoninato likes this.
  30. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    I believe we talked too early...
    After importing GPGS it doesn't let me build anymore both gradle and internal, giving me 2 different errors:

    - Gradle:

    build failuer gradle.png

    CommandInvokationFailure: Gradle build failed.
    C:/Program Files/Java/jdk1.8.0_172\bin\java.exe -classpath "K:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx2048m" "assembleRelease"

    stderr[

    FAILURE: Build failed with an exception.

    * What went wrong:
    Execution failed for task ':transformClassesWithDexForRelease'.
    > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/common/api/internal/zzcc;

    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED in 14s
    ]
    stdout[
    NDK is missing a "platforms" directory.
    If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to C:\Users\Derek\AppData\Local\Android\Sdk\ndk-bundle.
    If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.

    NDK is missing a "platforms" directory.
    If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to C:\Users\Derek\AppData\Local\Android\Sdk\ndk-bundle.
    If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.

    The setTestClassesDir(File) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the setTestClassesDirs(FileCollection) method instead.
    The getTestClassesDir() method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the getTestClassesDirs() method instead.
    The ConfigurableReport.setDestination(Object) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the method ConfigurableReport.setDestination(File) instead.
    NDK is missing a "platforms" directory.
    If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to C:\Users\Derek\AppData\Local\Android\Sdk\ndk-bundle.
    If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.

    :preBuild UP-TO-DATE
    :preReleaseBuild UP-TO-DATE
    :checkReleaseManifest
    :preDebugBuild UP-TO-DATE
    :prepareAndroidArchLifecycleRuntime100Library
    :prepareComAndroidSupportCustomtabs2610Library
    :prepareComAndroidSupportSupportCompat2610Library
    :prepareComAndroidSupportSupportCoreUi2610Library
    :prepareComAndroidSupportSupportCoreUtils2610Library
    :prepareComAndroidSupportSupportFragment2610Library
    :prepareComAndroidSupportSupportMediaCompat2610Library
    :prepareComAndroidSupportSupportV42610Library
    :prepareComGoogleAndroidGmsPlayServicesAds1501Library
    :prepareComGoogleAndroidGmsPlayServicesAdsBase1501Library
    :prepareComGoogleAndroidGmsPlayServicesAdsIdentifier1501Library
    :prepareComGoogleAndroidGmsPlayServicesAdsLite1501Library
    :prepareComGoogleAndroidGmsPlayServicesAuth1180Library
    :prepareComGoogleAndroidGmsPlayServicesAuthApiPhone1180Library
    :prepareComGoogleAndroidGmsPlayServicesAuthApiPhoneLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesAuthBase1180Library
    :prepareComGoogleAndroidGmsPlayServicesAuthBaseLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesBase1180Library
    :prepareComGoogleAndroidGmsPlayServicesBaseLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesBasement1501Library
    :prepareComGoogleAndroidGmsPlayServicesDrive1180Library
    :prepareComGoogleAndroidGmsPlayServicesDriveLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesGames1180Library
    :prepareComGoogleAndroidGmsPlayServicesGamesLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesGass1501Library
    :prepareComGoogleAndroidGmsPlayServicesNearby1180Library
    :prepareComGoogleAndroidGmsPlayServicesNearbyLicense1180Library
    :prepareComGoogleAndroidGmsPlayServicesTasks1180Library
    :prepareComGoogleAndroidGmsPlayServicesTasksLicense1180Library
    :prepareComGoogleGamesGpgsPluginSupport0950Library
    :prepareComSglibEasymobileEasyMobile103Library
    :GoogleMobileAdsPlugin:preBuild UP-TO-DATE
    :GoogleMobileAdsPlugin:preReleaseBuild UP-TO-DATE
    :GoogleMobileAdsPlugin:checkReleaseManifest
    :GoogleMobileAdsPlugin:prepareReleaseDependencies
    :GoogleMobileAdsPlugin:compileReleaseAidl
    :GoogleMobileAdsPlugin:compileReleaseNdk NO-SOURCE
    :GoogleMobileAdsPlugin:compileLint
    :GoogleMobileAdsPlugin:copyReleaseLint NO-SOURCE
    :GoogleMobileAdsPlugin:mergeReleaseShaders
    :GoogleMobileAdsPlugin:compileReleaseShaders
    :GoogleMobileAdsPlugin:generateReleaseAssets
    :GoogleMobileAdsPlugin:mergeReleaseAssets
    :GoogleMobileAdsPlugin:mergeReleaseProguardFiles
    :GoogleMobileAdsPlugin:packageReleaseRenderscript NO-SOURCE
    :GoogleMobileAdsPlugin:compileReleaseRenderscript
    :GoogleMobileAdsPlugin:generateReleaseResValues
    :GoogleMobileAdsPlugin:generateReleaseResources
    :GoogleMobileAdsPlugin:packageReleaseResources
    :GoogleMobileAdsPlugin:processReleaseManifest
    :GoogleMobileAdsPlugin:generateReleaseBuildConfig
    :GoogleMobileAdsPlugin:processReleaseResources
    :GoogleMobileAdsPlugin:generateReleaseSources
    :GoogleMobileAdsPlugin:incrementalReleaseJavaCompilationSafeguard
    :GoogleMobileAdsPlugin:javaPreCompileRelease
    :GoogleMobileAdsPlugin:compileReleaseJavaWithJavac
    :GoogleMobileAdsPlugin:processReleaseJavaRes NO-SOURCE
    :GoogleMobileAdsPlugin:transformResourcesWithMergeJavaResForRelease
    :GoogleMobileAdsPlugin:transformClassesAndResourcesWithSyncLibJarsForRelease
    :GoogleMobileAdsPlugin:mergeReleaseJniLibFolders
    :GoogleMobileAdsPlugin:transformNativeLibsWithMergeJniLibsForRelease
    :GoogleMobileAdsPlugin:transformNativeLibsWithSyncJniLibsForRelease
    :GoogleMobileAdsPlugin:bundleRelease
    :GooglePlayGamesManifest.plugin:preBuild UP-TO-DATE
    :GooglePlayGamesManifest.plugin:preReleaseBuild UP-TO-DATE
    :GooglePlayGamesManifest.plugin:checkReleaseManifest
    :GooglePlayGamesManifest.plugin:prepareReleaseDependencies
    :GooglePlayGamesManifest.plugin:compileReleaseAidl
    :GooglePlayGamesManifest.plugin:compileReleaseNdk NO-SOURCE
    :GooglePlayGamesManifest.plugin:compileLint
    :GooglePlayGamesManifest.plugin:copyReleaseLint NO-SOURCE
    :GooglePlayGamesManifest.plugin:mergeReleaseShaders
    :GooglePlayGamesManifest.plugin:compileReleaseShaders
    :GooglePlayGamesManifest.plugin:generateReleaseAssets
    :GooglePlayGamesManifest.plugin:mergeReleaseAssets
    :GooglePlayGamesManifest.plugin:mergeReleaseProguardFiles
    :GooglePlayGamesManifest.plugin:packageReleaseRenderscript NO-SOURCE
    :GooglePlayGamesManifest.plugin:compileReleaseRenderscript
    :GooglePlayGamesManifest.plugin:generateReleaseResValues
    :GooglePlayGamesManifest.plugin:generateReleaseResources
    :GooglePlayGamesManifest.plugin:packageReleaseResources
    :GooglePlayGamesManifest.plugin:processReleaseManifest
    :GooglePlayGamesManifest.plugin:generateReleaseBuildConfig
    :GooglePlayGamesManifest.plugin:processReleaseResources
    :GooglePlayGamesManifest.plugin:generateReleaseSources
    :GooglePlayGamesManifest.plugin:incrementalReleaseJavaCompilationSafeguard
    :GooglePlayGamesManifest.plugin:javaPreCompileRelease
    :GooglePlayGamesManifest.plugin:compileReleaseJavaWithJavac
    :GooglePlayGamesManifest.plugin:processReleaseJavaRes NO-SOURCE
    :GooglePlayGamesManifest.plugin:transformResourcesWithMergeJavaResForRelease
    :GooglePlayGamesManifest.plugin:transformClassesAndResourcesWithSyncLibJarsForRelease
    :GooglePlayGamesManifest.plugin:mergeReleaseJniLibFolders
    :GooglePlayGamesManifest.plugin:transformNativeLibsWithMergeJniLibsForRelease
    :GooglePlayGamesManifest.plugin:transformNativeLibsWithSyncJniLibsForRelease
    :GooglePlayGamesManifest.plugin:bundleRelease
    :prepareReleaseDependencies
    :compileReleaseAidl
    :compileReleaseRenderscript
    :generateReleaseBuildConfig
    :generateReleaseResValues
    :generateReleaseResources
    :mergeReleaseResources
    :processReleaseManifest
    :processReleaseResources
    :generateReleaseSources
    :incrementalReleaseJavaCompilationSafeguard
    :javaPreCompileRelease
    :compileReleaseJavaWithJavac
    :compileReleaseNdk NO-SOURCE
    :compileReleaseSources
    :lintVitalRelease
    :mergeReleaseShaders
    :compileReleaseShaders
    :generateReleaseAssets
    :mergeReleaseAssets
    :transformClassesWithDexForRelease FAILED
    94 actionable tasks: 94 executed
    ]
    exit code: 1
    UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
    UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
    UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1 progress, System.String error)
    UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action`1 progress)
    Rethrow as GradleInvokationException: Gradle build failed
    UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action`1 progress)
    UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEngine.GUIUtility:processEvent(Int32, IntPtr)


    - Internal:

    internal build failure.png

    CommandInvokationFailure: Unable to convert classes into dex format.
    C:/Program Files/Java/jdk1.8.0_172\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:/Users/Derek/AppData/Local/Android/Sdk\tools" -Dfile.encoding=UTF8 -jar "K:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -

    stderr[
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/internal/zzbr;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/internal/zzbs;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/internal/zzcc;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/internal/zzcd;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/zzd;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/zze;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/zze;
    7 errors; aborting
    ]
    stdout[
    processing archive K:\progetti unity\Pixel Galaxy LD\Temp\StagingArea\android-libraries\GoogleMobileAdsPlugin\libs\.\unity-plugin-library.jar...
    processing com/google/unity/BuildConfig.class...
    processing com/google/unity/ads/AdNetworkExtras.class...
    processing com/google/unity/ads/Banner.class...
    processing com/google/unity/ads/Banner$1.class...
    processing com/google/unity/ads/Banner$10.class...
    processing com/google/unity/ads/Banner$11.class...
    processing com/google/unity/ads/Banner$12.class...
    processing com/google/unity/ads/Banner$13.class...
    processing com/google/unity/ads/Banner$2.class...
    processing com/google/unity/ads/Banner$3.class...
    processing com/google/unity/ads/Banner$3$1.class...
    processing com/google/unity/ads/Banner$3$2.class...
    processing com/google/unity/ads/Banner$3$3.class...
    processing com/google/unity/ads/Banner$3$4.class...
    processing com/google/unity/ads/Banner$3$5.class...
    processing com/google/unity/ads/Banner$4.class...
    processing com/google/unity/ads/Banner$5.class...
    processing com/google/unity/ads/Banner$6.class...
    processing com/google/unity/ads/Banner$7.class...
    processing com/google/unity/ads/Banner$8.class...
    processing com/google/unity/ads/Banner$9.class...
    processing com/google/unity/ads/CustomNativeAd.class...
    processing com/google/unity/ads/CustomNativeAd$1.class...
    processing com/google/unity/ads/CustomNativeAd$2.class...
    processing com/google/unity/ads/Interstitial.class...
    processing com/google/unity/ads/Interstitial$1.class...
    processing com/google/unity/ads/Interstitial$1$1.class...
    processing com/google/unity/ads/Interstitial$1$1$1.class...
    processing com/google/unity/ads/Interstitial$1$1$2.class...
    processing com/google/unity/ads/Interstitial$1$1$3.class...
    processing com/google/unity/ads/Interstitial$1$1$4.class...
    processing com/google/unity/ads/Interstitial$1$1$5.class...
    processing com/google/unity/ads/Interstitial$2.class...
    processing com/google/unity/ads/Interstitial$3.class...
    processing com/google/unity/ads/NativeAdLoader.class...
    processing com/google/unity/ads/NativeAdLoader$1.class...
    processing com/google/unity/ads/NativeAdLoader$2.class...
    processing com/google/unity/ads/NativeAdLoader$3.class...
    processing com/google/unity/ads/NativeAdLoader$3$1.class...
    processing com/google/unity/ads/NativeAdLoader$3$2.class...
    processing com/google/unity/ads/NativeAdLoader$3$3.class...
    processing com/google/unity/ads/NativeAdLoader$4.class...
    processing com/google/unity/ads/PluginUtils.class...
    processing com/google/unity/ads/RewardBasedVideo.class...
    processing com/google/unity/ads/RewardBasedVideo$1.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$1.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$2.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$3.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$4.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$5.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$6.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$7.class...
    processing com/google/unity/ads/RewardBasedVideo$1$1$8.class...
    processing com/google/unity/ads/RewardBasedVideo$2.class...
    processing com/google/unity/ads/RewardBasedVideo$3.class...
    processing com/google/unity/ads/RewardBasedVideo$4.class...
    processing com/google/unity/ads/UnityAdListener.class...
    processing com/google/unity/ads/UnityAdLoaderListener.class...
    processing com/google/unity/ads/UnityRewardBasedVideoAdListener.class...
    processing archive K:\progetti unity\Pixel Galaxy LD\Temp\StagingArea\android-libraries\android.arch.lifecycle.runtime-1.0.0\libs\.\classes.jar...
    processing android/arch/lifecycle/BuildConfig.class...
    processing android/arch/lifecycle/LifecycleRegistry.class...
    processing android/arch/lifecycle/LifecycleRegistry$1.class...
    processing android/arch/lifecycle/LifecycleRegistry$ObserverWithState.class...
    processing android/arch/lifecycle/LifecycleRegistryOwner.class...
    processing android/arch/lifecycle/ReportFragment.class...
    processing android/arch/lifecycle/ReportFragment$ActivityInitializationListener.class...
    processing archive K:\progetti unity\Pixel Galaxy LD\Temp\StagingArea\android-libraries\com.android.support.customtabs-26.1.0\libs\.\classes.jar...
    processing android/support/customtabs/BuildConfig.class...
    processing android/support/customtabs/CustomTabsCallback.class...
    processing android/support/customtabs/CustomTabsClient.class...
    processing android/support/customtabs/CustomTabsClient$1.class...
    processing android/support/customtabs/CustomTabsClient$2.class...
    processing android/support/customtabs/CustomTabsClient$2$1.class...
    processing android/support/customtabs/CustomTabsClient$2$2.class...
    processing android/support/customtabs/CustomTabsClient$2$3.class...
    processing android/support/customtabs/CustomTabsClient$2$4.class...
    processing android/support/customtabs/CustomTabsIntent.class...
    processing android/support/customtabs/CustomTabsIntent$1.class...
    processing android/support/customtabs/CustomTabsIntent$Builder.class...
    processing android/support/customtabs/CustomTabsService.class...
    processing android/support/customtabs/CustomTabsService$1.class...
    processing android/support/customtabs/CustomTabsService$1$1.class...
    processing android/support/customtabs/CustomTabsService$Result.class...
    processing android/support/customtabs/CustomTabsServiceConnection.class...
    processing android/support/customtabs/CustomTabsServiceConnection$1.class...
    processing android/support/customtabs/CustomTabsSession.class...
    processing android/support/customtabs/CustomTabsSessionToken.class...
    processing android/support/customtabs/CustomTabsSessionToken$1.class...
    processing android/support/customtabs/ICustomTabsCallback.class...
    processing android/support/customtabs/ICustomTabsCallback$Stub.class...
    processing android/support/customtabs/ICustomTabsCallback$Stub$Proxy.class...
    processing android/support/customtabs/ICustomTabsService.class...
    processing android/support/customtabs/ICustomTabsService$Stub.class...
    processing android/support/customtabs/ICustomTabsService$Stub$Proxy.class...
    processing android/support/customtabs/IPostMessageService.class...
    processing android/support/customtabs/IPostMessageService$Stub.class...
    processing android/support/customtabs/IPostMessageService$Stub$Proxy.class...
    processing android/support/customtabs/PostMessageService.class...
    processing android/support/customtabs/PostMessageService$1.class...
    processing android/support/customtabs/PostMessageServiceConnection.class...
    processing archive K:\progetti unity\Pixel Galaxy LD\Temp\StagingArea\android-libraries\com.android.support.support-compat-26.1.0\libs\.\classes.jar...
    processing android/support/compat/BuildConfig.class...
    processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.class...
    processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoApi16Impl.class...
    processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoApi18Impl.class...
    processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoBaseImpl.class...
    processing android/support/v4/app/ActivityCompat.class...
    processing android/support/v4/app/ActivityCompat$1.class...
    processing android/support/v4/app/ActivityCompat$OnRequestPermissionsResultCallback.class...
    processing android/support/v4/app/ActivityCompat$RequestPermissionsRequestCodeValidator.class...
    processing android/support/v4/app/ActivityCompat$SharedElementCallback21Impl.class...
    processing android/support/v4/app/ActivityCompat$SharedElementCallback23Impl.class...
    processing android/support/v4/app/ActivityCompat$SharedElementCallback23Impl$1.class...
    processing android/support/v4/app/ActivityManagerCompat.class...
    processing android/support/v4/app/ActivityOptionsCompat.class...
    processing android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi16Impl.class...
    processing android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi23Impl.class...
    processing android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi24Impl.class...
    processing android/support/v4/app/AlarmManagerCompat.class...
    processing android/support/v4/app/AppOpsManagerCompat.class...
    processing android/support/v4/app/BundleCompat.class...
    processing android/support/v4/app/BundleCompat$BundleCompatBaseImpl.class...
    processing android/support/v4/app/BundleUtil.class...
    processing android/support/v4/app/INotificationSideChannel.class...
    processing android/support/v4/app/INotificationSideChannel$Stub.class...
    processing android/support/v4/app/INotificationSideChannel$Stub$Proxy.class...
    processing android/support/v4/app/JobIntentService.class...
    processing android/support/v4/app/JobIntentService$CommandProcessor.class...
    processing android/support/v4/app/JobIntentService$CompatJobEngine.class...
    processing android/support/v4/app/JobIntentService$CompatWorkEnqueuer.class...
    processing android/support/v4/app/JobIntentService$CompatWorkItem.class...
    processing android/support/v4/app/JobIntentService$GenericWorkItem.class...
    processing android/support/v4/app/JobIntentService$JobServiceEngineImpl.class...
    processing android/support/v4/app/JobIntentService$JobServiceEngineImpl$WrapperWorkItem.class...
    processing android/support/v4/app/JobIntentService$JobWorkEnqueuer.class...
    processing android/support/v4/app/JobIntentService$WorkEnqueuer.class...
    processing android/support/v4/app/NotificationBuilderWithActions.class...
    processing android/support/v4/app/NotificationBuilderWithBuilderAccessor.class...
    processing android/support/v4/app/NotificationCompat.class...
    processing android/support/v4/app/NotificationCompat$Action.class...
    processing android/support/v4/app/NotificationCompat$Action$1.class...
    processing android/support/v4/app/NotificationCompat$Action$Builder.class...
    processing android/support/v4/app/NotificationCompat$Action$Extender.class...
    processing android/support/v4/app/NotificationCompat$Action$WearableExtender.class...
    processing android/support/v4/app/NotificationCompat$BadgeIconType.class...
    processing android/support/v4/app/NotificationCompat$BigPictureStyle.class...
    processing android/support/v4/app/NotificationCompat$BigTextStyle.class...
    processing android/support/v4/app/NotificationCompat$Builder.class...
    processing android/support/v4/app/NotificationCompat$BuilderExtender.class...
    processing android/support/v4/app/NotificationCompat$CarExtender.class...
    processing android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation.class...
    processing android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation$1.class...
    processing android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation$Builder.class...
    processing android/support/v4/app/NotificationCompat$DecoratedCustomViewStyle.class...
    processing android/support/v4/app/NotificationCompat$Extender.class...
    processing android/support/v4/app/NotificationCompat$InboxStyle.class...
    processing android/support/v4/app/NotificationCompat$MessagingStyle.class...
    processing android/support/v4/app/NotificationCompat$MessagingStyle$Message.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi16Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi19Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi20Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi21Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi24Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatApi26Impl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatBaseImpl.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatBaseImpl$BuilderBase.class...
    processing android/support/v4/app/NotificationCompat$NotificationCompatImpl.class...
    processing android/support/v4/app/NotificationCompat$NotificationVisibility.class...
    processing android/support/v4/app/NotificationCompat$Style.class...
    processing android/support/v4/app/NotificationCompat$WearableExtender.class...
    processing android/support/v4/app/NotificationCompatApi20.class...
    processing android/support/v4/app/NotificationCompatApi20$Builder.class...
    processing android/support/v4/app/NotificationCompatApi21.class...
    processing android/support/v4/app/NotificationCompatApi21$Builder.class...
    processing android/support/v4/app/NotificationCompatApi24.class...
    processing android/support/v4/app/NotificationCompatApi24$Builder.class...
    processing android/support/v4/app/NotificationCompatApi26.class...
    processing android/support/v4/app/NotificationCompatApi26$Builder.class...
    processing android/support/v4/app/NotificationCompatBase.class...
    processing android/support/v4/app/NotificationCompatBase$Action.class...
    processing android/support/v4/app/NotificationCompatBase$Action$Factory.class...
    processing android/support/v4/app/NotificationCompatBase$UnreadConversation.class...
    processing android/support/v4/app/NotificationCompatBase$UnreadConversation$Factory.class...
    processing android/support/v4/app/NotificationCompatExtras.class...
    processing android/support/v4/app/NotificationCompatJellybean.class...
    processing android/support/v4/app/NotificationCompatJellybean$Builder.class...
    processing android/support/v4/app/NotificationCompatKitKat.class...
    processing android/support/v4/app/NotificationCompatKitKat$Builder.class...
    processing android/support/v4/app/NotificationCompatSideChannelService.class...
    processing android/support/v4/app/NotificationCompatSideChannelService$NotificationSideChannelStub.class...
    processing android/support/v4/app/NotificationManagerCompat.class...
    processing android/support/v4/app/NotificationManagerCompat$CancelTask.class...
    processing android/support/v4/app/NotificationManagerCompat$NotifyTask.class...
    processing android/support/v4/app/NotificationManagerCompat$ServiceConnectedEvent.class...
    processing android/support/v4/app/NotificationManagerCompat$SideChannelManager.class...
    processing android/support/v4/app/NotificationManagerCompat$SideChannelManager$ListenerRecord.class...
    processing android/support/v4/app/NotificationManagerCompat$Task.class...
    processing android/support/v4/app/RemoteInput.class...
    processing android/support/v4/app/RemoteInput$1.class...
    processing android/support/v4/app/RemoteInput$Builder.class...
    processing android/support/v4/app/RemoteInput$Impl.class...
    processing android/support/v4/app/RemoteInput$ImplApi20.class...
    processing android/support/v4/app/RemoteInput$ImplBase.class...
    processing android/support/v4/app/RemoteInput$ImplJellybean.class...
    processing android/support/v4/app/RemoteInputCompatApi20.class...
    processing android/support/v4/app/RemoteInputCompatBase.class...
    processing android/support/v4/app/RemoteInputCompatBase$RemoteInput.class...
    <message truncated>

    And some other times (always in internal) it gives me this:

    IOException: Failed to Move File / Directory from 'Temp/StagingArea\android-libraries\com.google.android.gms.play-services-auth-api-phone-license-11.8.0\classes.jar' to 'Temp/StagingArea\android-libraries\com.google.android.gms.play-services-auth-api-phone-license-11.8.0\libs\classes.jar'.
    UnityEditor.FileUtil.MoveFileOrDirectory (System.String source, System.String dest) (at C:/buildslave/unity/build/artifacts/generated/common/editor/FileUtilBindings.gen.cs:80)
    UnityEditor.Android.PostProcessor.Tasks.ProcessAAR.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
    UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report)
    UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
    UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:272)
    UnityEngine.GUIUtility:processEvent(Int32, IntPtr)

    I believe I experienced every kind of error building in these last 2 weeks (every single day) and read almost every thread about all these errors...

    And I tried to:

    - Downgrade JDK from 9 to 8
    - Downgrade SDK from 28 to 27.0.3
    - Assets -> Play Services Resolver -> Android Resolver -> Force Resolve
    - Assets -> Reimport All
    - Delete assets from the current project and reimport them 1 by 1 and then building
    - Start projects from scratch, cleaning my project from useless files then reimporting all assets
    - Uninstalled the multiple versions of JDK because maybe they were conflicting
    - Import assets in different orders AdMob -> GPGS || GPGS -> AdMob and then switch platform
    - Switch platform and the import assets in different orders
    - Change the Package Name

    @pt5011 am I missing something to try? Do you have any suggestions?
     
    Last edited: Aug 6, 2018
  31. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    I ended up buying the Easy Mobile Pro asset, and have cloud saved games mostly working.

    Currently testing on Android.

    Everything works great, except for when I switched over from automatic conflict resolution, to manual.

    I'm using the same code as in the documentation, with a custom/manual conflict resolution function. Unfortunately whenever that function is called, the game freezes on my Android devices. I've tested with two different devices.

    logcat doesn't reveal anything, as it seems like the game just hard freezes. Seems like an infinite loop is happening maybe?

    My conflict resolution function is just this for testing, and it still has the issue:

    Code (CSharp):
    1. SavedGameConflictResolutionStrategy OnOpenSavedGameConflict(SavedGame baseGame, byte[] baseData, SavedGame remoteGame, byte[] remoteData)
    2. {
    3.         return SavedGameConflictResolutionStrategy.UseBase;
    4. }
    If I add a Debug.Log just before the return, I will see that message in the log once, but nothing will show after that, and the game will freeze. Sending the game to the background and then bringing it back will result in just a black screen.

    The completed callback function passed to GameServices.SavedGames.OpenWithManualConflictResolution is never called.

    Have you seen this issue before?
     
  32. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @drktoninato

    Judging from the error, you seem to have problem with your NDK setup and duplicate .arr files. What I can suggest now is:

    - Try Assets -> Play Services Resolver -> Android Resolver -> Force Resolve once again.
    - Search for any duplicated .aar files in your project (files with same name but different versions), especially those with "common" in their names, and remove the duplicated one
    - Double check your NDK installation and its path in Unity Preferences > External Tools.
     
  33. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @smithmj5

    I believe we haven't had such issue before. Are you testing with our demo app? Can you share the steps to reproduce the error?
     
  34. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    It happens with the demo scene as well. It seems to be the internal ChooseMetadata function that is causing the issue, so it's unlikely your plugin doing it. Seems like an issue with the Google Games plugin.

    I found someone having a very similar issue, but unfortunately no one has replied:
    https://github.com/playgameservices/play-games-plugin-for-unity/issues/2189

    Very weird as everything else works with the Google Games plugin (achievements, leaderboards, cloud saves with automatic conflict resolution, etc.)
     
  35. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @drktoninato

    So it turns out that the newer versions of Google Mobile Ads plugin use version 15.0.1 for the play-services-ads dependencies, which are conflicting with the other play-services dependencies added by the Google Play Games plugin. The simple workaround is downgrade to GMA plugin version 3.13.1. I’ve tested a project with GPGS 0.9.50 and GMA 3.13.1 and it built fine on Unity 2018.2.0f2.

    To remove current version of GMA simply remove the Assets/GoogleMobileAds folder and import 3.13.1.
     
    drktoninato likes this.
  36. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @smithmj5 Thanks for the information. We'll look into the issue to see if we can come up with anything helpful. But if it's really a bug of gpgs itself then maybe best to wait for an official fix from them. Will automatic resolving work for your project? And maybe you'd want to try an older version of gpgs? I believe we used a 0.9.4x version when we tested the feature and didn't have the issue.
     
  37. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    Thank you @pt5011! I'm gonna try that, because even the last advice you gave me didn't work.
     
  38. blitzcloud

    blitzcloud

    Joined:
    Aug 18, 2015
    Posts:
    27
    That seemed to do it! Thanks
     
    pt5011 likes this.
  39. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    @pt5011 It actually worked! You are amazing!!!
    Buying this asset wasactually a good choice!
    Thank you very much again!!!
     
    pt5011 likes this.
  40. smithmj5

    smithmj5

    Joined:
    May 24, 2013
    Posts:
    143
    Yeah for now I'm using automatic resolving with the "longest play time" for Android, which isn't ideal but is better than using base or remote. On that note, it might be worth exposing the other options for automatic conflict resolution in your Easy Mobile options UI, as separate choices for Android and iOS (because Android has more options than iOS). For now I just hard-coded a change to always return ConflictResolutionStrategy.UseLongestPlaytime on Android, in AndroidSavedGameClient.AsGPGSConflictResolutionStrategy.

    I had some other issues with the previous version of GPG which is why I'm using 0.9.50. Thanks for the suggestion though!
     
  41. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @drktoninato Glad it worked!

    If you're happy with the asset, we would very much appreciate it if you could leave us a review on the asset store :)
     
    drktoninato likes this.
  42. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @smithmj5

    Glad you found a workaround and thank you for your suggestion! I added a note and we'll definitely look into this issue in a future update.
     
  43. MassiveMonsterGames

    MassiveMonsterGames

    Joined:
    Aug 4, 2016
    Posts:
    12
    Just spent two days trying to get GPGS working, as I was getting a "Failed to re-package resources"...

    I was using latest GPGS, Unity, SDK etc. Fixed the issue by downgrading to 0.9.4 for GPGS.

    Can you confirm it works with latest GPGS @pt5011 ? As I wasted a lot of time trying to make it work. :/ Not so easy mobile.
     
    Last edited: Aug 14, 2018
  44. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    Hi @MassiveMonsterGames

    Thank you so much for choosing Easy Mobile. It's a pity the experience hasn't been so smooth.

    And yes, EM works fine with latest GPGS (0.9.50 as of now). In fact, I believe that's the version most people are using with EM right now.

    Can you share the specific build error (using 0.9.50) and its stack trace? So I can hopefully tell what went wrong and how to fix it.

    P.S. Conflicts between 3rd party Android plugins in Unity are infamous. Things improve recently thanks to tools like Google Play Services Resolver (which EM employs), but not all conflicts can be solved automatically. This is out of our control. As you know EM works with many different 3rd party plugins, which may conflict with each other now and then due to bad coordination (if there is at all!). That's why we're happy to offer the support service to help with issues like this. Thank you for understanding!
     
  45. goodspeed2012

    goodspeed2012

    Joined:
    Apr 21, 2013
    Posts:
    3
    nityIAP: No App Receipt found

    Unavailable product -

    UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()

    UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)

    UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)

    UnityEngine.Purchasing.Extension.UnityUtil:Update()



    (Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Debug.bindings.h Line: 43)



    In-App Purchasing OnInitializeFailed. InitializationFailureReason:NoProductsAvailable

    EasyMobile.StoreListener:OnInitializeFailed(InitializationFailureReason)

    UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()

    UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)

    UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)

    UnityEngine.Purchasing.Extension.UnityUtil:Update()



    (Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Debug.bindings.h Line: 43)



    UnityIAP Promo: Clearing promo product metadata

    UnityEngine.Purchasing.Promo:provideProductsToAds(HashSet`1)

    UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)

    UnityEngine.Purchasing.Extension.UnityUtil:Update()



    (Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Debug.bindings.h Line: 43)
    UnityEarlyTransactionObserver: Request to initiate queued payments


    Failed to load local user's score: unknown leaderboard name Score.

    EasyMobile.GameServices:LoadLocalUserScore(String, Action`2)

    UnityEngine.SocialPlatforms.GameCenter.GameCenterPlatform:AuthenticateCallbackWrapper(Int32, String)



    (Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Debug.bindings.h Line: 43)

    IAP and Game services have some problems for me
    Unity2018.2.0, ios build
    i followed user guide step by step.
    App store Connect setting is no problem.

    Could you please help me fix it as soon as possible?
    Thank you!
     
  46. skytow2003

    skytow2003

    Joined:
    Feb 9, 2014
    Posts:
    30
    Hello,
    I just upgraded to 1.3 and I got some errors. Most of them were about duplicate scripts which I deleted. They were all in Deprecated folders.
    Yhe last two I don't understand how to get rid of.
    Assets/EasyMobile/Scripts/GameServices/GameServicesItem.cs(45,18): error CS0101: The namespace `EasyMobile' already contains a definition for `Leaderboard'

    and

    Assets/EasyMobile/Scripts/GameServices/GameServicesItem.cs(54,18): error CS0101: The namespace `EasyMobile' already contains a definition for `Achievement'

    thanks in advance for your response.
    pietro
     
  47. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
  48. skytow2003

    skytow2003

    Joined:
    Feb 9, 2014
    Posts:
    30
    I updated like you said and I initially got two errors regarding libraries ("libeasymobile") in two folders.
    Assets/Plugins/Android/libs/armeabi-v7a
    Assets/Plugins/Android/libs/x86

    I deleted the two libraries from these folders and all errors went away. I now have the libraries in
    Assets/EasyMobile/Plugins/Android/libs/armeabi-v7a and the same path but with the last folder being ../x86

    At this point I tried to make a build (Unity 2018.2.1.1f1 , build system Internal, IL2CPP) but it fails with this window
    Failed to repackage resources. See the console for details

    The console tells me I have 2 errors.
    UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors
    at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x0021f] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:187
    at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x0007f] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:94
    UnityEngine.GUIUtility:processEvent(Int32, InPtr)

    I don't know what I could give you to help you figure out what could have happened. I will just attach last part of the error message. Tell me if I should send you the whole output and if you prefer it to you email or here on the forum.
    thanks again for the help
    pietro

    CommandInvokationFailure: Failed to re-package resources.
    C:\Program Files (x86)\Android\android-sdk\build-tools\27.0.3\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/Program Files (x86)/Android/android-sdk\platforms\android-28\android.jar" -F bin/resources.ap_ --extra-packages android.arch.lifecycle:android.support.compat:android.support.coreui:android.support.coreutils:android.support.fragment:android.support.mediacompat:android.support.v4:com.sglib.easymobile.androidnative:com.unity.purchasing:com.android.vending.billing:com.unity.purchasing.googleplay:android.arch.lifecycle:android.support.compat:android.support.coreui:android.support.coreutils:android.support.fragment:android.support.mediacompat:android.support.v4:com.unity3d.ads -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\android.arch.lifecycle.runtime-1.0.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-compat-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-core-ui-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-core-utils-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-fragment-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-media-compat-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.android.support.support-v4-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\com.sglib.easymobile.easy-mobile-1.0.3\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\common\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\GoogleAIDL\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\GooglePlay\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\runtime-1.0.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-compat-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-core-ui-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-core-utils-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-fragment-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-media-compat-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\support-v4-26.1.0\res" -S "C:\Users\go\Desktop\KubeRunXportProj\Temp\StagingArea\android-libraries\unity-ads\res"

    stderr[
    fakeLogOpen(/dev/log_security) failed
    fakeLogOpen(/dev/log_security) failed
     
  49. pt5011

    pt5011

    Joined:
    Aug 7, 2015
    Posts:
    405
    @skytow2003

    First try menu Assets > Play Services Resolver > Android Resolver > Force Resolve and rebuild.

    If the error persists, yes, please send the full error message to our support email support@sglibgames.com so we can assist you. Thank you!
     
  50. drktoninato

    drktoninato

    Joined:
    Jul 3, 2018
    Posts:
    11
    Hey @pt5011!

    I would like to integrate in my game the GIF feature which Easy Mobile brilliantly provides, but I'd like to ask you a few questions before doing that:

    1) As far as I understood from the documentation, after the recorder finished to record the GIF it will save the file in the user's device.
    Will the player be asked, at application launch, if they desire the game to have access their media files? (in order to store the recorded GIFs)

    2) If this is the case, what happens to the Recorder if the player refuses to have the game access their media files?

    3) Is there also a way to delete created GIFs once the URL is recived back from Giphy? (Or to save them somehow in GPGS instead - Google Drive of course)

    Thank you in advance, Easy Mobile is great as always!