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

 

转载于:https://www.cnblogs.com/tinygame/p/7636798.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值