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文件。

 

二  集成googleplaygamefyber 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的接入。

或者是你现有的jaraar包所依赖的包没有导入进来。你需要找到并导入进来。放在Plugins\Android目录下即可。

 

3无法转换成dex(Unable to convert to dex format)

原因:各个jaraar包存在冲突。如重复资源包,各个相关联的jaraar版本不一样(这种情况可能可以导出但是app闪退)。

解决方案:找到并删除重复的jaraar包,统一相互关联的jaraar包的版本。

对于需要使用google service jar,aar的项目而言,建议使用统一的jar,aar处理插件,该插件还提供自定义导入jar,aar包。

地址:https://github.com/googlesamples/unity-jar-resolver

 



以上是关于Unity与安卓交互心得的主要内容,如果未能解决你的问题,请参考以下文章

Unity与安卓交互 | Unity2019.3版本之后,在Android Studio中写代码导出aar包与Unity中使用交互的方法

unity 与oc交互

unity学习笔记-有关打包到安卓开机黑屏时间过长的心得

Unity和安卓的交互

修改unity导出到安卓的activity

Unity接入北斗探针SDK(基于AndroidJavaProxy)丨安卓交互的最佳方式