package com.stand.standapp import android.app.Application import android.util.Log import com.example.kingway.ptt.pttNative import com.stand.standapp.utils.LogManager import timber.log.Timber class MyApplication : Application() { // 单例实例 companion object { private lateinit var mApp: MyApplication @JvmStatic fun getAppInstance(): MyApplication { if (pNative == null) { initPTT() } return mApp } @JvmStatic fun initPTT() { if (pNative != null) return try { pNative = pttNative() pNative?.pttNativeSetPackageName(pageName) pNative?.pttNativeSetAtCallback() pNative?.pttNativeSetPlayCallback() pNative?.pttNativeSetPalyStartCallback() pNative?.pttNativeSetPlayStopCallback() pNative?.pttNativeSetRecordStartCallback() pNative?.pttNativeSetRecordStopCallback() pNative?.pttNativeSetTTSCallback() pNative?.pttNativePocTaskStart() Log.i("PTT_INIT", "PTT init success") } catch (e: Throwable) { Log.e("PTT_INIT", "Failed to init PTT: ${e.message}") } } var pageName: String = "" var pNative: pttNative? = null } /** * 获取 pttNative 实例(非空) */ fun getpNative(): pttNative? { return pNative } override fun onCreate() { super.onCreate() mApp = this pageName = packageName initPTT() // 第一步:初始化日志 LogManager.init(this) // 初始化 xCrash 以捕获 Native (SO) 崩溃 xcrash.XCrash.init(this, xcrash.XCrash.InitParameters().apply { setAppVersion(packageManager.getPackageInfo(packageName, 0).versionName) setLogDir(getExternalFilesDir("tombstones")?.absolutePath) setNativeDumpAllThreads(true) setJavaCallback { logPath, emergency -> LogManager.onCrashDetected(logPath, "Java-xCrash", null) } setNativeCallback { logPath, emergency -> LogManager.onCrashDetected(logPath, "Native-xCrash", null) android.util.Log.e("MyApplication", "NATIVE CRASH DETECTED at: $logPath") } }) Timber.tag("MyApplication").i("=== Application Starting ===") } }