Help us understand the problem. What is going on with this article?

AWS SDK for Unity を利用したアプリがAndroid上で動作しない【Unity 2019 2.11f1】

発生したエラー

AWS SDK for Unityを利用して『S3でリソースをアップロード/取得』ができるツールを作成してビルドしてみたところ
iOS/Unityエディタ上では問題なく動作するが、Android向けにビルドをすると下記のエラーが発生し動作しなくなった

E/Unity: ArgumentException: Object of type 'System.Object[]' cannot be converted to type 'UnityEngine.AndroidJavaObject[]'.
     at System.RuntimeType.CheckValue (System.Object value, System.Reflection.Binder binder, System.Globalization.CultureInfo culture, System.Reflection.BindingFlags invokeAttr) [0x00000] in <00000000000000000000000000000000>:0
     at System.Reflection.MonoMethod.ConvertValues (System.Reflection.Binder binder, System.Object[] args, System.Reflection.ParameterInfo[] pinfo, System.Globalization.CultureInfo culture, System.Reflection.BindingFlags invokeAttr) [0x00000] in <00000000000000000000000000000000>:0
     at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <00000000000000000000000000000000>:0
     at Amazon.Util.Internal.AmazonHookedPlatformInfo.Init () [0x00000] in <00000000000000000000000000000000>:0
     at Amazon.Util.Internal.AmazonH...

エラー内容を追ってみると、AWS SDKで提供されているメソッドで正しい結果が得られていないため他動作も止まってしまっているようだった。

環境

OS : macOS Mojave 10.14.5
Unity : 2019.2.11f1
AWS SDK : aws-sdk-unity_3.3.627.0

解決策

AWS SDK For .NETのIssueで同様の問題が上がっていた
https://github.com/aws/aws-sdk-net/issues/1262

issueの最後でmatteo-prosperiさんがUnityユーザー向けに .NET Standard 2.0用パッケージをZipで配布しているので、
ダウンロード → 解凍 → 必要なdllファイルをAssets/以下に置くだけでOK(*1)

(*1)コードは.NET向けにリファクタが必要。For Unityのdllは念の為全て削除してからやったほうがいい。

余談

原因や解決方法を調べていると、いろんなことが出てきたので備忘録としてまとめておく。

▶︎ For Unityはもうサポートしてないらしい

他issueを見てみると、AWSの方が「For Unityはすでにサポートされていないので、For .NETを使用するように」と案内を出していた
https://github.com/aws/aws-sdk-net/issues/1440

▶︎ AWS SDK周りなど最新情報を入手するには

下記の公式Blogをチェックするといい。
https://aws.amazon.com/blogs/
https://aws.amazon.com/jp/blogs/mobile/

▶︎ 他のエラーが発生したら

コードストリッピング回避をしていない可能性がある
Assets/以下どこでもいいので、下記の「link.xml」ファイルを作成して対処する

結構見落としがちなので、こちらも必ず設定するように。

link.xml
<linker>
      <!-- if you are using AWSConfigs.HttpClient.UnityWebRequest option-->

  <assembly fullname="UnityEngine">
      <type fullname="UnityEngine.Networking.UnityWebRequest" preserve="all" />
      <type fullname="UnityEngine.Networking.UploadHandlerRaw" preserve="all" />
      <type fullname="UnityEngine.Networking.UploadHandler" preserve="all" />
      <type fullname="UnityEngine.Networking.DownloadHandler" preserve="all" />
      <type fullname="UnityEngine.Networking.DownloadHandlerBuffer" preserve="all" />
  </assembly>

  <assembly fullname="mscorlib">
      <namespace fullname="System.Security.Cryptography" preserve="all"/>
  </assembly>

  <assembly fullname="System">
      <namespace fullname="System.Security.Cryptography" preserve="all"/>
  </assembly>

  <assembly fullname="AWSSDK.Core" preserve="all">
      <namespace fullname="Amazon.Util.Internal.PlatformServices" preserve="all"/>
  </assembly>
  <assembly fullname="AWSSDK.CognitoIdentity" preserve="all"/>
  <assembly fullname="AWSSDK.SecurityToken" preserve="all"/>
  add more services that you need here...
</linker>

最後の add more services that you need here... に使用するサービスを追記する
今回だとS3なので、 <assembly fullname="AWSSDK.S3" preserve="all"/> を追記する

kosuke1113
初心者です
techcross
京都を拠点にソーシャルゲームの開発・運用、その他システム開発を行っています。
https://www.techcross.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした