Compare commits
17 Commits
feat/sync-
...
legacy-rel
| Author | SHA1 | Date | |
|---|---|---|---|
| 1040f5ff4d | |||
| 97be320529 | |||
| 59cde4e2bf | |||
| cc0c7c7fae | |||
| 9e9ce6a84f | |||
| 7d0b500ff9 | |||
| 425456b263 | |||
| f6abab9a2d | |||
| d194f969e4 | |||
| 95f66344fb | |||
| 570e2fa9bc | |||
| 9e07080043 | |||
| e10a329159 | |||
| b3bc7b43f7 | |||
| 811d42457c | |||
| ac0b819ea9 | |||
| d931fb5940 |
@ -72,7 +72,7 @@ android_build:
|
||||
only:
|
||||
- dev
|
||||
- release
|
||||
- feat/GHZSCY-6578
|
||||
- feat/GHZSCY-6644
|
||||
|
||||
# 代码检查
|
||||
sonarqube_analysis:
|
||||
@ -158,4 +158,4 @@ oss-upload&send-email:
|
||||
only:
|
||||
- dev
|
||||
- release
|
||||
- feat/GHZSCY-6578
|
||||
- feat/GHZSCY-6644
|
||||
@ -161,6 +161,7 @@ class DownloadFragment : BaseFragment_TabLayout() {
|
||||
val showOnFailed = downloadManagerAd?.displayRule?.onFailedAction == "show"
|
||||
if ((showThirdPartyAd && thirdPartyAd != null) || (!showThirdPartyAd && thirdPartyAd != null && ownerAd == null)) {
|
||||
initThirdPartyAd(thirdPartyAd) { isSuccess ->
|
||||
if (!isAdded) return@initThirdPartyAd
|
||||
mBinding.maskView.goneIf(!isSuccess)
|
||||
if (!isSuccess && ownerAd != null && showOnFailed) {
|
||||
mSlideInterval = ownerAd.adSource?.sliderInterval ?: -1
|
||||
@ -193,7 +194,7 @@ class DownloadFragment : BaseFragment_TabLayout() {
|
||||
}
|
||||
|
||||
private fun initOwnerAd(adConfig: AdConfig) {
|
||||
if (adConfig.id.isEmpty()) return
|
||||
if (!isAdded || adConfig.id.isEmpty()) return
|
||||
mAdGameViewModel = viewModelProvider(AdGameViewModel.Factory(adConfig))
|
||||
initAdGameBanner(adConfig)
|
||||
mBinding.closeAdIv.setOnClickListener {
|
||||
@ -227,6 +228,7 @@ class DownloadFragment : BaseFragment_TabLayout() {
|
||||
adConfig.displayRule.onFailedAction == "show" && adConfig.thirdPartyAd != null) {
|
||||
// 自有广告游戏为空时,显示第三方广告
|
||||
initThirdPartyAd(adConfig.thirdPartyAd) { isSuccess ->
|
||||
if (!isAdded) return@initThirdPartyAd
|
||||
mBinding.maskView.goneIf(!isSuccess)
|
||||
if (isSuccess) {
|
||||
SPUtils.setLong(Constants.SP_LAST_DOWNLOAD_MANAGER_AD_SHOW_TIME, System.currentTimeMillis())
|
||||
|
||||
@ -394,7 +394,7 @@ class SpecialDownloadDialogFragment : BaseDraggableDialogFragment() {
|
||||
SensorsBridge.trackDownloadComponentsContentClick(
|
||||
gameId = gameEntity.id,
|
||||
gameName = gameEntity.name ?: "unknown",
|
||||
gameSchemeType = gameEntity.gameBitChinese,
|
||||
gameSchemaType = gameEntity.gameBitChinese,
|
||||
downloadStatus = gameEntity.downloadStatusChinese,
|
||||
gameType = gameEntity.categoryChinese,
|
||||
downloadType = if (asVGame) "畅玩下载" else "本地下载",
|
||||
@ -405,7 +405,7 @@ class SpecialDownloadDialogFragment : BaseDraggableDialogFragment() {
|
||||
SensorsBridge.trackDownloadComponentsShow(
|
||||
gameId = gameEntity.id,
|
||||
gameName = gameEntity.name ?: "unknown",
|
||||
gameSchemeType = gameEntity.gameBitChinese,
|
||||
gameSchemaType = gameEntity.gameBitChinese,
|
||||
downloadStatus = gameEntity.downloadStatusChinese,
|
||||
gameType = gameEntity.categoryChinese,
|
||||
downloadType = if (asVGame) "畅玩下载" else "本地下载",
|
||||
|
||||
@ -13,7 +13,7 @@ object HeadUpDisplayLogHelper {
|
||||
source = source,
|
||||
downloadType = if (downloadEntity.asVGame()) "畅玩下载" else "本地下载",
|
||||
downloadStatus = downloadEntity.getMetaExtra(Constants.DOWNLOAD_STATUS_IN_CHINESE),
|
||||
gameSchemeType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameSchemaType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameType = downloadEntity.getMetaExtra(Constants.GAME_CATEGORY_IN_CHINESE),
|
||||
gameId = downloadEntity.gameId,
|
||||
gameName = downloadEntity.name
|
||||
@ -25,7 +25,7 @@ object HeadUpDisplayLogHelper {
|
||||
source = source,
|
||||
downloadType = if (downloadEntity.asVGame()) "畅玩下载" else "本地下载",
|
||||
downloadStatus = downloadEntity.getMetaExtra(Constants.DOWNLOAD_STATUS_IN_CHINESE),
|
||||
gameSchemeType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameSchemaType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameType = downloadEntity.getMetaExtra(Constants.GAME_CATEGORY_IN_CHINESE),
|
||||
gameId = downloadEntity.gameId,
|
||||
gameName = downloadEntity.name
|
||||
@ -36,7 +36,7 @@ object HeadUpDisplayLogHelper {
|
||||
SensorsBridge.trackAutomaticInstallationPromptBarShow(
|
||||
downloadType = if (downloadEntity.asVGame()) "畅玩下载" else "本地下载",
|
||||
downloadStatus = downloadEntity.getMetaExtra(Constants.DOWNLOAD_STATUS_IN_CHINESE),
|
||||
gameSchemeType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameSchemaType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameType = downloadEntity.getMetaExtra(Constants.GAME_CATEGORY_IN_CHINESE),
|
||||
gameId = downloadEntity.gameId,
|
||||
gameName = downloadEntity.name
|
||||
@ -47,7 +47,7 @@ object HeadUpDisplayLogHelper {
|
||||
SensorsBridge.trackAutomaticInstallationPromptBarClick(
|
||||
downloadType = if (downloadEntity.asVGame()) "畅玩下载" else "本地下载",
|
||||
downloadStatus = downloadEntity.getMetaExtra(Constants.DOWNLOAD_STATUS_IN_CHINESE),
|
||||
gameSchemeType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameSchemaType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameType = downloadEntity.getMetaExtra(Constants.GAME_CATEGORY_IN_CHINESE),
|
||||
gameId = downloadEntity.gameId,
|
||||
gameName = downloadEntity.name
|
||||
|
||||
@ -3,7 +3,6 @@ package com.gh.ndownload.suspendwindow
|
||||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.app.Application.ActivityLifecycleCallbacks
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.ViewCompat
|
||||
import com.gh.gamecenter.common.constant.Constants
|
||||
@ -128,7 +127,7 @@ class NDownloadDrawOverlayPermissionWindowController(val application: Applicatio
|
||||
SensorsBridge.trackDownloadSuspendedWindowGuideShow(
|
||||
gameId = downloadEntity.gameId,
|
||||
gameName = downloadEntity.name,
|
||||
gameSchemeType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameSchemaType = if (downloadEntity.getMetaExtra(Constants.KEY_BIT) == "32") "32位" else "64位",
|
||||
gameType = downloadEntity.categoryChinese,
|
||||
downloadStatus = downloadEntity.getMetaExtra(Constants.DOWNLOAD_STATUS_IN_CHINESE),
|
||||
downloadType = if (downloadEntity.asVGame()) "畅玩下载" else "本地下载"
|
||||
|
||||
@ -48,10 +48,17 @@ abstract class NDownloadSuspendWindow<T : View>(
|
||||
|
||||
fun attach() {
|
||||
if (!isAttached) {
|
||||
_isAttached = true
|
||||
windowManager.addView(root, layoutParams)
|
||||
context.registerComponentCallbacks(this)
|
||||
onAttach()
|
||||
try {
|
||||
_isAttached = true
|
||||
windowManager.addView(root, layoutParams)
|
||||
context.registerComponentCallbacks(this)
|
||||
onAttach()
|
||||
} catch (e: Throwable) {
|
||||
// 处理“Unable to add window android.view.ViewRootImpl$W@7bc9502 -- permission denied for window type 2038”的异常
|
||||
// 目前Sentry上仅Z10型号的手机报这个错误(Android 8.1.0),这里明明已经授予了SYSTEM_ALERT_WINDOW权限,但是就是会抛异常= =,只能暴力捕获处理了。。。
|
||||
// 相关异常的链接:https://sentry.shanqu.cc/organizations/lightgame/issues/407275/?project=22
|
||||
_isAttached = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -17,8 +17,8 @@ buildscript {
|
||||
password("u9gZYH4MQEwLLQZK")
|
||||
}
|
||||
}
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url "https://maven.google.com" }
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@ -41,7 +41,6 @@ allprojects {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url 'https://maven.aliyun.com/repository/public' }
|
||||
maven { url 'https://maven.aliyun.com/repository/central'}
|
||||
maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases/' }
|
||||
@ -55,6 +54,7 @@ allprojects {
|
||||
// 配置HMS Core SDK的Maven仓地址。
|
||||
maven { url 'https://developer.huawei.com/repo/' }
|
||||
maven { url 'https://developer.hihonor.com/repo' }
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
task clean(type: Delete) {
|
||||
|
||||
@ -7,8 +7,8 @@ ext {
|
||||
targetSdkVersion = 30
|
||||
|
||||
// application info (每个大版本之间的 versionCode 增加 20)
|
||||
versionCode = 1094
|
||||
versionName = "5.37.4"
|
||||
versionCode = 1095
|
||||
versionName = "5.37.5"
|
||||
applicationId = "com.gh.gamecenter"
|
||||
applicationIdGat = "com.gh.gamecenter.intl"
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
ext {
|
||||
vaCompileSdkVersion = 33
|
||||
vaCompileSdkVersion = 34
|
||||
vaMinSdkVersion = 21
|
||||
vaTargetSdkVersion = 28
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ object SensorsBridge {
|
||||
private const val KEY_LAST_PAGE_BUSINESS_ID = "last_page_business_id"
|
||||
private const val KEY_DOWNLOAD_STATUS = "download_status"
|
||||
private const val KEY_DOWNLOAD_TYPE = "download_type"
|
||||
private const val KEY_GAME_SCHEME_TYPE = "game_scheme_type"
|
||||
private const val KEY_GAME_SCHEMA_TYPE = "game_schema_type"
|
||||
private const val KEY_GAME_TYPE = "game_type"
|
||||
const val KEY_POSITION = "position"
|
||||
const val KEY_TAB_CONTENT = "tab_content"
|
||||
@ -4070,7 +4070,7 @@ object SensorsBridge {
|
||||
* 触发时机:当下载悬浮窗引导图展示时触发上报
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
* @param gameSchemeType 游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 游戏架构类型:64位/32位
|
||||
* @param downloadStatus 游戏下载状态
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param downloadType 实际下载方式:本地下载/畅玩下载
|
||||
@ -4079,7 +4079,7 @@ object SensorsBridge {
|
||||
fun trackDownloadSuspendedWindowGuideShow(
|
||||
gameId: String,
|
||||
gameName: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
downloadStatus: String,
|
||||
gameType: String,
|
||||
downloadType: String
|
||||
@ -4087,7 +4087,7 @@ object SensorsBridge {
|
||||
val json = json {
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
@ -4126,7 +4126,7 @@ object SensorsBridge {
|
||||
* @param source 来源:游戏下载\重启APP
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameSchemeType 所上报游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 所上报游戏架构类型:64位/32位
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
@ -4135,7 +4135,7 @@ object SensorsBridge {
|
||||
source: String,
|
||||
downloadType: String,
|
||||
downloadStatus: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
gameType: String,
|
||||
gameId: String,
|
||||
gameName: String
|
||||
@ -4144,7 +4144,7 @@ object SensorsBridge {
|
||||
KEY_SOURCE to source
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
@ -4159,7 +4159,7 @@ object SensorsBridge {
|
||||
* @param source 来源:游戏下载\重启APP
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameSchemeType 所上报游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 所上报游戏架构类型:64位/32位
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
@ -4168,7 +4168,7 @@ object SensorsBridge {
|
||||
source: String,
|
||||
downloadType: String,
|
||||
downloadStatus: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
gameType: String,
|
||||
gameId: String,
|
||||
gameName: String
|
||||
@ -4177,7 +4177,7 @@ object SensorsBridge {
|
||||
KEY_SOURCE to source
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
@ -4191,7 +4191,7 @@ object SensorsBridge {
|
||||
* 触发时机:触发自动下载提示条展示时上报
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameSchemeType 所上报游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 所上报游戏架构类型:64位/32位
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
@ -4199,7 +4199,7 @@ object SensorsBridge {
|
||||
fun trackAutomaticInstallationPromptBarShow(
|
||||
downloadType: String,
|
||||
downloadStatus: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
gameType: String,
|
||||
gameId: String,
|
||||
gameName: String
|
||||
@ -4207,7 +4207,7 @@ object SensorsBridge {
|
||||
val json = json {
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
@ -4221,7 +4221,7 @@ object SensorsBridge {
|
||||
* 触发时机:触发自动下载提示条点击时上报
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameSchemeType 所上报游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 所上报游戏架构类型:64位/32位
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
@ -4229,7 +4229,7 @@ object SensorsBridge {
|
||||
fun trackAutomaticInstallationPromptBarClick(
|
||||
downloadType: String,
|
||||
downloadStatus: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
gameType: String,
|
||||
gameId: String,
|
||||
gameName: String
|
||||
@ -4237,7 +4237,7 @@ object SensorsBridge {
|
||||
val json = json {
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
@ -4251,7 +4251,7 @@ object SensorsBridge {
|
||||
* 触发时机:下载组件展示时上报
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
* @param gameSchemeType 游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 游戏架构类型:64位/32位
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
@ -4259,7 +4259,7 @@ object SensorsBridge {
|
||||
fun trackDownloadComponentsShow(
|
||||
gameId: String,
|
||||
gameName: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
downloadStatus: String,
|
||||
gameType: String,
|
||||
downloadType: String,
|
||||
@ -4267,7 +4267,7 @@ object SensorsBridge {
|
||||
val json = json {
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
@ -4281,7 +4281,7 @@ object SensorsBridge {
|
||||
* 触发时机:下载组件点击时上报
|
||||
* @param gameId 游戏ID
|
||||
* @param gameName 游戏名称
|
||||
* @param gameSchemeType 游戏架构类型:64位/32位
|
||||
* @param gameSchemaType 游戏架构类型:64位/32位
|
||||
* @param downloadStatus 所上报游戏下载状态
|
||||
* @param gameType 游戏的类型:单机、网游等
|
||||
* @param downloadType 所上报游戏的实际下载方式:本地下载/畅玩下载
|
||||
@ -4291,7 +4291,7 @@ object SensorsBridge {
|
||||
fun trackDownloadComponentsContentClick(
|
||||
gameId: String,
|
||||
gameName: String,
|
||||
gameSchemeType: String,
|
||||
gameSchemaType: String,
|
||||
downloadStatus: String,
|
||||
gameType: String,
|
||||
downloadType: String,
|
||||
@ -4301,7 +4301,7 @@ object SensorsBridge {
|
||||
val json = json {
|
||||
KEY_GAME_ID to gameId
|
||||
KEY_GAME_NAME to gameName
|
||||
KEY_GAME_SCHEME_TYPE to gameSchemeType
|
||||
KEY_GAME_SCHEMA_TYPE to gameSchemaType
|
||||
KEY_DOWNLOAD_STATUS to downloadStatus
|
||||
KEY_GAME_TYPE to gameType
|
||||
KEY_DOWNLOAD_TYPE to downloadType
|
||||
|
||||
@ -6,6 +6,8 @@ import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class ProcessUtil {
|
||||
@ -20,13 +22,25 @@ public class ProcessUtil {
|
||||
return currentProcessName;
|
||||
}
|
||||
|
||||
//1)通过Application的API获取当前进程名
|
||||
//0)通过反射 ActivityThread 获取实例再获取当前进程名
|
||||
currentProcessName = getCurrentProcessNameByActivityThreadInstance();
|
||||
if (!TextUtils.isEmpty(currentProcessName)) {
|
||||
return currentProcessName;
|
||||
}
|
||||
|
||||
//1)通过 CMD 获取当前进程名
|
||||
currentProcessName = getCurrentProcessNameByCMD(android.os.Process.myPid());
|
||||
if (!TextUtils.isEmpty(currentProcessName)) {
|
||||
return currentProcessName;
|
||||
}
|
||||
|
||||
//2)通过 Application 的 API 获取当前进程名
|
||||
currentProcessName = getCurrentProcessNameByApplication();
|
||||
if (!TextUtils.isEmpty(currentProcessName)) {
|
||||
return currentProcessName;
|
||||
}
|
||||
|
||||
//2)通过反射ActivityThread获取当前进程名
|
||||
//3)通过反射 ActivityThread 获取当前进程名
|
||||
currentProcessName = getCurrentProcessNameByActivityThread();
|
||||
if (!TextUtils.isEmpty(currentProcessName)) {
|
||||
return currentProcessName;
|
||||
@ -38,7 +52,7 @@ public class ProcessUtil {
|
||||
/**
|
||||
* 通过Application新的API获取进程名,无需反射,无需IPC,效率最高。
|
||||
*/
|
||||
public static String getCurrentProcessNameByApplication() {
|
||||
private static String getCurrentProcessNameByApplication() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
return Application.getProcessName();
|
||||
}
|
||||
@ -48,7 +62,7 @@ public class ProcessUtil {
|
||||
/**
|
||||
* 通过反射ActivityThread获取进程名,避免了ipc
|
||||
*/
|
||||
public static String getCurrentProcessNameByActivityThread() {
|
||||
private static String getCurrentProcessNameByActivityThread() {
|
||||
String processName = null;
|
||||
try {
|
||||
final Method declaredMethod = Class.forName("android.app.ActivityThread", false, Application.class.getClassLoader())
|
||||
@ -64,4 +78,52 @@ public class ProcessUtil {
|
||||
return processName;
|
||||
}
|
||||
|
||||
private static String getCurrentProcessNameByActivityThreadInstance() {
|
||||
try {
|
||||
// Get ActivityThread class
|
||||
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread",false, Application.class.getClassLoader());
|
||||
|
||||
// Get the current ActivityThread instance
|
||||
Method currentActivityThreadMethod = activityThreadClass.getDeclaredMethod("currentActivityThread");
|
||||
currentActivityThreadMethod.setAccessible(true);
|
||||
Object activityThread = currentActivityThreadMethod.invoke(null);
|
||||
|
||||
// Get the getProcessName method
|
||||
Method getProcessNameMethod = activityThreadClass.getDeclaredMethod("getProcessName");
|
||||
getProcessNameMethod.setAccessible(true);
|
||||
|
||||
// Call the getProcessName method
|
||||
return (String) getProcessNameMethod.invoke(activityThread);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static String getCurrentProcessNameByCMD(int pid) {
|
||||
//get from /proc/PID/cmdline
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"));
|
||||
String processName = br.readLine();
|
||||
if (!TextUtils.isEmpty(processName)) {
|
||||
processName = processName.trim();
|
||||
if (!TextUtils.isEmpty(processName)) {
|
||||
return processName; //OK
|
||||
}
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
|
||||
} finally {
|
||||
try {
|
||||
if (br != null) {
|
||||
br.close();
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
//failed
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
2
vasdk
2
vasdk
Submodule vasdk updated: 7ec45b5a7d...ff118306e4
Reference in New Issue
Block a user