Announcement

Collapse
No announcement yet.

Ultimate Mobile Kit for iOS & Android - Firebase

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ultimate Mobile Kit for iOS & Android - Firebase



    Ultimate Mobile Kit
    Firebase mobile implementation for UE4

    Ultimate Mobile Kit is a plugin for UE4 that lets you integrate the Firebase platform for iOS & Android.

    Firebase is a platform that helps you quickly develop high-quality experiences, grow your user base, and earn more money. Firebase is made up of complementary features that you can mix-and-match to fit your needs. You can focus on making your game and not waste time building complex infrastructure.

    Required Unreal Engine 4.15 or above.

    Current plugin version: 1.10.2
    User Guide: https://gamednastudio.com/plugins/do..._UserGuide.pdf


    Buy now on Sellfy (20% OFF): https://sellfy.com/p/fc9C/
    Buy now on Marketplace: https://www.unrealengine.com/marketp...e-kit-firebase



    FEATURES:
    Mobile Analytics – heart of Firebase, see user behavior and measure attribution from a single dashboard.
    Cloud Messaging – lets you reliably deliver and receive messages at no cost.
    Push Notifications – schedule and send from dashboard unlimited notifications to engage the right players at the most relevant time.
    Authentication – authentication system that supports email & password login and adapters for Facebook, Twitter, GitHub, Google Sign-In, and Phone Number Authentication.
    Instance Id – generate unique user IDs for authentication and security tokens for use with other services.
    Cloud Storage – store and serve user-generated content like save games, images, audio, video or binary data.
    Remote Config – update your game without deploying a new version and customize content for different Firebase Analytics audiences and measure results.
    Performance Monitoring – get insights into how your game performs from your users’ point of view, with automatic and customized performance tracing.
    Crashlytics – track, prioritize, and fix stability issues with lightweight but powerful, realtime crash reporter that improves your game quality.
    Dynamic Links – improve acquisition and engagement by bringing users directly to content that they were originally searching for, whether they have your game installed or not.
    Invites – complete solution for game referrals and sharing, free email and SMS delivery, let your existing players easy share your game.
    Test Lab - test your games on physical and virtual devices hosted by Google that allow you to run tests that simulate actual usage environments.
    Cloud Functions - run backend code without managing servers and keep your logic private and secure.
    Predictions - use the power of Google's machine learning to create dynamic user groups based on players' predicted behavior.
    A/B Testing - create experiments to optimize the users experience for a business goal.
    Hosting - deploy web page with speed and security without all the hassle.
    ★ All features are exposed to Blueprints.
    ★ Supports gameDNA installer. No more downloading SDKs and creating packages on your own!
    ★ Out-of-the-box for mobile platforms: iOS & Android.
    ★ Works with Blueprint-only & source code projects.
    ★ Works with Launcher & GitHub UE4 versions.

    WHAT YOU GET:
    ★ Full source code available on GitHub private repo!
    ★ Compatible with iOS & Android (all-in-one)
    ★ Easy plugin setup
    ★ All future updates
    ★ Support via e-mail


    Realtime Database is an extension of this plugin.




    Plugin is used in our mobile game CHASERS:




    You can download example project at the following address: https://github.com/gameDNAstudio/ExampleProjects


    Facebook: https://www.facebook.com/gameDNAstudio
    Twitter: https://twitter.com/gameDNAstudio



    More about Firebase you can find on the official website.














    FULL LIST OF SUPPORTED FUNCTIONS (BLUEPRINTS AND C++):

    ANALYTICS:
    • Firebase Analytics Init
    • Firebase Analytics Log Event
    • Firebase Analytics Log Event Double
    • Firebase Analytics Log Event Integer
    • Firebase Analytics Log Event String
    • Firebase Analytics Set Current Screen
    • Firebase Analytics Set User Id
    • Firebase Analytics Set User Property
    • Is Firebase Analytics Initialized


    AUTHENTICATION:
    • Firebase Authentication Init
    • Firebase Create User With Email And Password
    • Firebase Delete User
    • Firebase Fetch Providers For Email
    • Firebase Get Logged User
    • Firebase Get User Token
    • Firebase Is User Logged In
    • Firebase Link With Credential
    • Firebase Reauthenticate User
    • Firebase Reload User
    • Firebase Send Email Verification
    • Firebase Send Password Reset Email
    • Firebase Sign In Anonymously
    • Firebase Sign In With Credential
    • Firebase Sign In With Custom Token
    • Firebase Sign In With Email And Password
    • Firebase Sign In With Google
    • Firebase Sign Out
    • Firebase Unlink Provider
    • Firebase Update Email
    • Firebase Update Password
    • Firebase Update User Profile
    • Firebase Verify Phone Number
    • Is Firebase Authentication Initialized


    CRASHLYTICS:
    • Firebase Crashlytics Force Crash
    • Firebase Crashlytics Force Exception
    • Firebase Crashlytics Set User Identifier
    • Firebase Crashlytics Set User Email
    • Firebase Crashlytics Set Username
    • Firebase Crashlytics Write Log
    • Firebase Crashlytics Write Log With Tag And Priority
    • Firebase Crashlytics Set String
    • Firebase Crashlytics Set Bool
    • Firebase Crashlytics Set Float
    • Firebase Crashlytics Set Integer


    DYNAMIC LINKS:
    • Firebase Dynamic Links Init
    • Firebase Dynamic Links Fetch
    • Firebase Dynamic Links Get Long Link
    • Firebase Dynamic Links Get Short Link
    • Firebase Dynamic Links Create Listener (Events: OnDynamicLinkReceived)


    INVITES:
    • Firebase Invites Init
    • Firebase Invites Send Invite
    • Firebase Invites Convert Invitation
    • Firebase Invites Fetch
    • Firebase Invites Get Listener (Events: OnInviteReceived, OnErrorReceived, OnInviteNotReceived)


    INSTANCE ID:
    • Firebase Instance Id Init
    • Firebase Instance Id Get Token
    • Firebase Instance Id Get Id
    • Firebase Instance Id Delete Token
    • Firebase Instance Id Delete Id


    MESSAGING:
    • Firebase Messaging Init
    • Firebase Send Message
    • Firebase Subscribe Topic
    • Firebase Unsubscribe Topic
    • Is Firebase Messaging Initialized


    REMOTE CONFIG:
    • Firebase Remote Config Init
    • Firebase Remote Config Activate Fetched
    • Firebase Remote Config Fetch
    • Firebase Remote Config Get Boolean
    • Firebase Remote Config Get Float
    • Firebase Remote Config Get Integer
    • Firebase Remote Config Get Keys
    • Firebase Remote Config Get Keys By Prefix
    • Firebase Remote Config Get String
    • Firebase Remote Config Last Fetch Get Info
    • Is Firebase Remote Config Initialized


    STORAGE:
    • Firebase Storage Init
    • Firebase Storage Reference Delete
    • Firebase Storage Reference Get Download Url
    • Firebase Storage Reference Get File
    • Firebase Storage Reference Get Metadata
    • Firebase Storage Reference Put File
    • Firebase Storage Reference Update Metadata
    • Cancel
    • Child
    • Get Bucket
    • Get Full Path
    • Get Parent
    • Get Platform Storage Path
    • Get Unreal Storage Path
    • Get Save Game Storage Path
    • Get Progress
    • Get Short Name
    • Get Storage Reference From Path
    • Get Storage Reference From Url
    • Get Storage Reference to Root
    • Is Paused
    • Is Valid
    • Pause
    • Resume


    PERFORMANCE MONITORING:
    • Firebase Start Performance Trace
    • Stop
    • Increment Counter


    TEST LAB:
    • Firebase Test Lab Get Game Loop Scenario
    • Firebase Test Lab Take Screenshot
    • Firebase Test Lab Finish Test


    CREDENTIAL:
    • Firebase Email Credential
    • Firebase Facebook Credential
    • Firebase GitHub Credential
    • Firebase Google Credential
    • Firebase Google Play Games Credential
    • Firebase Twitter Credential


    VARIANT:
    • Firebase Boolean Variant
    • Firebase Float Variant
    • Firebase Integer Variant
    • Firebase String Variant


    APP:
    • Firebase Check Google Play Availability
    • Firebase Make Google Play Available


    ULTIMATE MOBILE KIT COMPONENT:
    • User Signed In
    • User Signed Out
    • User Id Token Changed
    • Message Received
    • Token Received
    Last edited by gameDNA studio; 12-03-2018, 12:03 PM.

  • replied
    Ultimate Mobile Kit 1.10.2 released!


    We've just released hotfix for UE 4.21.
    You can download it from GitHub repository on releases tab or your Sellfy dashboard (for Sellfy customers). Update also was submitted for UE4 Marketplace but it needs to wait for approval.



    CHANGELOG:
    • Added improvements for Android 9 (Pie)
    • Added improvements for iOS 12, iPhone XS, iPhone XS Max, and iPhone XR
    • Firebase SDK for all platforms updated to 5.4.3
    • Firebase Core SDK for Android updated to 16.0.5
    • Firebase Analytics SDK for Android updated to 16.0.5
    • Firebase Database SDK for Android updated to 16.0.5
    • Firebase Auth SDK for Android updated to 16.0.5
    • Firebase Invites SDK for Android updated to 16.0.5
    • Firebase Performance Monitoring SDK for Android updated to 16.2.1
    • Firebase Storage SDK for Android updated to 16.0.5
    • Firebase Crashlytics SDK for Android updated to 2.9.6
    • Firebase Core SDK for iOS updated to 5.13.0
    • Firebase Crashlytics SDK for iOS updated to 3.12.0



    If you haven't owned it yet, you can buy now on Sellfy or UE4 Marketplace.

    Leave a comment:


  • replied
    Originally posted by gameDNA studio View Post

    It seems to be fine. All necessary info is available. Not always 100% of symbols are visible in Crashlytics.
    Thank you for confirming.

    I have another problem.
    UMK ForceCrash, ForceException not working at Android.
    I called this function using custom console command.
    But there is any crash, or exception and I can't open Unreal Console window after function call.
    When I changed "throw new RuntimeException("This is a crash")" to Crashlytics.logException(new RuntimeException("This is a crash"), it worked.

    ---------------------------------------------------------------------------------------------------------
    I modified UltimateMobileKit_UPL_Android.xml.
    Now it works well

    Code:
     public void AndroidThunkJava_FirebaseCrashlyticsForceCrash()
         {
              GameActivity._activity.runOnUiThread(new Runnable() {
               @Override
               public void run() {
                  Crashlytics.getInstance().crash();
                }
              });
          }
    
          public void AndroidThunkJava_FirebaseCrashlyticsForceException()
          {
              GameActivity._activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  throw new RuntimeException("This is a crash");
                }
              });
          }
    Last edited by NKei; 11-29-2018, 05:04 AM.

    Leave a comment:


  • replied
    Originally posted by NKei View Post

    Actually, Only part of it is displayed.
    It seems to be fine. All necessary info is available. Not always 100% of symbols are visible in Crashlytics.

    Leave a comment:


  • replied
    We added this functionality to Ultimate Mobile Kit 1.10.1 (UE 4.21) and you can integrate changes from this commit: https://github.com/gameDNAstudio/Ult...530bffd9025287
    Ok, I'll Check it. Thank you.


    Originally posted by gameDNA studio View Post

    It looks fine... When you delete androidNdkLibsOut it tries to find necessary folder automatically. Could you check if stack traces with symbols are visible on the Firebase Crashlytics Dashboard?
    Actually, Only part of it is displayed.
    Here is My Firebase Crashlytics Dashboard Info.

    Click image for larger version

Name:	dashboad.png
Views:	1
Size:	92.1 KB
ID:	1555898
    Code:
    Crashed: Thread: SIGSEGV  0x0000000000000000
           at My SourceCode FunctionName (FileName:Line)
           at (Missing)()
           at UFunction::Invoke(UObject*, FFrame&, void*)(Class.cpp:4728)
           at UObject::ProcessEvent(UFunction*, void*)(ScriptCore.cpp:1342)
           at UObject::FindFunction(FName) const(ScriptCore.cpp:1173)
           at (Missing)()
           at (Missing)()
           at void TScriptDelegate<FWeakObjectPtr>::ProcessDelegate<UObject>(void*) const(ScriptDelegates.h:240)
           at SCheckBox::OnMouseButtonDoubleClick(FGeometry const&, FPointerEvent const&)(SButton.cpp:249)
           at FOnButtonClickedEvent_DelegateWrapper(TMulticastScriptDelegate<FWeakObjectPtr> const&)(Button.h:17)
           at decltype ((((*this).Obj)->*((*this).MemFunPtr))()) TMemberFunctionCaller<UUserWidget, FVector2D (UUserWidget::*)() const>::operator()<>()(DelegateInstanceInterface.h:156)
           at TBaseDelegate<FReply>::Execute() const(DelegateSignatureImpl.inl:537)
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()
           at (Missing)()

    Leave a comment:


  • replied
    Originally posted by NKei View Post

    I tried to upload symbol after delete Intermediate and build, but still fail. (development build / architecture armv7)
    when I remove androidNdkLibsOut 'build/intermediates/transforms/stripDebugSymbol' line, file uploaded successfully.
    In this case, androidNdkLibsOut in crashlytics.log file was 'build\intermediates\transforms\stripDebugSymbol\debug'
    It looks fine... When you delete androidNdkLibsOut it tries to find necessary folder automatically. Could you check if stack traces with symbols are visible on the Firebase Crashlytics Dashboard?


    Originally posted by NKei View Post
    I have another question.
    I want to upload symbol file automatically, so added this code to UltimateMobileKit_UPL_Android.xml

    But it didn't work. What should I do?
    We added this functionality to Ultimate Mobile Kit 1.10.1 (UE 4.21) and you can integrate changes from this commit: https://github.com/gameDNAstudio/Ult...530bffd9025287

    Leave a comment:


  • replied
    Originally posted by gameDNA studio View Post


    Hello,

    we've just tested it again with UE 4.20 and UMA 1.9.3 and it should work good.

    Could you please delete [PROJECT_FOLDER]/Intermediate, build, and try to upload symbols again? If it still fails, is this development or shipping build? Is this for architecture arm-v7a, arm64, or both?

    Thank you for your patience.
    I tried to upload symbol after delete Intermediate and build, but still fail. (development build / architecture armv7)
    when I remove androidNdkLibsOut 'build/intermediates/transforms/stripDebugSymbol' line, file uploaded successfully.
    In this case, androidNdkLibsOut in crashlytics.log file was 'build\intermediates\transforms\stripDebugSymbol\debug'

    I have another question.
    I want to upload symbol file automatically, so added this code to UltimateMobileKit_UPL_Android.xml
    <insert>
    android {
    afterEvaluate {
    assembleDebug.finalizedBy(crashlyticsUploadSymbolsDebug)
    }
    }
    </insert>
    But it didn't work. What should I do?

    Leave a comment:


  • replied
    Originally posted by NKei View Post
    Hi, I have a problem with Upload dSyms for Android.

    version
    Unreal Engine 4.20.3 / Ultimate Mobile Kit 1.9.3
    androidNdkOut 'build/intermediates/transforms/mergeJniLibs'
    androidNdkLibsOut 'build/intermediates/transforms/stripDebugSymbol'

    Here is My log

    Code:

    Code:
    > Configure project :app
    Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
    Observed package id 'build-tools;25.0.3' in inconsistent location 'C:\NVPACK\android-sdk-windows\build-tools\android-7.1.1' (Expected 'C:\NVPACK\android-sdk-windows\build-tools\25.0.3')
    Observed package id 'build-tools;25.0.3' in inconsistent location 'C:\NVPACK\android-sdk-windows\build-tools\android-7.1.1' (Expected 'C:\NVPACK\android-sdk-windows\build-tools\25.0.3')
    registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
    
    > Task :app:processDebugGoogleServices
    Parsing json file: D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\google-services.json
    
    > Task :app:crashlyticsGenerateSymbolsDebug
    ERROR - Crashlytics Developer Tools error.
    java.lang.IllegalArgumentException: Multiple files matching D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\build\intermediates\transforms\mergeJniLibs\debug\0\lib\arm64-v8a\libcrashlytics.so in D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\build\intermediates\transforms\stripDebugSymbol were found. Is the -androidNdkLibsOut setting configured correctly?
    at com.crashlytics.tools.android.project.codemapping.csym.AndroidCSymIdStrategy.createCSymIdForFile(AndroidCSymIdStrategy.java:64)
    at com.crashlytics.tools.android.project.codemapping.csym.ElfCSymFactory.createCSymFromFile(ElfCSymFactory.java:94)
    at com.crashlytics.tools.android.project.codemapping.csym.NdkCSymGenerator.generateCodeMappings(NdkCSymGenerator.java:70)
    at com.crashlytics.tools.android.project.CSymManager.generate(CSymManager.java:96)
    at com.crashlytics.tools.android.DeveloperTools.processProperties(DeveloperTools.java:692)
    at com.crashlytics.tools.android.DeveloperTools.processArgsInternal(DeveloperTools.java:348)
    at com.crashlytics.tools.android.DeveloperTools.gradleMain(DeveloperTools.java:292)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder.callDevtoolsWrappingRuntimeExceptions(FabricTaskBuilder.groovy:359)
    at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder.this$2$callDevtoolsWrappingRuntimeExceptions(FabricTaskBuilder.groovy)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder$_crashlyticsGenerateSymbols_closure10.doCall(FabricTaskBuilder.groovy:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:681)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:656)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:60)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:128)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:46)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:311)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:202)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:132)
    at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:107)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
    at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:45)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:71)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:51)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:58)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:33)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:50)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:745)

    Hello,

    we've just tested it again with UE 4.20 and UMA 1.9.3 and it should work good.

    Could you please delete [PROJECT_FOLDER]/Intermediate, build, and try to upload symbols again? If it still fails, is this development or shipping build? Is this for architecture arm-v7a, arm64, or both?

    Thank you for your patience.

    Leave a comment:


  • replied
    Hi, I have a problem with Upload dSyms for Android.

    version
    Unreal Engine 4.20.3 / Ultimate Mobile Kit 1.9.3
    androidNdkOut 'build/intermediates/transforms/mergeJniLibs'
    androidNdkLibsOut 'build/intermediates/transforms/stripDebugSymbol'

    Here is My log

    Code:

    Code:
    > Configure project :app
    Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
    Observed package id 'build-tools;25.0.3' in inconsistent location 'C:\NVPACK\android-sdk-windows\build-tools\android-7.1.1' (Expected 'C:\NVPACK\android-sdk-windows\build-tools\25.0.3')
    Observed package id 'build-tools;25.0.3' in inconsistent location 'C:\NVPACK\android-sdk-windows\build-tools\android-7.1.1' (Expected 'C:\NVPACK\android-sdk-windows\build-tools\25.0.3')
    registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection)
    
    > Task :app:processDebugGoogleServices
    Parsing json file: D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\google-services.json
    
    > Task :app:crashlyticsGenerateSymbolsDebug
    ERROR - Crashlytics Developer Tools error.
    java.lang.IllegalArgumentException: Multiple files matching D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\build\intermediates\transforms\mergeJniLibs\debug\0\lib\arm64-v8a\libcrashlytics.so in D:\Dev_Test\Client\Intermediate\Android\APK\gradle\app\build\intermediates\transforms\stripDebugSymbol were found. Is the -androidNdkLibsOut setting configured correctly?
            at com.crashlytics.tools.android.project.codemapping.csym.AndroidCSymIdStrategy.createCSymIdForFile(AndroidCSymIdStrategy.java:64)
            at com.crashlytics.tools.android.project.codemapping.csym.ElfCSymFactory.createCSymFromFile(ElfCSymFactory.java:94)
            at com.crashlytics.tools.android.project.codemapping.csym.NdkCSymGenerator.generateCodeMappings(NdkCSymGenerator.java:70)
            at com.crashlytics.tools.android.project.CSymManager.generate(CSymManager.java:96)
            at com.crashlytics.tools.android.DeveloperTools.processProperties(DeveloperTools.java:692)
            at com.crashlytics.tools.android.DeveloperTools.processArgsInternal(DeveloperTools.java:348)
            at com.crashlytics.tools.android.DeveloperTools.gradleMain(DeveloperTools.java:292)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
            at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
            at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
            at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
            at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder.callDevtoolsWrappingRuntimeExceptions(FabricTaskBuilder.groovy:359)
            at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder.this$2$callDevtoolsWrappingRuntimeExceptions(FabricTaskBuilder.groovy)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
            at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
            at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
            at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
            at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
            at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
            at com.crashlytics.tools.gradle.tasks.FabricTaskBuilder$_crashlyticsGenerateSymbols_closure10.doCall(FabricTaskBuilder.groovy:190)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
            at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
            at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
            at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
            at groovy.lang.Closure.call(Closure.java:414)
            at groovy.lang.Closure.call(Closure.java:430)
            at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:681)
            at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:656)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
            at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
            at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
            at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
            at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
            at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
            at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:60)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:128)
            at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
            at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
            at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:46)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
            at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:311)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:202)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:132)
            at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:107)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
            at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
            at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
           at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:45)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:71)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:51)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:58)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:33)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:50)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
            at java.lang.Thread.run(Thread.java:745)

    Leave a comment:


  • replied
    How to use Ultimate Mobile Kit in C++?


    Add the following line to your *.Build.cs file private dependency module name:

    Code:
    PrivateDependencyModuleNames.AddRange(new string[] { "UltimateMobileKit" });
    Before you call needed plugin function you should add necessary header:

    Code:
    #include "UltimateMobileKit.h"
    and init proper Firebase module somewhere (in this case this is Firebase Analytics):

    Code:
    void TestGameMode::InitFirebase()
    {
        // Retrieving Ultimate Mobile Kit subsystem
        FUltimateMobileKit* UltimateMobileKit = FUltimateMobileKit::Get();
    
        // Checking if Ultimate Mobile Kit subsystem is valid
        if (UltimateMobileKit)
        {
            // Retrieving Firebase Analytics module (we recommend using Shared Pointers)
            TSharedPtr<FFirebaseAnalytics, ESPMode::ThreadSafe> FirebaseAnalytics = UltimateMobileKit->GetFirebaseAnalytics();
    
            // Checking if Firebase Analytics module is valid
            if (FirebaseAnalytics.IsValid())
            {
                // Creating delegate for Init function
                FOnFirebaseAnalyticsInitializeCompleteDelegate InitializeCompleteDelegate = FOnFirebaseAnalyticsInitializeCompleteDelegate::CreateUObject(this, &ThisClass::OnInitCompleted);
    
                // Calling Firebase Analytics Init function
                FirebaseAnalytics->Init(InitializeCompleteDelegate);
    
                return;
            }
        }
    }
    
    void TestGameMode::OnInitCompleted(bool bSuccess)
    {
    }
    You have now access to all functions from initialized Firebase module. For example Set User Id:

    Code:
    FirebaseAnalytics->SetUserId(TEXT("User_Id"));
    or Log Event with multiple parameters:

    Code:
    TArray<UFirebaseVariant*> Parameters = TArray<UFirebaseVariant*>();
    UFirebaseVariant* Parameter1 = UFirebaseVariant::FirebaseStringVariant(this, TEXT("Parameter1_Name"), TEXT("Parameter1_Value"));
    UFirebaseVariant* Parameter2 = UFirebaseVariant::FirebaseBooleanVariant(this, TEXT("Parameter2_Name"), true);
    UFirebaseVariant* Parameter3 = UFirebaseVariant::FirebaseIntegerVariant(this, TEXT("Parameter3_Name"), 28);
    UFirebaseVariant* Parameter4 = UFirebaseVariant::FirebaseFloatVariant(this, TEXT("Parameter4_Name"), 67.12f);
    
    FirebaseAnalytics->LogEvent(TEXT("Test_Event"), Parameters);

    Leave a comment:


  • replied
    Ultimate Mobile Kit 1.10.1 and 1.9.3 released!


    We've just released plugin binaries 1.10.1 for UE 4.21 and 1.9.3 for UE 4.20.
    You can download it from GitHub repository on releases tab or your Sellfy dashboard (for Sellfy customers). Update also was submitted for UE4 Marketplace but it needs to wait for approval.



    CHANGELOG OF 1.10.1 VERSION:
    • Crashlytics SDK updates
    • Fixed missing symbols in Crashlytics for Android
    • New version of Google Services Plist Generator with fixed paths on UNIX systems.
    • Fixed occassional crash in Firebase Crashlytics functions. Fix commited by 함대호 from WeMade Next.
    • Added automatic Crashlytics symbols uploading for Android.




    CHANGELOG OF 1.9.3 VERSION:
    • Fixed missing symbols in Crashlytics for Android


    If you haven't owned it yet, you can buy now on Sellfy or UE4 Marketplace.
    Last edited by gameDNA studio; 11-13-2018, 08:33 PM.

    Leave a comment:


  • replied


    Ultimate Mobile Kit 1.10.0 for UE 4.21 released!


    We've just released plugin binaries for Unreal Engine 4.21.
    You can download it from GitHub repository on releases tab or your Sellfy dashboard (for Sellfy customers). Update also was submitted for UE4 Marketplace but it needs to wait for approval.



    CHANGELOG:
    • Compatibility updates for Unreal Engine 4.21


    If you haven't owned it yet, you can buy now on Sellfy or UE4 Marketplace.

    Leave a comment:


  • replied
    Ultimate Mobile Kit 1.9.2 for UE 4.20 released!


    We've just released new update for Ultimate Mobile Kit.
    You can download it from GitHub repository on releases tab or your Sellfy dashboard (for Sellfy customers). Update also was submitted for UE4 Marketplace but it needs to wait for approval.



    CHANGELOG:
    • Added automatic processing Info.plist nodes. No more manual adding entries in Project Settings!
    • Firebase SDK for Android updated to 16.0.4
    • Firebase SDK for iOS updated to 5.10.0
    • Firebase SDK Universal updated to 5.4.0
    • Many bugfixes and stability improvements



    If you haven't owned it yet, you can buy now on Sellfy or UE4 Marketplace.

    Leave a comment:


  • replied
    Originally posted by alex_unrealUGSK_ View Post
    Hey, I've 2 questions:
    1) It's necessary to modify the build.gradle files ( when creating the firebase project it's asking for it )
    2) I cant' pair my firebase application with Fabric - *** doesn't have any Fabric Android apps with application id 'com.company.gameid'. Try signing in with a different account.

    Thanks for your response.
    Hi,

    1) No, you should ignore this message. Ultimate Mobile Kit handles everything automatically.
    2) Please make sure application IDs in Firebase and in Fabric are both the same. If yes, please contact with Firebase support here https://firebase.google.com/support/...roubleshooting as this is related directly to Firebase Dashboard.

    If you have more questions, feel free to ask!

    Leave a comment:


  • replied
    Originally posted by rasamaya View Post
    google cloud is phasing out the Mobile Vision API, and starting to use ML vision. Any chance you could make support for ios and android? Seems straight forward.
    We are trying to integrate ML Kit into UE4 but you know - this is very complex task, it will be definitely released in the future, but we can't provide any ETA at the current stage.

    Leave a comment:

Working...
X