API/Autodoc/Files/AndroidJavaObjectFactory.cpp.md
Source code
#include "AndroidJavaObjectFactory.h"
using namespace RuStoreSDK;
AndroidJavaObject* AndroidJavaObjectFactory::CreateFromClassName(const FString& className, bool bMakeGlobalRef)
{
#if PLATFORM_ANDROID
JNIEnv* env = FAndroidApplication::GetJavaEnv();
jclass javaClass = FAndroidApplication::FindJavaClass(TCHAR_TO_ANSI(*className));
if (javaClass == nullptr)
{
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateFromClassName: class not found: %s"), *className));
return nullptr;
}
FString methodSignature = "()V";
jmethodID constructor = FJavaWrapper::FindMethod(env, javaClass, "<init>", TCHAR_TO_ANSI(*methodSignature), false);
if (constructor == nullptr)
{
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateFromClassName: constructor not found for class %s"), *className));
return nullptr;
}
jobject localObject = env->NewObject(javaClass, constructor);
if (localObject == nullptr || env->ExceptionCheck())
{
if (env->ExceptionCheck()) env->ExceptionClear();
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateFromClassName: NewObject failed for class %s"), *className));
return nullptr;
}
jobject javaObject = bMakeGlobalRef ? env->NewGlobalRef(localObject) : localObject;
if (bMakeGlobalRef) env->DeleteLocalRef(localObject);
return new AndroidJavaObject(env, javaClass, javaObject, "", bMakeGlobalRef);
#else
return new AndroidJavaObject(className);
#endif
}
AndroidJavaObject* AndroidJavaObjectFactory::CreateForListener(const FString& className, const FString& interfaceName, intptr_t cppPointer, bool bMakeGlobalRef)
{
#if PLATFORM_ANDROID
JNIEnv* env = FAndroidApplication::GetJavaEnv();
jclass javaClass = FAndroidApplication::FindJavaClass(TCHAR_TO_ANSI(*className));
if (javaClass == nullptr)
{
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateForListener: class not found: %s"), *className));
return nullptr;
}
if (cppPointer != 0)
{
FString methodSignature = "(J)V";
jmethodID constructor = FJavaWrapper::FindMethod(env, javaClass, "<init>", TCHAR_TO_ANSI(*methodSignature), false);
if (constructor == nullptr)
{
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateForListener: constructor not found for class %s"), *className));
return nullptr;
}
jobject localObject = env->NewObject(javaClass, constructor, (jlong)cppPointer);
if (localObject == nullptr || env->ExceptionCheck())
{
if (env->ExceptionCheck()) env->ExceptionClear();
_LogError("AndroidJavaObjectFactory", FString::Printf(TEXT("CreateForListener: NewObject failed for class %s"), *className));
return nullptr;
}
jobject javaObject = bMakeGlobalRef ? env->NewGlobalRef(localObject) : localObject;
if (bMakeGlobalRef) env->DeleteLocalRef(localObject);
return new AndroidJavaObject(env, javaClass, javaObject, interfaceName, bMakeGlobalRef);
}
else
{
return new AndroidJavaObject(env, javaClass, nullptr, interfaceName, false);
}
#else
return new AndroidJavaObject(interfaceName);
#endif
}
#if PLATFORM_ANDROID
AndroidJavaObject* AndroidJavaObjectFactory::CreateFromThrowable(jthrowable throwable)
{
if (throwable == nullptr)
{
_LogError("AndroidJavaObjectFactory", TEXT("CreateFromThrowable: throwable is null"));
return nullptr;
}
JNIEnv* env = FAndroidApplication::GetJavaEnv();
jclass localClass = env->GetObjectClass(throwable);
jclass globalClass = (jclass)env->NewGlobalRef(localClass);
env->DeleteLocalRef(localClass);
jobject globalObject = env->NewGlobalRef((jobject)throwable);
return new AndroidJavaObject(env, globalClass, globalObject, "", true, true);
}
AndroidJavaObject* AndroidJavaObjectFactory::CreateFromObject(jobject javaObject)
{
if (javaObject == nullptr)
{
_LogError("AndroidJavaObjectFactory", TEXT("CreateFromObject: javaObject is null"));
return nullptr;
}
JNIEnv* env = FAndroidApplication::GetJavaEnv();
// javaClass: локальную ссылку глобализируем и удаляем
jclass localClass = env->GetObjectClass(javaObject);
jclass globalClass = (jclass)env->NewGlobalRef(localClass);
env->DeleteLocalRef(localClass);
// javaObject: глобализируем, но НЕ удаляем — caller владеет входным local ref
jobject globalObject = env->NewGlobalRef(javaObject);
return new AndroidJavaObject(env, globalClass, globalObject, "", true, true);
}
AndroidJavaObject* AndroidJavaObjectFactory::CreateFromClassAndObject(jclass javaClass, jobject javaObject)
{
if (javaObject == nullptr)
{
_LogError("AndroidJavaObjectFactory", TEXT("CreateFromClassAndObject: javaObject is null"));
return nullptr;
}
JNIEnv* env = FAndroidApplication::GetJavaEnv();
// Оба параметра: создаём независимые global refs, входные ссылки НЕ удаляем —
// caller владеет ими и должен вызвать DeleteLocalRef при необходимости
jclass globalClass = (jclass)env->NewGlobalRef(javaClass);
jobject globalObject = env->NewGlobalRef(javaObject);
return new AndroidJavaObject(env, globalClass, globalObject, "", true, true);
}
#endif
AndroidJavaObject* AndroidJavaObjectFactory::CreateFromStaticField(const FString& fieldName, const FString& className)
{
return AndroidJavaObject::GetStaticAJObject(fieldName, className);
}
AndroidJavaObject* AndroidJavaObjectFactory::CreateNullStub(const FString& interfaceName)
{
#if PLATFORM_ANDROID
JNIEnv* env = FAndroidApplication::GetJavaEnv();
return new AndroidJavaObject(env, nullptr, nullptr, interfaceName, false);
#else
return new AndroidJavaObject(interfaceName);
#endif
}
- Страницы
- AndroidJavaClass.cpp.en
- AndroidJavaClass.cpp
- AndroidJavaClass.h.en
- AndroidJavaClass.h
- AndroidJavaLog.cpp.en
- AndroidJavaLog.cpp
- AndroidJavaLog.h.en
- AndroidJavaLog.h
- AndroidJavaObject.cpp.en
- AndroidJavaObject.cpp
- AndroidJavaObject.h.en
- AndroidJavaObject.h
- AndroidJavaObjectFactory.cpp.en
- AndroidJavaObjectFactory.cpp
- AndroidJavaObjectFactory.h.en
- AndroidJavaObjectFactory.h
- AppUpdateErrorListenerImpl.cpp.en
- AppUpdateErrorListenerImpl.cpp
- AppUpdateErrorListenerImpl.h.en
- AppUpdateErrorListenerImpl.h
- AppUpdateInfoResponseListenerImpl.cpp.en
- AppUpdateInfoResponseListenerImpl.cpp
- AppUpdateInfoResponseListenerImpl.h.en
- AppUpdateInfoResponseListenerImpl.h
- AsyncNodes.en
- AsyncNodes
- AsyncNodes_Files.en
- AsyncNodes_Files
- CallbackHandler.cpp.en
- CallbackHandler.cpp
- CallbackHandler.h.en
- CallbackHandler.h
- EURuStoreAppUpdateOptions.h.en
- EURuStoreAppUpdateOptions.h
- EURuStoreInstallErrorCode.h.en
- EURuStoreInstallErrorCode.h
- EURuStoreInstallStatus.h.en
- EURuStoreInstallStatus.h
- EURuStoreUpdateAvailability.h.en
- EURuStoreUpdateAvailability.h
- EURuStoreUpdateFlowResult.h.en
- EURuStoreUpdateFlowResult.h
- ErrorConverter.cpp.en
- ErrorConverter.cpp
- ErrorConverter.h.en
- ErrorConverter.h
- ErrorListener.cpp.en
- ErrorListener.cpp
- ErrorListener.h.en
- ErrorListener.h
- FURuStoreAppUpdateInfo.h.en
- FURuStoreAppUpdateInfo.h
- FURuStoreError.cpp.en
- FURuStoreError.cpp
- FURuStoreError.h.en
- FURuStoreError.h
- FURuStoreFeatureAvailabilityResult.h.en
- FURuStoreFeatureAvailabilityResult.h
- FURuStoreInstallState.h.en
- FURuStoreInstallState.h
- FeatureAvailabilityListenerImpl.cpp.en
- FeatureAvailabilityListenerImpl.cpp
- FeatureAvailabilityListenerImpl.h.en
- FeatureAvailabilityListenerImpl.h
- IAndroidClasses.h.en
- IAndroidClasses.h
- IRuStoreListener.java.en
- IRuStoreListener.java
- InstallStateUpdateListenerImpl.cpp.en
- InstallStateUpdateListenerImpl.cpp
- InstallStateUpdateListenerImpl.h.en
- InstallStateUpdateListenerImpl.h
- Java.en
- Java
- JavaActivity.cpp.en
- JavaActivity.cpp
- JavaActivity.h.en
- JavaActivity.h
- JavaApplication.cpp.en
- JavaApplication.cpp
- JavaApplication.h.en
- JavaApplication.h
- JavaMethodSignature.cpp.en
- JavaMethodSignature.cpp
- JavaMethodSignature.h.en
- JavaMethodSignature.h
- JavaTypeConverter.cpp.en
- JavaTypeConverter.cpp
- JavaTypeConverter.h.en
- JavaTypeConverter.h
- Plugins.en
- Plugins
- Private.en
- Private
- Private_Files.en
- Private_Files
- Public.en
- Public
- Public_Files.en
- Public_Files
- ResponseListener.h.en
- ResponseListener.h
- RuStoreAppUpdate.Build.cs.en
- RuStoreAppUpdate.Build.cs
- RuStoreAppUpdate.cpp.en
- RuStoreAppUpdate.cpp
- RuStoreAppUpdate.h.en
- RuStoreAppUpdate.h
- RuStoreAppUpdate_Files.en
- RuStoreAppUpdate_Files
- RuStoreCore.Build.cs.en
- RuStoreCore.Build.cs
- RuStoreCore.cpp.en
- RuStoreCore.cpp
- RuStoreCore.h.en
- RuStoreCore.h
- RuStoreCoreUtils.java.en
- RuStoreCoreUtils.java
- RuStoreCore_Files.en
- RuStoreCore_Files
- RuStoreImage.java.en
- RuStoreImage.java
- RuStoreListener.cpp.en
- RuStoreListener.cpp
- RuStoreListener.h.en
- RuStoreListener.h
- SimpleResponseListener.cpp.en
- SimpleResponseListener.cpp
- SimpleResponseListener.h.en
- SimpleResponseListener.h
- SimpleResponseListenerT.h.en
- SimpleResponseListenerT.h
- Source.en
- Source
- Source_Files.en
- Source_Files
- UCompleteUpdateNode.cpp.en
- UCompleteUpdateNode.cpp
- UCompleteUpdateNode.h.en
- UCompleteUpdateNode.h
- UGetAppUpdateInfoNode.cpp.en
- UGetAppUpdateInfoNode.cpp
- UGetAppUpdateInfoNode.h.en
- UGetAppUpdateInfoNode.h
- URuStoreAppUpdateManager.cpp.en
- URuStoreAppUpdateManager.cpp
- URuStoreAppUpdateManager.h.en
- URuStoreAppUpdateManager.h
- URuStoreCore.cpp.en
- URuStoreCore.cpp
- URuStoreCore.h.en
- URuStoreCore.h
- URuStoreInstallStateUpdateListenerInterface.h.en
- URuStoreInstallStateUpdateListenerInterface.h
- UStartUpdateFlowNode.cpp.en
- UStartUpdateFlowNode.cpp
- UStartUpdateFlowNode.h.en
- UStartUpdateFlowNode.h
- UTextureDownloader.cpp.en
- UTextureDownloader.cpp
- UTextureDownloader.h.en
- UTextureDownloader.h
- UnrealPlayerImpl.cpp.en
- UnrealPlayerImpl.cpp
- UnrealPlayerImpl.h.en
- UnrealPlayerImpl.h
- UnrealPlayerWrapper.java.en
- UnrealPlayerWrapper.java
- UpdateFlowResultListenerImpl.cpp.en
- UpdateFlowResultListenerImpl.cpp
- UpdateFlowResultListenerImpl.h.en
- UpdateFlowResultListenerImpl.h
- docs.en
- docs
- unreal_example.en
- unreal_example
- AndroidJavaClass.cpp.en
- AndroidJavaClass.cpp
- AndroidJavaClass.h.en
- AndroidJavaClass.h
- AndroidJavaLog.cpp.en
- AndroidJavaLog.cpp
- AndroidJavaLog.h.en
- AndroidJavaLog.h
- AndroidJavaObject.cpp.en
- AndroidJavaObject.cpp
- AndroidJavaObject.h.en
- AndroidJavaObject.h
- AndroidJavaObjectFactory.cpp.en
- AndroidJavaObjectFactory.cpp
- AndroidJavaObjectFactory.h.en
- AndroidJavaObjectFactory.h
- AppUpdateErrorListenerImpl.cpp.en
- AppUpdateErrorListenerImpl.cpp
- AppUpdateErrorListenerImpl.h.en
- AppUpdateErrorListenerImpl.h
- AppUpdateInfoResponseListenerImpl.cpp.en
- AppUpdateInfoResponseListenerImpl.cpp
- AppUpdateInfoResponseListenerImpl.h.en
- AppUpdateInfoResponseListenerImpl.h
- AsyncNodes.en
- AsyncNodes
- AsyncNodes_Files.en
- AsyncNodes_Files
- CallbackHandler.cpp.en
- CallbackHandler.cpp
- CallbackHandler.h.en
- CallbackHandler.h
- EURuStoreAppUpdateOptions.h.en
- EURuStoreAppUpdateOptions.h
- EURuStoreInstallErrorCode.h.en
- EURuStoreInstallErrorCode.h
- EURuStoreInstallStatus.h.en
- EURuStoreInstallStatus.h
- EURuStoreUpdateAvailability.h.en
- EURuStoreUpdateAvailability.h
- EURuStoreUpdateFlowResult.h.en
- EURuStoreUpdateFlowResult.h
- ErrorConverter.cpp.en
- ErrorConverter.cpp
- ErrorConverter.h.en
- ErrorConverter.h
- ErrorListener.cpp.en
- ErrorListener.cpp
- ErrorListener.h.en
- ErrorListener.h
- FURuStoreAppUpdateInfo.h.en
- FURuStoreAppUpdateInfo.h
- FURuStoreError.cpp.en
- FURuStoreError.cpp
- FURuStoreError.h.en
- FURuStoreError.h
- FURuStoreFeatureAvailabilityResult.h.en
- FURuStoreFeatureAvailabilityResult.h
- FURuStoreInstallState.h.en
- FURuStoreInstallState.h
- FeatureAvailabilityListenerImpl.cpp.en
- FeatureAvailabilityListenerImpl.cpp
- FeatureAvailabilityListenerImpl.h.en
- FeatureAvailabilityListenerImpl.h
- IAndroidClasses.h.en
- IAndroidClasses.h
- IRuStoreListener.java.en
- IRuStoreListener.java
- InstallStateUpdateListenerImpl.cpp.en
- InstallStateUpdateListenerImpl.cpp
- InstallStateUpdateListenerImpl.h.en
- InstallStateUpdateListenerImpl.h
- Java.en
- Java
- JavaActivity.cpp.en
- JavaActivity.cpp
- JavaActivity.h.en
- JavaActivity.h
- JavaApplication.cpp.en
- JavaApplication.cpp
- JavaApplication.h.en
- JavaApplication.h
- JavaMethodSignature.cpp.en
- JavaMethodSignature.cpp
- JavaMethodSignature.h.en
- JavaMethodSignature.h
- JavaTypeConverter.cpp.en
- JavaTypeConverter.cpp
- JavaTypeConverter.h.en
- JavaTypeConverter.h
- Plugins.en
- Plugins
- Private.en
- Private
- Private_Files.en
- Private_Files
- Public.en
- Public
- Public_Files.en
- Public_Files
- ResponseListener.h.en
- ResponseListener.h
- RuStoreAppUpdate.Build.cs.en
- RuStoreAppUpdate.Build.cs
- RuStoreAppUpdate.cpp.en
- RuStoreAppUpdate.cpp
- RuStoreAppUpdate.h.en
- RuStoreAppUpdate.h
- RuStoreAppUpdate_Files.en
- RuStoreAppUpdate_Files
- RuStoreCore.Build.cs.en
- RuStoreCore.Build.cs
- RuStoreCore.cpp.en
- RuStoreCore.cpp
- RuStoreCore.h.en
- RuStoreCore.h
- RuStoreCoreUtils.java.en
- RuStoreCoreUtils.java
- RuStoreCore_Files.en
- RuStoreCore_Files
- RuStoreImage.java.en
- RuStoreImage.java
- RuStoreListener.cpp.en
- RuStoreListener.cpp
- RuStoreListener.h.en
- RuStoreListener.h
- SimpleResponseListener.cpp.en
- SimpleResponseListener.cpp
- SimpleResponseListener.h.en
- SimpleResponseListener.h
- SimpleResponseListenerT.h.en
- SimpleResponseListenerT.h
- Source.en
- Source
- Source_Files.en
- Source_Files
- UCompleteUpdateNode.cpp.en
- UCompleteUpdateNode.cpp
- UCompleteUpdateNode.h.en
- UCompleteUpdateNode.h
- UGetAppUpdateInfoNode.cpp.en
- UGetAppUpdateInfoNode.cpp
- UGetAppUpdateInfoNode.h.en
- UGetAppUpdateInfoNode.h
- URuStoreAppUpdateManager.cpp.en
- URuStoreAppUpdateManager.cpp
- URuStoreAppUpdateManager.h.en
- URuStoreAppUpdateManager.h
- URuStoreCore.cpp.en
- URuStoreCore.cpp
- URuStoreCore.h.en
- URuStoreCore.h
- URuStoreInstallStateUpdateListenerInterface.h.en
- URuStoreInstallStateUpdateListenerInterface.h
- UStartUpdateFlowNode.cpp.en
- UStartUpdateFlowNode.cpp
- UStartUpdateFlowNode.h.en
- UStartUpdateFlowNode.h
- UTextureDownloader.cpp.en
- UTextureDownloader.cpp
- UTextureDownloader.h.en
- UTextureDownloader.h
- UnrealPlayerImpl.cpp.en
- UnrealPlayerImpl.cpp
- UnrealPlayerImpl.h.en
- UnrealPlayerImpl.h
- UnrealPlayerWrapper.java.en
- UnrealPlayerWrapper.java
- UpdateFlowResultListenerImpl.cpp.en
- UpdateFlowResultListenerImpl.cpp
- UpdateFlowResultListenerImpl.h.en
- UpdateFlowResultListenerImpl.h
- docs.en
- docs
- unreal_example.en
- unreal_example