Unity与安卓交互心得
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity与安卓交互心得相关的知识,希望对你有一定的参考价值。
一 调用android原生分享功能。
不需要网上说的在Android studio或者eclipse导出jar包到unity然后调用。只需要正常建立一个cs文件写入以下代码即可。
public void Share(string shareText, string imagePath, string url, string subject = "") { #if UNITY_ANDROID AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND")); AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + imagePath); intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); intentObject.Call<AndroidJavaObject>("setType", "image/png"); intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), shareText); AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, subject); currentActivity.Call("startActivity", jChooser); #endif
其中这里有一个截图分享,没有特别的需求的话直接调用unity自带的截图功能。
string ScreenshotName = "screenshot.png"; string screenShotPath = Application.persistentDataPath + "/" + ScreenshotName; Application.CaptureScreenshot(ScreenshotName);
默认情况下用这个方法得到的截图保存在Application.persistentDataPath里面,不同的平台具体的路径不一样。通过函数名也可以知道,这个路径是可以持久保存数据的路径。我也用来保存游戏数据的xml文件。
二 集成googleplaygame与fyber sdk的心得。这个是我最近做的。正常情况下把插件全部导入进去就可以了。但可能会出现一系列错误,如打包不成功,运行闪退等情况。这种情况的产生的原因都是类似的,其他sdk的问题也可以借鉴。
打包不成功的原因我遇到的主要有以下几种情况:
1无法合并xml。(Unable to merge android manifests.)
原因:这是因为存在多个xml的文件,这几个xml文件存在相同的标签但是内容属性不一样,导致unity不知道选择哪一个。
解决方案:找出所有要打包进去的xml,删除其中一部分冲突的。
2无法打包资源(Fail to re-package resources)
原因:声明引用了不存在的资源。
可能是在AndroidManifest.xml中声明引用了一些不存在的资源。常见问题出在这里:
<application android:allowBackup="true" android:theme="@android:style/Theme.NoTitleBar" android:icon="@drawable/app_icon" android:label="@string/app_name">
解决方案: 将标签内容换成上述默认的即可。这种问题常见与国内原生sdk的接入。
或者是你现有的jar,aar包所依赖的包没有导入进来。你需要找到并导入进来。放在Plugins\Android目录下即可。
3无法转换成dex(Unable to convert to dex format)
原因:各个jar,aar包存在冲突。如重复资源包,各个相关联的jar,aar版本不一样(这种情况可能可以导出但是app闪退)。
解决方案:找到并删除重复的jar,aar包,统一相互关联的jar,aar包的版本。
对于需要使用google service jar,aar的项目而言,建议使用统一的jar,aar处理插件,该插件还提供自定义导入jar,aar包。
地址:https://github.com/googlesamples/unity-jar-resolver
以上是关于Unity与安卓交互心得的主要内容,如果未能解决你的问题,请参考以下文章
Unity与安卓交互 | Unity2019.3版本之后,在Android Studio中写代码导出aar包与Unity中使用交互的方法