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 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}; 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() // 已被收录的游戏包名列表