一 调用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.)
原因:这是因为存在多个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包。