2

Android Studio 用の Unity プロジェクト (Google Android プロジェクト) をビルドしました。これを Android Studio で開きました。Firebase-crashが含まれています。例外を確認するテストを行います。ログ内:

Error sending crash report
bkz: Server did not receive report: Origin Error message: Invalid crash stacktrace or minidump.

どうすれば修正できますか?

4

1 に答える 1

2

最終的に、この問題の最初の原因を見つけて解決しました。

logcat を見ると、Firebase の初期化が Unity の前に行われていることがわかります。Unity は Firebase のインスタンスをUncaughtExceptionHandler独自のものに置き換えます。ThrowableUnity は、Unity のバージョンに関する情報を追加して変更します。そして、どういうわけかスタックトレースを壊します。これThrowableが以前に登録された例外ハンドラー (Firebase) に渡された後。そして、あなたはメッセージを見ることができinvalid stacktraceます。

回避策は次のとおりです。

最初のシーンに、次のコードでスクリプトを追加します。

void Awake() {
    #if UNITY_ANDROID && !UNITY_EDITOR
    using (AndroidJavaClass helper = new AndroidJavaClass ("com.yourcompany.UncaughtExceptionHelper")) {
        helper.CallStatic ("restore");
    }
    #endif
}

次に、このクラスを Android Studio プロジェクトに追加します。

UncaughtExceptionHelper.java

package com.yourcompany;

import android.util.Log;

import java.lang.reflect.Field;

public class UncaughtExceptionHelper {
    private static final String LOG_TAG = UncaughtExceptionHelper.class.getSimpleName();

    public static void restore() {
        try {
            Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();

            if (defaultHandler.getClass().getName().startsWith("com.unity3d.")) {
                for (Field f : defaultHandler.getClass().getDeclaredFields()) {
                    f.setAccessible(true);

                    Object possibleHandler = f.get(defaultHandler);
                    if (possibleHandler instanceof Thread.UncaughtExceptionHandler) {
                        Thread.setDefaultUncaughtExceptionHandler((Thread.UncaughtExceptionHandler) possibleHandler);

                        Log.i(LOG_TAG, "restore " + possibleHandler + " instead of " + defaultHandler);
                        return;
                    }
                }
            }
        } catch (Throwable ex) {
            Log.wtf(LOG_TAG, ex);
        }
    }
}

一緒にビルドして、logcat出力を見つけます。

I FirebaseCrash: FirebaseCrash reporting initialized com.google.android.gms.internal.zzbks@6f785ce
I FirebaseInitProvider: FirebaseApp initialization successful
....
D Unity   :  GL_AMD_compressed_ATC_texture GL_AMD_performance_monitor GL_AMD_program_binary_Z400 GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_robustness GL_EXT_texture_format_BGRA8888 GL_EXT_texture_type_2_10_10_10_REV GL_NV_fence GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth_texture GL_OES_depth24 GL_OES_EGL_image GL_OES_EGL_sync GL_OES_EGL_image_external GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_fragment_precision_high GL_OES_get_program_binary GL_OES_packed_depth_stencil GL_OES_depth_texture_cube_map GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_vertex_type_10_10_10_2 GL_OES_vertex_array_object GL_QCOM_alpha_test GL_QCOM_binning_control GL_QCOM_driver_control GL_QCOM_perfmon_global_mode GL_QCOM_extended_get GL_QCOM_extended_get2 GL_QCOM_tiled_rendering GL_QCOM_writeonly_rendering GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT
D Unity   : _texture_sRGB_decode GL_EXT_texture_filter_anisotropic GL_EXT_multisampled_render_to_texture GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_EXT_disjoint_timer_query
....
I UncaughtExceptionHelper: restore com.google.android.gms.internal.zzbkt@8e448eb instead of com.unity3d.player.g@82cd648
于 2016-12-09T20:35:59.160 に答える