From b9cb80db56fc60f4d0d1a78739c7cd2c8d3539f7 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 12 Jul 2023 16:46:22 +0200 Subject: [PATCH 1/2] delete existing when copying APKs into local repo, #2629 --- .../src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt index 5ee9e14fc..869f12b67 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt @@ -82,6 +82,7 @@ public abstract class IndexCreator( val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) val apkName = "${packageName}_$versionCode.apk" val apkFile = File(repoDir, apkName) + if (apkFile.exists()) apkFile.delete() symlink(packageInfo.applicationInfo.publicSourceDir, apkFile.absolutePath) if (!apkFile.exists()) { File(packageInfo.applicationInfo.publicSourceDir).copyTo(apkFile) From 2537c9d2be0112d4969fac18b1b2655e4f33f39b Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 12 Jul 2023 17:08:16 +0200 Subject: [PATCH 2/2] skip when NameNotFoundException on adding apps to local repo I can't really figure out this specific issue, but seems like it should skip apps after NameNotFoundException regardless of why. This is used elsewhere, like `DbUpdateChecker.getSuggestedVersion()`. Here's the error that I saw on CalyxOS: ``` android.content.pm.PackageManager$NameNotFoundException: org.calyxos.customization at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:253) at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:213) at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:207) at org.fdroid.index.v1.IndexV1Creator.addApp(IndexV1Creator.kt:67) at org.fdroid.index.v1.IndexV1Creator.createIndex(IndexV1Creator.kt:49) at org.fdroid.index.v1.IndexV1Creator.createRepo(IndexV1Creator.kt:37) at org.fdroid.fdroid.nearby.LocalRepoManager.generateIndex(LocalRepoManager.java:259) at org.fdroid.fdroid.nearby.LocalRepoService.runProcess(LocalRepoService.java:107) at org.fdroid.fdroid.nearby.LocalRepoService$GenerateLocalRepoThread.run(LocalRepoService.java:96) ``` --- .../kotlin/org/fdroid/index/v1/IndexV1Creator.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt index b300d64a6..3837f9dd0 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt @@ -5,6 +5,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.GET_PERMISSIONS import android.content.pm.PackageManager.GET_SIGNATURES import android.os.Build.VERSION.SDK_INT +import android.util.Log import androidx.core.content.pm.PackageInfoCompat import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.encodeToStream @@ -63,10 +64,14 @@ public class IndexV1Creator( @Suppress("DEPRECATION") val flags = GET_SIGNATURES or GET_PERMISSIONS - @Suppress("PackageManagerGetSignatures") - val packageInfo = packageManager.getPackageInfo(packageName, flags) - apps.add(getApp(packageInfo)) - packages[packageName] = listOf(getPackage(packageInfo)) + try { + @Suppress("PackageManagerGetSignatures") + val packageInfo = packageManager.getPackageInfo(packageName, flags) + apps.add(getApp(packageInfo)) + packages[packageName] = listOf(getPackage(packageInfo)) + } catch (e: PackageManager.NameNotFoundException) { + Log.i("IndexV1Creator", "app disappeared during addApp: " + e) + } ?: return // this app disappeared, nothing left to do } private fun getApp(packageInfo: PackageInfo): AppV1 {