From 21f4a398d55226fa911aee23537b7bb33ab41d75 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 09:45:22 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E8=B6=8A=E7=95=8C=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=20https:?= =?UTF-8?q?//sentry.shanqu.cc/organizations/lightgame/issues/408904?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/common/util/PackageUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index 976da13a9a..e7280a1eb1 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -301,7 +301,7 @@ public class PackageUtils { Signature[] signatures = packageInfo.signatures; // 使用幸运破解器破解安卓签名认证可能会出现不用签名也能装的情况,这里有可能是空的 - if (signatures[0] != null) { + if (signatures.length > 0 && signatures[0] != null) { return parseSignature(signatures[0].toByteArray()); } else { return new String[]{null, null}; From dd12b103be2ff5f72fa0dc35516b69e9f91bcb4d Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 09:59:32 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E6=8D=95=E6=8A=93=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=90=AF=E5=8A=A8=E6=97=A5=E5=BF=97=E7=9A=84?= =?UTF-8?q?=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=20https://sentry.shanqu.cc?= =?UTF-8?q?/organizations/lightgame/issues/406179?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/util/PackageLauncher.kt | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/gh/common/util/PackageLauncher.kt b/app/src/main/java/com/gh/common/util/PackageLauncher.kt index b89bc9a084..a621a6bed3 100644 --- a/app/src/main/java/com/gh/common/util/PackageLauncher.kt +++ b/app/src/main/java/com/gh/common/util/PackageLauncher.kt @@ -81,28 +81,11 @@ object PackageLauncher { gameEntity: GameEntity? = null, packageName: String? ) { - if (packageName.isNullOrEmpty()) { ToastUtils.toast("启动失败") return } - // 获取 GameInstall 实体,用于记录启动日志用 - val gameInstall = if (gameEntity != null) { - GameInstall.transformGameInstall(gameEntity, packageName) - } else { - PackagesManager.getInstalledList().find { it.packageName == packageName } - } - - if (gameInstall != null) { - NewFlatLogUtils.logGameLaunch( - gameId = gameInstall.id ?: "unknown", - gameName = gameInstall.name ?: "unknown", - gameCategory = gameInstall.category ?: "unknown", - downloadStatus = if (gameInstall.downloadStatus == "demo") "试玩" else "下载" - ) - } - try { val intent = context.applicationContext.packageManager.getLaunchIntentForPackage(packageName) if (intent != null) { @@ -113,6 +96,26 @@ object PackageLauncher { } catch (e: Exception) { ToastUtils.toast( "启动失败") } + + try { + // 获取 GameInstall 实体,用于记录启动日志用 + val gameInstall = if (gameEntity != null) { + GameInstall.transformGameInstall(gameEntity, packageName) + } else { + PackagesManager.getInstalledList().find { it.packageName == packageName } + } + + if (gameInstall != null) { + NewFlatLogUtils.logGameLaunch( + gameId = gameInstall.id ?: "unknown", + gameName = gameInstall.name ?: "unknown", + gameCategory = gameInstall.category ?: "unknown", + downloadStatus = if (gameInstall.downloadStatus == "demo") "试玩" else "下载" + ) + } + } catch (e: RuntimeException) { + // 都 DeadSystemException 了,还想啥日志上报 + } } } \ No newline at end of file From e770f8a3592c620d65871ffddd4fc40ec905eaa6 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 11:49:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=E6=9B=B4=E6=96=B0=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=97=B6=E7=9A=84=E9=97=AA=E9=80=80=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20https://sentry.shanqu.cc/organizations/lightgame/is?= =?UTF-8?q?sues/395511?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packagehelper/PackageFilterManager.kt | 14 ++++++++++---- .../gamecenter/packagehelper/PackageRepository.kt | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt index a0ac7bae51..b7cc7d6b83 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt @@ -35,17 +35,21 @@ class PackageFilterManager { if (appendOnly) { // 添加因为异常而没能正常更新的包名列表 - finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + synchronized(PackageRepository.mPendingPackageNameSet) { + finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + } } RetrofitManager.getInstance() .newApi - .postInstalledAppList(packageList.toRequestBody()) + .postInstalledAppList(finalPackageList.toRequestBody()) .subscribeOn(Schedulers.io()) .subscribe(object : BiResponse() { override fun onSuccess(data: PackageFilter) { mPackageKey = data.key - PackageRepository.mPendingPackageNameSet.clear() + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.removeAll(finalPackageList) + } val partialPackageList = arrayListOf() @@ -78,7 +82,9 @@ class PackageFilterManager { super.onFailure(exception) if (appendOnly) { - PackageRepository.mPendingPackageNameSet.addAll(packageList) + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.addAll(finalPackageList) + } } else { if (exception is retrofit2.HttpException && exception.code() == 403) { // 403 代表 key 过期,需要重新获取 diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 35d4673fb9..b7644b7f73 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -85,7 +85,7 @@ object PackageRepository { _recentVaPlayedChanged.postValue(Unit) } val packageFilterManager = PackageFilterManager() - var mPendingPackageNameSet = hashSetOf() // 因遇到异常而等待下次操作更新的包名列表 + var mPendingPackageNameSet = Collections.synchronizedSet(hashSetOf()) // 因遇到异常而等待下次操作更新的包名列表 var mValidPackageNameSet = hashSetOf() // 已被收录的游戏包名列表