StandAPP/app/src/main/java/com/stand/standapp/MyApplication.kt

82 lines
2.4 KiB
Kotlin

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 ===")
}
}