TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

UnityでAndroidビルドすると「This could be caused by a class being stripped from the build even though it is needed. Try disabling 'Strip Engine Code' in Player Settings.」

現象

05-17 19:19:48.076  4675  4713 E Unity   : This could be caused by a class being stripped from the build even though it is needed. Try disabling 'Strip Engine Code' in Player Settings.

原因

Addressables(Asset Bundle)を使っていると、手動で含めないといけないクラスがあるため。

対処法

必要なクラスをビルド対象に含めてあげる必要がありますが、だいたい以下の4つがあります。

  • link.xmlに書く(デメリットあり)
  • Resourceにダミーとして配置する
  • Sceneにダミーとして配置する
  • Player Settingの「Strip Engine Code」をoffにする (手軽)

4つ目のStrip Engine Codeをoffにするのが一番お手軽ですが、デメリットが無いか以下で検証してみました。

アプリサイズ (Android)

「Strip Engine Code」 OFF

アプリサイズ(「Strip Engine Code」 OFF 正しく動く)
42.41MB
ユーザーデータ
5.21MB
キャッシュ
94.21KB
合計
47.62MB

「Strip Engine Code」 ON

アプリサイズ (「Strip Engine Code」ON (animationはまだ動かない))
28.05MB
ユーザーデータ
4.97MB
キャッシュ
94.21KB
合計
33.02MB

アプリサイズ (「Strip Engine Code」ON (animatorControllerはResoucesに含めることで正しく動かせる)
28.12MB
ユーザーデータ
4.97MB
キャッシュ
94.21KB
合計
33.09MB

検証結果

Strip Engine Codeを手っ取り早くoffにして済まそうと思いましたが、約10MB異なっているので、無視できない数値となっているので、エラーが起こるたびに頑張るしかなさそうです。

link.xmlに書く方法のデメリット

link.xmlにビルドに含めたいものを記述すればビルド時に含めてくれるようですが、記述しても含めてくれないものもあるようです(とても残念)
【Unity】Unity 5.3からAssetBundleはどう変わるのか…まとめ - テラシュールブログ

ここに書いてある通り、エディタクラスはlink.xmlに定義しても意味が無いようです。
Animations.AnimatorController - Unity スクリプトリファレンス
公式Docで調べてAnimatorControllerはclass in UnityEditor.Animationと書いてあるので無理なようです。

animationControllerはlink.xmlに書いても動かないのでResourcesフォルダにいれたり、シーンに含めることで対応する必要がありそうです。

感想

resourcesフォルダに簡易prefabを作って入れておくのが今のところ手っ取り早いかなという気がします。
link.xmlの方を使いたかったのですが、書いても意味ないクラスとかあるのは辛いです。
Strip Engine CodeをOffにするのも良いですが、容量が結構違うので、僕はOffにしない方向で行きたいと思っています。