千磨万击还坚劲,任尔东西南北风。这篇文章主要讲述Unity与安卓交互心得相关的知识,希望能为你提供帮助。
一
调用android原生分享功能。
不需要网上说的在Android studio或者eclipse导出jar包到unity然后调用。只需要正常建立一个cs文件写入以下代码即可。
public void Share(string shareText, string imagePath, string url, string subject = ""){#if UNITY_ANDROIDAndroidjavaClass 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中声明引用了一些不存在的资源。常见问题出在这里:
< applicationandroid: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与安卓交互心得】
推荐阅读
- android应用名称设置的问题
- 更新用户资源上的GET方法以使用JPA
- 使用Spring Boot初始化RESTful Web服务项目
- 为所有资源实现通用异常处理
- 使用自定义注释增强Swagger文档
- 为RESTful服务实现动态过滤
- 内容协商实现对XML的支持
- 实现DELETE方法删除用户资源
- 执行POST服务为用户创建帖子