GKMSPatch/manager/src/main/java/org/lsposed/npatch/LSPApplication.kt

73 lines
2.1 KiB
Kotlin

package org.lsposed.npatch
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.os.Process
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.lsposed.hiddenapibypass.HiddenApiBypass
import org.lsposed.npatch.manager.AppBroadcastReceiver
import nkbe.util.NPackageManager
import nkbe.util.ShizukuApi
import java.io.File
lateinit var lspApp: LSPApplication
class LSPApplication : Application() {
lateinit var prefs: SharedPreferences
lateinit var tmpApkDir: File
var targetApkFiles: ArrayList<File>? = null
val globalScope = CoroutineScope(Dispatchers.Default)
override fun onCreate() {
super.onCreate()
verifySignature()
try {
} catch (e: UnsatisfiedLinkError) {
e.printStackTrace()
} catch (e: Exception) {
e.printStackTrace()
}
HiddenApiBypass.addHiddenApiExemptions("")
lspApp = this
filesDir.mkdir()
tmpApkDir = cacheDir.resolve("apk").also { it.mkdir() }
prefs = lspApp.getSharedPreferences("settings", Context.MODE_PRIVATE)
ShizukuApi.init()
AppBroadcastReceiver.register(this)
globalScope.launch { NPackageManager.fetchAppList() }
}
private fun verifySignature() {
try {
val flags = PackageManager.GET_SIGNING_CERTIFICATES
val packageInfo = packageManager.getPackageInfo(packageName, flags)
val signingInfo = packageInfo.signingInfo
val signatures = signingInfo?.apkContentsSigners
if (signatures != null && signatures.isNotEmpty()) {
val currentHash = signatures[0].hashCode()
val targetHash = 0x0293FA43
if (currentHash != targetHash) {
killApp()
}
} else {
killApp()
}
} catch (e: Exception) {
killApp()
}
}
private fun killApp() {
Process.killProcess(Process.myPid())
}
}