chiark / gitweb /
signatures: future-proof fetching app ID info from APK
authorHans-Christoph Steiner <hans@eds.org>
Thu, 22 Feb 2018 13:30:39 +0000 (14:30 +0100)
committerHans-Christoph Steiner <hans@eds.org>
Thu, 22 Feb 2018 14:08:55 +0000 (15:08 +0100)
We're not using platformBuildVersionName and it might go away just like it
appeared: with no good reason or announcement.

fdroidserver/common.py
tests/common.TestCase

index 9c20443a61c478289371174d512457c252b4f6a1..b5ff274c52b2a46782091a87c1f4456073765af6 100644 (file)
@@ -1990,7 +1990,7 @@ def get_apk_id_aapt(apkfile):
     :param apkfile: path to an APK file.
     :returns: triplet (appid, version code, version name)
     """
-    r = re.compile("package: name='(?P<appid>.*)' versionCode='(?P<vercode>.*)' versionName='(?P<vername>.*)' platformBuildVersionName='.*'")
+    r = re.compile("^package: name='(?P<appid>.*)' versionCode='(?P<vercode>.*)' versionName='(?P<vername>.*)'.*")
     p = SdkToolsPopen(['aapt', 'dump', 'badging', apkfile], output=False)
     for line in p.output.splitlines():
         m = r.match(line)
index 1d5678dda633f9ce44fad21fa1daeb2ec9069e1e..55af255866491baabd5f7559a5746978217d9c55 100755 (executable)
@@ -541,10 +541,40 @@ class CommonTest(unittest.TestCase):
         self._set_build_tools()
         config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt')
 
-        appid, vercode, vername = fdroidserver.common.get_apk_id_aapt('repo/obb.main.twoversions_1101613.apk')
-        self.assertEqual('obb.main.twoversions', appid)
-        self.assertEqual('1101613', vercode)
-        self.assertEqual('0.1', vername)
+        testcases = [
+            ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', '1101613', '0.1'),
+            ('OBBMainPatchCurrent.apk', 'obb.mainpatch.current', '1619', '0.1'),
+            ('OBBMainTwoVersions.apk', 'obb.main.twoversions', '1101613', '0.1'),
+            ('org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror', '1', '1.0'),
+            ('org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror', '2', '1.0.1'),
+            ('org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', '3', '1.0.2'),
+            ('org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', '4', '1.0.3'),
+            ('org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', '20', 'v1.6pre2'),
+            ('urzip.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('urzip-badcert.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('urzip-badsig.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('urzip-release.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('urzip-release-unsigned.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234.apk', 'info.guardianproject.urzip', '100', '0.1'),
+            ('repo/com.politedroid_3.apk', 'com.politedroid', '3', '1.2'),
+            ('repo/com.politedroid_4.apk', 'com.politedroid', '4', '1.3'),
+            ('repo/com.politedroid_5.apk', 'com.politedroid', '5', '1.4'),
+            ('repo/com.politedroid_6.apk', 'com.politedroid', '6', '1.5'),
+            ('repo/duplicate.permisssions_9999999.apk', 'duplicate.permisssions', '9999999', '0.3-7-gb817ac8'),
+            ('repo/info.zwanenburg.caffeinetile_4.apk', 'info.zwanenburg.caffeinetile', '4', '1.3'),
+            ('repo/obb.main.oldversion_1444412523.apk', 'obb.main.oldversion', '1444412523', '0.1'),
+            ('repo/obb.mainpatch.current_1619_another-release-key.apk', 'obb.mainpatch.current', '1619', '0.1'),
+            ('repo/obb.mainpatch.current_1619.apk', 'obb.mainpatch.current', '1619', '0.1'),
+            ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', '1101613', '0.1'),
+            ('repo/obb.main.twoversions_1101615.apk', 'obb.main.twoversions', '1101615', '0.1'),
+            ('repo/obb.main.twoversions_1101617.apk', 'obb.main.twoversions', '1101617', '0.1'),
+            ('repo/urzip-; Рахма́нинов, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·.apk', 'info.guardianproject.urzip', '100', '0.1'),
+        ]
+        for apkfilename, appid, versionCode, versionName in testcases:
+            a, vc, vn = fdroidserver.common.get_apk_id_aapt(apkfilename)
+            self.assertEqual(appid, a)
+            self.assertEqual(versionCode, vc)
+            self.assertEqual(versionName, vn)
 
         with self.assertRaises(FDroidException):
             fdroidserver.common.get_apk_id_aapt('nope')