ue5 c++调用java

496 阅读1分钟

项目升级AndroidX

image.png image.png

gradle sync

image.png

c++调用java

build.js 添加

if (Target.Platform == UnrealTargetPlatform.Android)
		{
			PrivateDependencyModuleNames.AddRange(new string[] { "Launch" });
		}

在GameActivitry.java 添加函数 传参

public void AndroidThunkJava_InitName(String url)
    {
	   Log.debug("AndroidThunkJava_InitName");
	   Log.debug(url);
	   
       import android.content.Intent; 
       import android.net.Uri;

       Intent intent = new Intent();
       intent.setAction(Intent.ACTION_VIEW);
       Uri content_url = Uri.parse("https://www.baidu.com");
       intent.setData(content_url);
       startActivity(Intent.createChooser(intent, "请选择浏览器"));
    }

调用上面的函数时添加

void UMyUserWidget::callStartFuntion(FString url)
{
#if PLATFORM_ANDROID
    if (JNIEnv* Env = FAndroidApplication::GetJavaEnv())
    {
        jmethodID GetPackageNameMethodID = FJavaWrapper::FindMethod(Env, FJavaWrapper::GameActivityClassID, "AndroidThunkJava_InitName", "(Ljava/lang/String;)V", false);
        jstring jskey = Env->NewStringUTF(TCHAR_TO_UTF8(*url));
        FJavaWrapper::CallObjectMethod(Env, FJavaWrapper::GameActivityThis, GetPackageNameMethodID,jskey);
    }
#endif
}

#有中文时需使用NewStringUTF(TCHAR_TO_UTF8(*url))

#第三方插件注册: MyGame_UPL.xm,需要添加以下代码

if (Target.Platform == UnrealTargetPlatform.Android)
{
// Add UPL to add configrules.txt to our APK
string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, Target.RelativeEnginePath);
AdditionalPropertiesForReceipt.Add("AndroidPlugin", System.IO.Path.Combine(PluginPath, "MyGame_UPL.xml"));
}