SpriteStudio / SS6PlayerForUnity

OPTPiX SpriteStudio 6 Player for Unity http://www.webtech.co.jp/spritestudio/
MIT License
21 stars 8 forks source link

v1.0.26でmultidexを使用した際にAndroidがクラッシュしました #39

Open kawamura-miho opened 6 years ago

kawamura-miho commented 6 years ago

お世話になっております。 SpriteStudioを5から6に移行をする際にv1.0.26のプラグインを追加しましたところ、Android起動時にクラッシュするようになりました。 こちらですが、依存ファイル数を減らし(googl-play-servicesを含めない状態にし)、multidexをoffにしました所クラッシュが解消されたのですが、SpriteStudio6を使用する際にはmultidexは使用しない方が宜しいでしょうか?

お忙しい所お手数をお掛けしてしまい大変申し訳ありませんが、ご確認の程何卒宜しくお願い致します。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。 質問&レポート、有難うございます。

Multidexについては、現状考慮されていません。 ※これは、SS5Player for UnityもSS6Player for Unityも同様です。

この場合の「考慮されていない」は、現状では、SS5PUもSS6PUもMultidex使用状態での詳細な検証を行っていない(かつ初見の症状である)という意味です。 ですので、「使用しない方が良い」かどうかをお答えできる状況にないという状況です。

現状仮定の域を出ませんが……SS5PUとは(ヒープの使い方含めて)処理のロジックや対応するUnityのバージョン等が変わっているため、何かしらそこに起因する原因かもしれません。 ※もしくは、SS6PUではMultidexが抽出しているクラスの依存関係などで、不都合な構成などがあるのかもしれません。

当方でも確認してみたいと思いますが、念のため、下記の情報を頂けますと非常に助かります。

お忙しい中ご面倒をおかけしてしまい大変申し訳ございませんが、ご検討の程お願い申し上げます。 また、検証そのものに少々お時間を頂けますようお願い申し上げます。

何卒今後とも宜しくお願い致します。


追伸: あくまで「個人的」な見解ではありますが…… 「Google Play Services」は、全体で相当数の関数を持っていますので、非常に悩ましい問題かと思われます。 もし、Google Play Servicesの全ての機能を使用するということでなければ、使用するモジュールを選別して限定することで、1・2万の関数を削減できることもあるので、Multidexを使用する前に、その選別をしてしまうのが良いのではないかと思います。 ※すでに選別された後でしたら、申し訳ございません。老婆心からですのでご容赦いただきたくお願い申し上げます。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。

追記となりますが…… 上記の件について、(情報のご提供いただけます場合でも)もしプロジェクト的に守秘などの問題で、本Issue上で問題があります場合、弊社サポート(github-spritestudio@webtech.co.jp)に宛てていただく形でも構いません。 ご提供いただいた情報などの守秘は保証いたしますので、その点につきましてはご安心いただけますようお願い申し上げます。 もしNDAなど必要でしたら、上記サポートにその旨いただけますと助かります。

kawamura-miho commented 6 years ago

お世話になっております。

ご返答頂き、誠にありがとうございます!

上記に関してですが、担当の者に確認をしましたところ、守秘的に問題ないとのことでしたのでIssue上でご質問にお答えしたいと思います。

ご配慮頂き、誠にありがとうございます。 以下、回答になります。

クラッシュするAndroidのバージョン(Nougat, Lollipopなどのバージョンコードでも構いません。また特定のAndroidバージョンでクラッシュするのか、それともバージョンを問わないのか?など)

こちらですが、現状以下のバージョンでのクラッシュを確認しております(特に特定のバージョンでクラッシュするというわけではなさそうです)。 7.0, 5.0.2, 6.0.1

クラッシュ時に何のException(例外)などが出ているか

クラッシュ時のログは、以下のようになっております。

02-21 19:11:00.910  4949  4949 W Unity   : Failed to get permission info for jp.co.com.app.permission.C2D_MESSAGE, manifest likely missing custom permission declaration
02-21 19:11:00.910  4949  4949 W Unity   : Permission jp.co.com.app.permission.C2D_MESSAGE ignored
02-21 19:11:00.911  4949  4949 W Unity   : Failed to get permission info for com.amazon.device.messaging.permission.RECEIVE, manifest likely missing custom permission declaration
02-21 19:11:00.911  4949  4949 W Unity   : Permission com.amazon.device.messaging.permission.RECEIVE ignored
02-21 19:11:00.982  4949  4949 I Unity   : onResume
02-21 19:11:01.142  4949  4949 I Unity   : windowFocusChanged: true
02-21 19:11:01.372  4949  4970 F libc    : Fatal signal 11 (SIGSEGV), code 2, fault addr 0xe3770ff8 in tid 4970 (UnityMain)
02-21 19:11:01.440  4987  4987 F DEBUG   : pid: 4949, tid: 4970, name: UnityMain  >>> jp.co.com.Personal <<<
02-21 19:11:01.480  4987  4987 F DEBUG   :     #05 pc 001d96f8  /data/app/jp.co.com.Personal-1/lib/arm/libunity.so (_ZN21UnityDefaultAllocatorI17LowLevelAllocatorE8AllocateEji+24)
02-21 19:11:01.480  4987  4987 F DEBUG   :     #15 pc 00a0889c  /data/app/jp.co.com.Personal-1/lib/arm/libunity.so (_Z20UnityInitApplicationv+224)
02-21 19:11:01.480  4987  4987 F DEBUG   :     #16 pc 00a09d64  /data/app/jp.co.com.Personal-1/lib/arm/libunity.so (_Z15UnityPlayerLoopv+264)


Multidexをどのような方法でEnableにしているのか? 特にbuild.gradleの設定でdexOptionsやdependenciesなどの記述について、ありますと助かります。

以下、build.gradleの設定を抜粋しております。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    provided files('/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Classes/classes.jar')

    compile 'com.facebook.android:facebook-android-sdk:4.22.0'
    compile('com.twitter.sdk.android:twitter:2.0.0@aar') {
        transitive = true;
    }

    compile project(':prime31')

    compile 'com.google.android.gms:play-services:9.4.0'
}

android {
    compileSdkVersion 24
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 24

        // multi-dexing
        multiDexEnabled true
    }

    (中略)

dexOptions {
    preDexLibraries false
    javaMaxHeapSize "2048M"
 }


もし、Google Play Servicesの全ての機能を使用するということでなければ、使用するモジュールを選別して限定することで、1・2万の関数を削減できることもあるので、Multidexを使用する前に、その選別をしてしまうのが良いのではないかと思います。

こちらに関してですが、弊社でも同様の判断をし、現在は必要な機能のみを含めて問題なく動作するかどうかの検証を行っております。 途中経過ですが、以下のような現象が発生しております。

・"compile 'com.google.android.gms:play-services:9.4.0'"の部分を  "compile 'com.google.android.gms:play-services-ads:9.4.0'"に変更し、  multidex関連の設定部分を全てコメントアウトしてもクラッシュが発生する   ・"compile 'com.google.android.gms:play-services:9.4.0'"の部分を  "compile 'com.google.android.gms:play-services-ads:11.0.4'"に変更し、  multidex関連の設定部分を全てコメントアウトするとクラッシュが発生しない   ・"compile 'com.google.android.gms:play-services:9.4.0'"の部分を  "compile 'com.google.android.gms:play-services-ads:11.0.4'"に変更し、  multidexをオンにしてもクラッシュが発生しない

当初はmultidexが原因かと思われましたが、multidexをオフにしてもクラッシュするケースがありましたので、何か別の原因があると思われます(検証不足でご質問をしてしまい、大変申し訳ありませんでした・・・)。 指定している「Google Play Services」のバージョンですが、問題なく起動する"11.0.4"は弊社で利用している独自ライブラリがサポートしていないバージョンとなっておりますので、"9.4.0"で問題なく動作する方法を探っている最中となっております。

上記の他に、何か知りたい情報がありましたらご質問いただければと思います。

お手数をお掛けしてしまい大変申し訳ありませんが、ご確認の程何卒宜しくお願い致します。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。

詳細な情報、ありがとうございます。 心から感謝いたします。

multidexをオフにしてもクラッシュするケースがありましたので、何か別の原因があると思われます

この点が非常に気がかりですね……。 また、GPS 9.4.0で動作する状況を……との点も了解致しました。

当方でも検証させて頂きます。 何かわかり次第、本Issueにて返信させていただきます。

お忙しい中、お手間を頂きありがとうございますとともに、検証に少々時間がかかるかもしれません旨大変申し訳ございません。 できるかぎり急ぎますので、何卒ご容赦の程お願い申し上げます。

何卒今後とも宜しくお願いいたします。

kawamura-miho commented 6 years ago

お世話になっております。

早急にご調査頂き、誠にありがとうございます!

弊社の方でも引き続き設定周りを見直していきたいと思いますので、何卒宜しくお願い致します。

kawamura-miho commented 6 years ago

お世話になっております。

Android起動時にクラッシュする件ですが、以下の方法でクラッシュしなくなったことをお知らせ致します。

・build.gradle内のfacebook関連の記述をコメントアウトする ・AndroidManifest.xml内のfacebook関連の記述をコメントアウトする

SpriteStudio更新前は上記のfacebook設定が記載されていても問題なく動いていた為、クラッシュの根本的な原因は分かっておりませんが、facebookの正式対応を行うまでは現状の設定で開発を進めようと思っております。

お忙しいところお手数をお掛けしてしまい、大変申し訳ありませんでした。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。

お忙しい中お知らせいただき、ありがとうございます。 当方ではまだ類似した現象が再現できていなかったこと大変申し訳ございませんとともに、情報をいただけた旨感謝しております。

SpriteStudio更新前は上記のfacebook設定が記載されていても問題なく動いていた為

こちらでも、現象の再現と(SS6PUに問題が認められた場合の)解消ができておりませんので、いただいた情報を参考にさせていただき、現象が特定できました場合には、本Issueへの返信にてお知らせさせて頂きます。

その上で、

facebookの正式対応を行うまでは現状の設定で開発を進めようと思っております。

とのことですが、もし、facebookへの正式対応された際に、また状況が発生しましたら、お手数ですが本Issue(もしくは新規にIssueを立てていただいても構いません)で頂けますと非常に助かります。

現状において決定的解消の手段を提示できておりません旨、大変申し訳ございませんが、何卒今後とも宜しくお願い致します。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。

蛇足かつ本件とは直接関係ない内容となりますが……。 現状、Ver.1.0.26をご使用とのことですが、(Unity-Nativeモードではなく)SS6Playerモードをご使用の場合……もし可能でしたら、(インポートするデータ群が多くなる前に)Ver.1.0.27以降への更新を推奨いたします。 ※このコメントの時点で、最新版はVer.1.0.27になります。

Ver.1.0.26は、SpriteStudioマスクパーツの「マスク対象」の設定によっては、正常にマスク対象が反映されない障害を持っております。 ※そちらの詳細につきましては、 #38 を参照していただきますようお願い致します。

プロジェクトで扱うSS6データ数が大きくなってきますと、(バッチインポートなどを使用していない場合)データの再インポートに相当手数を取られる可能性があります。

非常に僭越で失礼とは思いますが、何卒ご容赦の程お願い申し上げます。 今後とも宜しくお願い致します。

kawamura-miho commented 6 years ago

お世話になっております。 ご返答頂き誠にありがとうございます!

こちらでも、現象の再現と(SS6PUに問題が認められた場合の)解消ができておりませんので、いただいた情報を参考にさせていただき、現象が特定できました場合には、本Issueへの返信にてお知らせさせて頂きます。

ありがとうございます!弊社でも何か分かりましたら、随時こちらのIssueに情報を記載致しますので、何卒宜しくお願い致します。

facebookへの正式対応された際に、また状況が発生しましたら、お手数ですが本Issue(もしくは新規にIssueを立てていただいても構いません)で頂けますと非常に助かります。

上記の件、承知致しました。facebookの正式対応時に問題が発生しましたら、改めてご連絡を差し上げたいと思います。

現状、Ver.1.0.26をご使用とのことですが、(Unity-Nativeモードではなく)SS6Playerモードをご使用の場合……もし可能でしたら、(インポートするデータ群が多くなる前に)Ver.1.0.27以降への更新を推奨いたします。

上記の件も承知致しました。担当の者に相談させて頂きたいと思います。ご丁寧に説明頂き、誠にありがとうございます。

今後とも、何卒宜しくお願い致します。

kawamura-miho commented 6 years ago

ご無沙汰しております。

Android起動時にクラッシュする件ですが、原因はリソース量の増加だったようで、アセットバンドル化をしリソースを極力バイナリに含めないような対応をしました所、クラッシュしなくなりました。 また、先日facebookの正式対応が完了しましたが、現状も特に問題なく動いております。

お手数をお掛けしてしまい大変申し訳ありませんでした。 また、お時間を取って原因を調査していただき、誠にありがとうございました。

MasamiYitsuse commented 6 years ago

kawamura-miho様

お世話になっております。

解決されたようで、安堵しております&お疲れ様です。

これといったお力になれず大変申し訳ございませんでした。

何卒今後ともよろしくお願いいたします。