mirror of https://github.com/lizongying/my-tv.git
parent
188431a29f
commit
7057e4a8b4
@ -0,0 +1,84 @@ |
||||
@file:Suppress("DEPRECATION") |
||||
|
||||
package com.lizongying.mytv |
||||
|
||||
import android.content.Context |
||||
import android.content.pm.PackageInfo |
||||
import android.content.pm.PackageManager |
||||
import android.content.pm.Signature |
||||
import android.content.pm.SigningInfo |
||||
import android.os.Build |
||||
import android.util.Log |
||||
import java.security.MessageDigest |
||||
|
||||
private const val TAG = "Extensions" |
||||
|
||||
private val Context.packageInfo: PackageInfo |
||||
get() { |
||||
val flag = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { |
||||
PackageManager.GET_SIGNATURES |
||||
} else { |
||||
PackageManager.GET_SIGNING_CERTIFICATES |
||||
} |
||||
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { |
||||
packageManager.getPackageInfo(packageName, flag) |
||||
} else { |
||||
packageManager.getPackageInfo( |
||||
packageName, |
||||
PackageManager.PackageInfoFlags.of(PackageManager.GET_SIGNING_CERTIFICATES.toLong()) |
||||
) |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Return the version code of the app which is defined in build.gradle. |
||||
* eg:100 |
||||
*/ |
||||
val Context.appVersionCode: Long |
||||
get() { |
||||
val packageInfo = this.packageInfo |
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { |
||||
packageInfo.longVersionCode |
||||
} else { |
||||
packageInfo.versionCode.toLong() |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Return the version name of the app which is defined in build.gradle. |
||||
* eg:1.0.0 |
||||
*/ |
||||
val Context.appVersionName: String get() = packageInfo.versionName |
||||
|
||||
val Context.appSignature: String |
||||
get() { |
||||
val packageInfo = this.packageInfo |
||||
var sign: Signature? = null |
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { |
||||
val signatures: Array<out Signature>? = packageInfo.signatures |
||||
if (signatures != null) { |
||||
sign = signatures[0] |
||||
} |
||||
} else { |
||||
val signingInfo: SigningInfo? = packageInfo.signingInfo |
||||
if (signingInfo != null) { |
||||
sign = signingInfo.apkContentsSigners[0] |
||||
} |
||||
} |
||||
if (sign == null) { |
||||
return "" |
||||
} |
||||
return hashSignature(sign) |
||||
} |
||||
|
||||
private fun hashSignature(signature: Signature): String { |
||||
return try { |
||||
val md = MessageDigest.getInstance("MD5") |
||||
md.update(signature.toByteArray()) |
||||
val digest = md.digest() |
||||
digest.let { it -> it.joinToString("") { "%02x".format(it) } } |
||||
} catch (e: Exception) { |
||||
Log.e(TAG, "Error hashing signature", e) |
||||
"" |
||||
} |
||||
} |
||||
Loading…
Reference in new issue