FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    タグ:クラッシュレポート

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ネイティブ クラッシュ(/system/lib/libhoudini.so.4.0.5.44806)というクラッシュが報告されていました。これまでに4回発生していたようです。発生頻度は高くないようですが、特定の端末達(ASUS MeMO Pad)で発生していたので気になりました。
    の4種類で発生しました。いずれも/system/lib/libhoudini.soでクラッシュしていました。これだけ見てもよくわからないので、これらの端末の共通点がないかを調べてみました。 
    端末のホームページにあるスペックを見ると、CPUは次の通りでした。
    •  インテル® Atom™ Z3745 クアッドコア
    • Intel® Atom™ Z2520 Dual-Core, 1.2 GHz
    • インテル® Atom™ Z3580 クアッドコア, 2.3 GHz
    • インテル® Atom™ Z3745 クアッドコア
    インテルのAtomが並んでいます。アプリに「CPUの相性があるのかな?」と思いつつ、原因はこれ以外には思いつかないというものがありました。
    ずいぶん前に「Unityでビルドしたapkのサイズ」 という記事を書いたとき、アプリの容量がx86系端末のためのライブラリが含まれて大きくなるということを知りました。このx86系の端末とは、インテルのCPUを使ったAndroidのことです。x86用のライブラリを含むとアプリサイズが大きくなるので、これを除外することができます。
    予想ですがx86用のライブラリがないとクラッシュするx86系の端末があるのではないかと思います。

    Android4.0以上向けにAPKを出せば100MBのAPKでも良いので、次回からはDevice FilterをFATの設定で出してみようと思います。
    とりあえず現時点ではMemo Padをダウンロードの対象外とすることで対処しました。(どれがインテルのCPUを使っているか調べるのが面倒だったので、MeMO Padという名前のものをすべて選択しました。)
    memopad


    『トランプ・スピード』以外のアプリでは発生報告がありません。おそらくは5000以上DLされていて、クラッシュが発生する端末で遊んでいる人がいるということだと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Google Play Developer ConsoleにはクラッシュとANRという項目があります。
    これはアプリのクラッシュ(強制終了)とANR(アプリが応答しなくなる) がどれくらい起こっているかのレポートを見るものです。

    少し前にこのようなレポートが上がっていました。
    タイトルにjava.lang.Error: FATAL EXCEPTION [main]と書かれていて、何が起こっているかわかりませんがまずそうな感じなのはわかりました。
    原因は、
    Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@2bbfaf22: Unmarshalling unknown type code 7274595 at offset 12だと書いてありました。ParcelでUnmarshalling unknown type codeが起こったということです。

    admob-interstitial-error
    Parcelクラスはデータを保存できるオブジェクトを作れるもののようです。オブジェクトも保持できるとのことなので、内部的にはバイト列をもつクラスなのでしょう。(C#でいうとシリアライズ、デシリアライズに対応するのだと思います。)
    このクラスのreadValueが失敗するわけですが、クラスの読み込みがうまくいっていないということです。そこまではわかったのですが、どんなオブジェクトが来ていて、どこで読み込みに失敗するかはまるでわかりません。下の方にある呼び出し元を見るとInterstitialというところから呼ばれているのがわかります。これはインタースティシャル広告の開始のことでコードはライブラリの中です。

    もはやコードを見ることはできないので、検索して調べることにしました。
    同じような問題に遭っている人がいるようでGoogleに質問していました。 議論を見てみると、最後にGoogleがバグを修正したとあります。
    UnityにAdMobで広告を出している場合、Unity向けのパッケージを更新すればいいのか、google_play_servicesライブラリを更新すればいいのか、はたまたどちらも更新が必要なのかはわかりませんでした。
     
    どうもすべての端末で起こるわけではないようでしかも11月頃から発生したことのようです。 それまで発生しなかったことを考えると広告配信のデータの形式が変わり、機種(Android version)によってはそれに対応していないということかもしれません。
    インタースティシャルを使わなければ起きないでしょうが、使えないのは困ります。

    google_play_servicesライブラリを更新するくらいしか手がなさそうです。

    このページのトップヘ