Page 1 of 1

Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was gen

Posted: 2020/09/25 14:51
by ooee
いつもArborにはお世話になっています。
件名の不具合が発生したので、ご報告いたします。
お手数をおかけしますが、確認していただけると助かります。

OS: Windows10
Unityバージョン: 2020.1.6f1
Arborバージョン: 3.7.3
再現方法:
1. Events/InvokeMethodでVector3とToStringを選び、TargetにParameterContainerから取得したVector3パラメータを指定する。
2. Android IL2CPPでビルドし、Android実機で実行する。
3. Android Device MonitorでLogCatを確認すると、
ExecutionEngineException: Attempting to call method 'Arbor.DynamicReflection.DynamicUtility::ReboxValue<UnityEngine.Vector3>' for which no ahead of time (AOT) code was generated.
が表示される。

ビルドプラットフォーム: Android IL2CPP

Re: Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was

Posted: 2020/09/25 23:42
by caitsithware
ご報告ありがとうございます。

事前コンパイルによるスクリプトの制限に引っかかってしまっていたようです。
https://docs.unity3d.com/ja/current/Man ... tions.html

回避策などが上記ページにも記載されておりますが今回のケースでもその方法で暫定対処できるのかなど、詳細についてはこれから検証いたします。
申し訳ございませんが、しばらくお待ちください。

Re: Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was

Posted: 2020/09/26 00:22
by caitsithware
https://docs.unity3d.com/ja/current/Man ... tions.html
こちらに記載されいてるUsedOnlyForAOTCodeGeneration()の方法で特定の型の呼び出しについては回避できることを確認いたしました。

早急な暫定対処が必要な場合は以下の方法をお試しください。
  • Assets/Plugins/Arbor/Internal/Scripts/DynamicReflection/DynamicUtility.csを開く。
  • 253行目あたり(DynamicUtilityクラスの末端)に以下のようなメソッドを追加。

    Code: Select all

    [Preserve]
    public static void UsedOnlyForAOTCodeGeneration()
    {
    	CastValue<Vector3>(new Vector3()); // 値型以外(クラスなど)の場合はCastClass<ClassType>(new ClassType());
    	GetDefault<Vector3>();
    	ReboxValue<Vector3>(new Vector3()); // 値型以外(クラスなど)の場合は不要。
    }
    
特定の型を指定しなくても問題がない方法については引き続き検証いたしますので、もうしばらくお待ちください。

Re: Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was

Posted: 2020/09/26 11:44
by caitsithware
DynamicUtilityのパッチを用意いたしました。
このパッチを適用していただければ、個別に型を指定することなく動作するかと思います。

また、他の箇所でもAOT関連の例外が発生しているのを確認いたしました。

詳しい内容やパッチについては下記ページを参照してください。
https://arbor.caitsithware.com/manual/issues/

ご不便おかけして申し訳ございませんが、修正までもうしばらくお待ちください。

Re: Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was

Posted: 2020/09/26 14:11
by ooee
例外が発生していた手持ちのプロジェクトでパッチを当ててLogCatを確認したところ、
例外が発生しないのを確認しました。

対応していただき、ありがとうございました。

Re: Android IL2CPPビルドにおいて、Events/InvokeMethodでパラメータに構造体があると実行時にExecutionEngineException: no ahead of time (AOT) code was

Posted: 2020/09/29 11:32
by caitsithware
Arbor 3.7.4にて修正いたしました。
アセットストアから再DLし、リリースノートやreadme記載の更新手順に従って再インポートしてください。
Arbor 3.7.4 リリース | Arbor 3