From 40be283c4a8f04621e2096149a1c7ddf2d049a1a Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 17 Feb 2025 16:22:55 +0100 Subject: [PATCH] APK for testing maxSdkVersion handling APK is org.bitbucket.tickytacky.mirrormirror_4.apk disassembled with `apktool decode`, maxSdkVersion added, then reassembled with `apktool build` --- MANIFEST.in | 2 + tests/metadata/org.maxsdkversion.yml | 2 + tests/repo/entry.json | 6 +-- tests/repo/index-v1.json | 36 ++++++++++++++++++ tests/repo/index-v2.json | 55 +++++++++++++++++++++++++++ tests/repo/index.xml | 29 ++++++++++++++ tests/repo/org.maxsdkversion_4.apk | Bin 0 -> 12768 bytes tests/test_update.py | 6 +-- 8 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 tests/metadata/org.maxsdkversion.yml create mode 100644 tests/repo/org.maxsdkversion_4.apk diff --git a/MANIFEST.in b/MANIFEST.in index 0dac052c..cd5ed76a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -637,6 +637,7 @@ include tests/metadata/obb.main.twoversions.yml include tests/metadata/org.adaway.yml include tests/metadata/org.fdroid.ci.test.app.yml include tests/metadata/org.fdroid.fdroid.yml +include tests/metadata/org.maxsdkversion.yml include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF include tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF @@ -689,6 +690,7 @@ include tests/repo/obb.main.twoversions_1101613.apk include tests/repo/obb.main.twoversions_1101615.apk include tests/repo/obb.main.twoversions_1101617.apk include tests/repo/obb.main.twoversions_1101617_src.tar.gz +include tests/repo/org.maxsdkversion_4.apk include tests/repo/org.videolan.vlc/en-US/icon.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png diff --git a/tests/metadata/org.maxsdkversion.yml b/tests/metadata/org.maxsdkversion.yml new file mode 100644 index 00000000..08eab4db --- /dev/null +++ b/tests/metadata/org.maxsdkversion.yml @@ -0,0 +1,2 @@ +Name: maxSdkVersion +Summary: Test setting maxSdkVersion in an APK diff --git a/tests/repo/entry.json b/tests/repo/entry.json index c52f31ba..1eb017bc 100644 --- a/tests/repo/entry.json +++ b/tests/repo/entry.json @@ -3,9 +3,9 @@ "version": 20002, "index": { "name": "/index-v2.json", - "sha256": "bef31251dd4bdfc34f9a9e7b93dbf3e0bc7172e17d1d72a550c10d1bc183c01c", - "size": 53527, - "numPackages": 10 + "sha256": "f0912b64db80168ee807f43ab3470bb709b6659aee05ad63057dcbcd1c97dc5e", + "size": 55186, + "numPackages": 11 }, "diffs": {} } \ No newline at end of file diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index ec2195b4..ed1cbcde 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -91,6 +91,16 @@ } } }, + { + "suggestedVersionCode": "4", + "license": "Unknown", + "name": "maxSdkVersion", + "summary": "Test setting maxSdkVersion in an APK", + "added": 1739805810000, + "icon": "org.maxsdkversion.4.png", + "packageName": "org.maxsdkversion", + "lastUpdated": 1739805810000 + }, { "categories": [ "Development" @@ -652,6 +662,32 @@ "versionName": "0.1" } ], + "org.maxsdkversion": [ + { + "added": 1739805810000, + "apkName": "org.maxsdkversion_4.apk", + "features": [ + "android.hardware.camera.front" + ], + "hash": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", + "hashType": "sha256", + "maxSdkVersion": 25, + "minSdkVersion": 14, + "packageName": "org.maxsdkversion", + "sig": "1a5e67bcef6b2d6242f2d36982b54589", + "signer": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e", + "size": 12768, + "targetSdkVersion": 19, + "uses-permission": [ + [ + "android.permission.CAMERA", + null + ] + ], + "versionCode": 4, + "versionName": "1.0.3" + } + ], "souch.smsbypass": [ { "added": 1524700800000, diff --git a/tests/repo/index-v2.json b/tests/repo/index-v2.json index ecb0fdc0..96c2cfea 100644 --- a/tests/repo/index-v2.json +++ b/tests/repo/index-v2.json @@ -1381,6 +1381,61 @@ } } }, + "org.maxsdkversion": { + "metadata": { + "added": 1739805810000, + "lastUpdated": 1739805810000, + "name": { + "en-US": "maxSdkVersion" + }, + "summary": { + "en-US": "Test setting maxSdkVersion in an APK" + }, + "icon": { + "en-US": { + "name": "/icons/org.maxsdkversion.4.png", + "sha256": "428442a0b75be04af3191a066041341f8a0b289972f99868687f43e02055a348", + "size": 91 + } + }, + "preferredSigner": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" + }, + "versions": { + "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d": { + "added": 1739805810000, + "file": { + "name": "/org.maxsdkversion_4.apk", + "sha256": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", + "size": 12768, + "ipfsCIDv1": "bafybeibdls2h4mpfw5gks3iirsne2qaez6uefwb5xmqkhahqbakvdszk6y" + }, + "manifest": { + "versionName": "1.0.3", + "maxSdkVersion": 25, + "versionCode": 4, + "features": [ + { + "name": "android.hardware.camera.front" + } + ], + "usesSdk": { + "minSdkVersion": 14, + "targetSdkVersion": 19 + }, + "signer": { + "sha256": [ + "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" + ] + }, + "usesPermission": [ + { + "name": "android.permission.CAMERA" + } + ] + } + } + } + }, "souch.smsbypass": { "metadata": { "added": 1524700800000, diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 4d7e8633..4036a6f7 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -147,6 +147,35 @@ APK is called F-Droid Privileged Extension. 2016-03-10 + + org.maxsdkversion + 2025-02-17 + 2025-02-17 + maxSdkVersion + Test setting maxSdkVersion in an APK + org.maxsdkversion.4.png + No description available + Unknown + + + + + 4 + + 1.0.3 + 4 + org.maxsdkversion_4.apk + 877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d + 12768 + 14 + 19 + 25 + 2025-02-17 + 1a5e67bcef6b2d6242f2d36982b54589 + CAMERA + android.hardware.camera.front + + no.min.target.sdk 2018-10-10 diff --git a/tests/repo/org.maxsdkversion_4.apk b/tests/repo/org.maxsdkversion_4.apk new file mode 100644 index 0000000000000000000000000000000000000000..3957886176290934f69bf9c57d044f827f3f807f GIT binary patch literal 12768 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 literal 0 HcmV?d00001 diff --git a/tests/test_update.py b/tests/test_update.py index 323dcace..dfe353b5 100755 --- a/tests/test_update.py +++ b/tests/test_update.py @@ -605,7 +605,7 @@ class UpdateTest(unittest.TestCase): apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) - self.assertEqual(len(apks), 17) + self.assertEqual(len(apks), 18) apk = apks[1] self.assertEqual(apk['packageName'], 'com.politedroid') self.assertEqual(apk['versionCode'], 3) @@ -668,7 +668,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.options.clean = False read_from_json = fdroidserver.update.get_cache() - self.assertEqual(19, len(read_from_json)) + self.assertEqual(20, len(read_from_json)) for f in glob.glob('repo/*.apk'): self.assertTrue(os.path.basename(f) in read_from_json) @@ -1241,7 +1241,7 @@ class UpdateTest(unittest.TestCase): knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) fdroidserver.update.translate_per_build_anti_features(apps, apks) - self.assertEqual(len(apks), 17) + self.assertEqual(len(apks), 18) foundtest = False for apk in apks: if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3: