From 78b4a7b32b20225a777180fd5db2896f77dad7e7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 3 Oct 2024 13:03:02 -0300 Subject: [PATCH 1/4] Install newer build tools and accept licenses --- .gitlab-ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f07082cf4..1c0b7b5f6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -219,7 +219,11 @@ libs database schema: - apt-get -qy --no-install-recommends install openjdk-17-jdk-headless git sdkmanager - export ANDROID_HOME=/opt/android-sdk - export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdk\s*\([0-9][0-9]*\).*,\1,p' app/build.gradle` - - sdkmanager "platforms;android-$ANDROID_COMPILE_SDK" "build-tools;34.0.0" + - mkdir -p "$ANDROID_HOME/licenses" + - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" + - echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "$ANDROID_HOME/licenses/android-sdk-license" + - echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" >> "$ANDROID_HOME/licenses/android-sdk-license" + - sdkmanager "platforms;android-$ANDROID_COMPILE_SDK" "build-tools;35.0.0" - ./gradlew :libs:database:kaptDebugKotlin - git --no-pager diff --exit-code From 957bea4655620403be78ecc13eeb6c27ca493cfd Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 7 Oct 2024 13:06:03 -0300 Subject: [PATCH 2/4] let all gradle modules use compileSdk 35 --- libs/database/build.gradle | 2 +- libs/download/build.gradle | 2 +- libs/index/build.gradle | 2 +- libs/sharedTest/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/database/build.gradle b/libs/database/build.gradle index 719a5f99a..00389e2b9 100644 --- a/libs/database/build.gradle +++ b/libs/database/build.gradle @@ -9,7 +9,7 @@ plugins { android { namespace "org.fdroid.database" - compileSdk 34 + compileSdk 35 defaultConfig { minSdkVersion 21 diff --git a/libs/download/build.gradle b/libs/download/build.gradle index 853c669b4..ff068ad75 100644 --- a/libs/download/build.gradle +++ b/libs/download/build.gradle @@ -91,7 +91,7 @@ kotlin { android { namespace "org.fdroid.download" - compileSdk 34 + compileSdk 35 sourceSets { main.manifest.srcFile('src/androidMain/AndroidManifest.xml') getByName("androidTest").java.srcDir(file("src/androidAndroidTest/kotlin")) diff --git a/libs/index/build.gradle b/libs/index/build.gradle index 62331655f..95d30f546 100644 --- a/libs/index/build.gradle +++ b/libs/index/build.gradle @@ -90,7 +90,7 @@ kotlin { android { namespace "org.fdroid.index" - compileSdk 34 + compileSdk 35 sourceSets { main.manifest.srcFile('src/androidMain/AndroidManifest.xml') getByName("androidTest").java.srcDir(file("src/androidAndroidTest/kotlin")) diff --git a/libs/sharedTest/build.gradle b/libs/sharedTest/build.gradle index 5974c203f..e02c899f7 100644 --- a/libs/sharedTest/build.gradle +++ b/libs/sharedTest/build.gradle @@ -15,7 +15,7 @@ java { // not really an Android library, but index is not publishing for JVM at the moment android { namespace 'org.fdroid.test' - compileSdk 34 + compileSdk 35 defaultConfig { minSdkVersion 21 } From 395393b51ea8f6ce3bc51c5ec63e1b0d95bbdfad Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 7 Oct 2024 13:37:15 -0300 Subject: [PATCH 3/4] [index] address new nullability info from SDK 35 --- .../org/fdroid/index/v1/IndexV1CreatorTest.kt | 2 +- .../kotlin/org/fdroid/UpdateChecker.kt | 2 +- .../kotlin/org/fdroid/index/IndexCreator.kt | 16 ++++++------ .../org/fdroid/index/v1/IndexV1Creator.kt | 25 ++++++++++++------- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/index/v1/IndexV1CreatorTest.kt b/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/index/v1/IndexV1CreatorTest.kt index bf41365af..ed51b2d0b 100644 --- a/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/index/v1/IndexV1CreatorTest.kt +++ b/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/index/v1/IndexV1CreatorTest.kt @@ -28,7 +28,7 @@ internal class IndexV1CreatorTest { val repoDir = tmpFolder.newFolder() val repo = TestDataMinV1.repo val packageNames = context.packageManager.getInstalledPackages(0).filter { - (it.applicationInfo.flags and FLAG_SYSTEM == 0) and (Random.nextInt(0, 3) == 0) + (it.applicationInfo!!.flags and FLAG_SYSTEM == 0) and (Random.nextInt(0, 3) == 0) }.map { it.packageName }.toSet() val indexCreator = IndexV1Creator(context.packageManager, repoDir, packageNames, repo) val indexV1 = indexCreator.createRepo() diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt index 06d685300..38455b460 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt @@ -39,7 +39,7 @@ public class UpdateChecker( allowedSignersGetter = { // always gives us the oldest signer, even if they rotated certs by now @Suppress("DEPRECATION") - packageInfo.signatures.map { getPackageSigner(it.toByteArray()) }.toSet() + packageInfo.signatures?.map { getPackageSigner(it.toByteArray()) }?.toSet() }, installedVersionCode = PackageInfoCompat.getLongVersionCode(packageInfo), allowedReleaseChannels = releaseChannels, 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 869f12b67..2cfcec168 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt @@ -48,10 +48,10 @@ public abstract class IndexCreator( * Extracts the icon from an APK and writes it to the repo as a PNG. * @return the name of the written icon file. */ - protected fun copyIconToRepo(packageInfo: PackageInfo): String { + protected fun copyIconToRepo(packageInfo: PackageInfo): String? { val packageName = packageInfo.packageName val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) - val drawable = packageInfo.applicationInfo.loadIcon(packageManager) + val drawable = packageInfo.applicationInfo?.loadIcon(packageManager) ?: return null val bitmap: Bitmap if (drawable is BitmapDrawable) { bitmap = drawable.bitmap @@ -71,21 +71,22 @@ public abstract class IndexCreator( /** * Symlinks the APK to the repo. Does not support split APKs. - * @return the name of the linked/copied APK file. + * @return the name of the linked/copied APK file or null if no file exists. * * Roboletric apparently does not support Os.symlink, and some devices might * have wonky implementations. Copying is slower and takes more disk space, * but is much more reliable. So it is a workable fallback. */ - protected fun copyApkToRepo(packageInfo: PackageInfo): File { + protected fun copyApkToRepo(packageInfo: PackageInfo): File? { + val appInfo = packageInfo.applicationInfo ?: return null val packageName = packageInfo.packageName 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) + symlink(appInfo.publicSourceDir, apkFile.absolutePath) if (!apkFile.exists()) { - File(packageInfo.applicationInfo.publicSourceDir).copyTo(apkFile) + File(appInfo.publicSourceDir).copyTo(apkFile) } return apkFile } @@ -108,7 +109,8 @@ public abstract class IndexCreator( } protected fun parseNativeCode(packageInfo: PackageInfo): List { - val apkJar = JarFile(packageInfo.applicationInfo.publicSourceDir) + val appInfo = packageInfo.applicationInfo ?: return emptyList() + val apkJar = JarFile(appInfo.publicSourceDir) val abis = HashSet() val jarEntries = apkJar.entries() while (jarEntries.hasMoreElements()) { 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 263c26607..8e1f4a5e8 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 @@ -68,7 +68,12 @@ public class IndexV1Creator( @Suppress("PackageManagerGetSignatures") val packageInfo = packageManager.getPackageInfo(packageName, flags) apps.add(getApp(packageInfo)) - packages[packageName] = listOf(getPackage(packageInfo)) + val p = getPackage(packageInfo) + if (p == null) { + Log.w("IndexV1Creator", "Got no package for $packageName") + return + } + packages[packageName] = listOf(p) } catch (e: PackageManager.NameNotFoundException) { Log.i("IndexV1Creator", "app disappeared during addApp: ", e) } @@ -78,18 +83,20 @@ public class IndexV1Creator( val icon = copyIconToRepo(packageInfo) return AppV1( packageName = packageInfo.packageName, - name = packageInfo.applicationInfo.loadLabel(packageManager).toString(), + name = packageInfo.applicationInfo?.loadLabel(packageManager).toString(), license = "Unknown", icon = icon, ) } - private fun getPackage(packageInfo: PackageInfo): PackageV1 { - val apk = copyApkToRepo(packageInfo) + private fun getPackage(packageInfo: PackageInfo): PackageV1? { + val apk = copyApkToRepo(packageInfo) ?: return null + val appInfo = packageInfo.applicationInfo ?: return null + val signatures = packageInfo.signatures ?: return null val hash = hashFile(apk) val apkName = apk.name - val sig = getsig(packageInfo.signatures[0].toByteArray()) - val signer = getPackageSigner(packageInfo.signatures[0].toByteArray()) + val sig = getsig(signatures[0].toByteArray()) + val signer = getPackageSigner(signatures[0].toByteArray()) return PackageV1( packageName = packageInfo.packageName, versionCode = PackageInfoCompat.getLongVersionCode(packageInfo), @@ -101,9 +108,9 @@ public class IndexV1Creator( hashType = "sha256", sig = sig, signer = signer, - size = File(packageInfo.applicationInfo.publicSourceDir).length(), - minSdkVersion = if (SDK_INT >= 24) packageInfo.applicationInfo.minSdkVersion else null, - targetSdkVersion = packageInfo.applicationInfo.targetSdkVersion, + size = File(appInfo.publicSourceDir).length(), + minSdkVersion = if (SDK_INT >= 24) appInfo.minSdkVersion else null, + targetSdkVersion = appInfo.targetSdkVersion, usesPermission = packageInfo.requestedPermissions?.map { PermissionV1(it) } ?: emptyList(), From 347cc019258f083d27021e33aa854266729d3254 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 8 Oct 2024 09:06:16 -0300 Subject: [PATCH 4/4] Remove accepting licenses from SDK --- .gitlab-ci.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1c0b7b5f6..1ede7ce6f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -219,11 +219,8 @@ libs database schema: - apt-get -qy --no-install-recommends install openjdk-17-jdk-headless git sdkmanager - export ANDROID_HOME=/opt/android-sdk - export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdk\s*\([0-9][0-9]*\).*,\1,p' app/build.gradle` - - mkdir -p "$ANDROID_HOME/licenses" - - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - - echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "$ANDROID_HOME/licenses/android-sdk-license" - - echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" >> "$ANDROID_HOME/licenses/android-sdk-license" - - sdkmanager "platforms;android-$ANDROID_COMPILE_SDK" "build-tools;35.0.0" + - sdkmanager "platforms;android-$ANDROID_COMPILE_SDK" "build-tools;$ANDROID_COMPILE_SDK.0.0" + - sdkmanager "build-tools;34.0.0" # still needed until we upgrade android gradle plugin - ./gradlew :libs:database:kaptDebugKotlin - git --no-pager diff --exit-code