Unity中接入ShareSDK和ShareREC的教程及常见问题

前言

最近在做的一个AR项目中,接入了ShareSDK和ShareREC,在Android平台基本很顺利,除了AndroidManifest.xml文件部分冲突,以及部分文件重复,都可以很轻松的解决。但在iOS平台接入过程中遇到了许多问题,这里对遇到的问题进行总结并分享。我们先看Android平台的问题,之后再解决iOS平台的问题。解决iOS端的问题是,我会假设你已经完全接好了Android平台,并且Android平台已经能够打包且运行了,这样就可以确保我们需要解决的只是iOS打包时产生的问题。


Android平台常见问题

安卓平台接入时遇到的问题:

The namespace `global::’ already contains a definition for `MiniJSON’

这个问题是由于ShareSDK和ShareREC中都包含了MiniJSON.cs这个JSON操作库,删掉其中一个可以解决。

AndroidManifest.xml文件冲突

Error: [Temp\StagingArea\AndroidManifest-main.xml, E:\Workspace\MobSDK\Temp\StagingArea\android-libraries\ShareSDK\AndroidManifest.xml:19] Trying to merge incompatible /manifest/application/activity[@name=com.mob.tools.MobUIShell] element:

UnityEditor.HostView:OnGUI()

这个问题是因为ShareSDK和ShareREC的两份AndroidManifest.xml文件中,都有android:name="com.mob.tools.MobUIShell"的Activity,我们只需要删除掉ShareREC文件夹里AndroidManifest.xml中的这个Activity即可解决。

Jar包重复冲突

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/MobApplication;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/MobSDK;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/MobSDK$1;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/MobSDKLog$1;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/a;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/commons/LockAction;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/commons/MobProduct;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/commons/MobProductCollector;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mob/commons/a;

java.lang.RuntimeException: Translation has been interruptedjava.lang.RuntimeException: Translation has been interrupted
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:613)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498) at SDKMain.main(SDKMain.java:130)

这个问题也是由于ShareSDK和ShareREC中存在相同的Jar包导致的(ShareREC中自带了一部分的分享SDK),两份Jar包可能版本不一致,我们保留最新版本的即可。所以解决办法是:删除Assets\Plugins\Android\ShareSDK\libs或Assets\Plugins\Android\ShareREC\libs文件夹中版本较旧的Jar包。

打开APP时提示初始化失败,不支持该硬件

Failure to initialize! Your hardware does not support this application, sorry!

遇到这个问题时,我们需要删除掉Assets\Plugins\Android\ShareSDK\libs目录中的部分so库,一般情况下只需要删除mips开头的即可,保留arm和x86开头的。


iOS平台常见问题

从mob官网下载的用于Unity的ShareSDK有2个,一个是:ShareSDKForU3D.unitypackage,一个是ShareSDKForU3DWithEditor.unitypackage,这里我们使用第一个。不是用第二个的原因是,我们之前接入的ShareREC中,有相同的SDK代码(iOSAutoPackage),主要用于打包iOS时自动修改XCode的Info.plist文件。官方文档中有介绍,可以解压SDK.zip文件,来合并需要打包的SDK文件,我尝试后出现了新的错误,所以并没有使用这种方法。我们会单独下载iOS平台的ShareSDK并加入到XCode工程中。