Compare commits

...

36 commits

Author SHA1 Message Date
Hans-Christoph Steiner
8716474083
bump to v1.1.9 2020-06-24 21:49:59 +02:00
Hans-Christoph Steiner
49d414635a lint: fix OpenCollective field validator
closes fdroiddata#2077
2020-06-24 21:49:26 +02:00
Hans-Christoph Steiner
cad4dc18c6
bump to version v1.1.8 2020-06-18 08:01:34 +02:00
Hans-Christoph Steiner
6bbf0a1722 add Liberapay: field with username as data
Liberapay was originally included using a numeric ID, since they had
not yet finalized the public URLs.  Now it is a username.  So this
logic prefers the username in Liberapay: field, and keeps the old
LiberapayID: to ease migration.  LiberapayID: will not override
Liberapay:.  Clients are expected to prefer Liberapay: over LiberapayID:

# Conflicts:
#	fdroidserver/update.py
#	tests/metadata/info.guardianproject.checkey.yml
#	tests/metadata/obb.main.oldversion.yml
#	tests/metadata/org.adaway.yml
#	tests/update.TestCase
2020-06-18 06:52:52 +02:00
Marcus
0ff3c561c0 add opencollective metadata and index field 2020-06-18 06:37:45 +02:00
Hans-Christoph Steiner
722a23f571 bump to versiob v1.1.7 2020-05-15 09:22:10 +02:00
Hans-Christoph Steiner
80a467134f gitlab-ci: run Debian/buster job on all commits 2020-05-15 08:20:44 +02:00
Michael Pöhn
f5f61155ae improve litecoin validation + tests 2020-05-14 17:41:09 +02:00
Hans-Christoph Steiner
7b6f089220 index: xml.dom.minidom no longer sorts attribs
It seems now that xml.dom.minidom preserves the order of attributes, rather
than sorting them.  We assume alpha-sort, so this manually

This diff in the test suite running on Debian/testing pointed it out:
https://gitlab.com/fdroid/fdroidserver/-/jobs/486970383

```diff
--- /builds/fdroid/fdroidserver/tests/repo/index.xml	2020-04-11 13:36:57.000000000 +0000
+++ repo/index.xml	2020-04-11 13:41:44.000000000 +0000
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <fdroid>
-	<repo icon="fdroid-icon.png" name="My First F-Droid Repo Demo" pubkey="308204e1308202c9a003020102020434597643300d06092a864886f70d01010b050030213110300e060355040b1307462d44726f6964310d300b06035504031304736f7661301e170d3136303931333230313930395a170d3434303133303230313930395a30213110300e060355040b1307462d44726f6964310d300b06035504031304736f766130820222300d06092a864886f70d01010105000382020f003082020a028202010086ef94b5aacf2ba4f38c875f4194b44f5644392e3715575d7c92828577e692c352b567172823851c8c72347fbc9d99684cd7ca3e1db3e4cca126382c53f2a5869fb4c19bdec989b2930501af3e758ff40588915fe96b10076ce3346a193a0277d79e83e30fd8657c20e35260dd085aa32eac7c4b85786ffefbf1555cafe2bc928443430cdbba48cfbe701e12ae86e676477932730d4fc7c00af820aef85038a5b4df084cf6470d110dc4c49ea1b749b80b34709d199b3db516b223625c5de4501e861f7d261b3838f8f616aa78831d618d41d25872dc810c9b2087b5a9e146ca95be740316dcdbcb77314e23ab87d4487913b800b1113c0603ea2294188b71d3e49875df097b56f9151211fc6832f9790c5c83d17481f14ad37915fd164f4fd713f6732a15f4245714b84cd665bdbd085660ea33ad7d7095dcc414f09e3903604a40facc2314a115c0045bb50e9df38efb57e1b8e7cc105f340a26eeb46aba0fa6672953eee7f1f92dcb408e561909bbd4bdf4a4948c4d57c467d21aa238c34ba43be050398be963191fa2b49828bc1e4eeed224b40dbe9dc3e570890a71a974a2f4527edb1b07105071755105edcb2af2f269facfb89180903a572a99b46456e80d4a01685a80b233278805f2c876678e731f4ec4f52075aeef6b2b023efbb8a3637ef507c4c37c27e428152ec1817fcba640ad601cb09f72f0fbe2d274a2410203010001a321301f301d0603551d0e04160414c28bf33dd5a9a17338e5b1d1a6edd8c7d141ed0b300d06092a864886f70d01010b0500038202010084e20458b2aafd7fc27146b0986f9324f4260f244920417a77c9bf15e2e2d22d2725bdd8093ec261c3779c3ca03312516506f9410075b90595b41345956d8eb2786fb5994f195611382c2b99dba13381b0100a30bc9e6e47248bf4325e2f6eec9d789216dc7536e753bf1f4be603d9fa2e6f5e192b4eb988b8cdb0bb1e8668a9225426f7d4636479f73ed24ad1d2657c31e63c93d9679b9080171b3bd1bf10a3b92b80bd790fbf62d3644900cd08eae8b9bf9c2567be98dc8cdd2ae19a8d57a3e3e2de899f81f1279f578989e6af906f80c8c2b67651730ee7e568c1af5bcb845b6d685dc55332a9984aeceaea3b7e883447edf1c76b155d95253e39b9710eaa22efa6c81468829702b5dce7126538f3ca70c2f0ad9a5795435fdb1f715f20d60359ef9a9926c7050116e802df651727447848827815f70bd82af3cedd08783156102d2d8ce995c4c43b8e47e91a3e6927f3505a5d395e6bebb84542c570903eeab4382a1c2151f1471c7a06a34dc4d268d8fa72e93bdcd2dccc4302ecac47b9e7e3d8bc9b46d21cd097874a24d529548018dc190ff568c6aa428f0a5eedff1a347730931c74f19277538e49647a4ad7254f4c1ec7d4da12cce9e1fad9607534e66ab40a56b473d9d7e3d563fd03cad2052bad365c5a29f8ae54f09b60dbca3ea768d7767cbe1c133ca08ce725c1c1370f4aab8e5b6e286f52dc0be8d0982b5a" timestamp="1480431575" url="https://MyFirstFDroidRepo.org/fdroid/repo" version="21">
+	<repo name="My First F-Droid Repo Demo" icon="fdroid-icon.png" url="https://MyFirstFDroidRepo.org/fdroid/repo" version="21" timestamp="1480431575" pubkey="308204e1308202c9a003020102020434597643300d06092a864886f70d01010b050030213110300e060355040b1307462d44726f6964310d300b06035504031304736f7661301e170d3136303931333230313930395a170d3434303133303230313930395a30213110300e060355040b1307462d44726f6964310d300b06035504031304736f766130820222300d06092a864886f70d01010105000382020f003082020a028202010086ef94b5aacf2ba4f38c875f4194b44f5644392e3715575d7c92828577e692c352b567172823851c8c72347fbc9d99684cd7ca3e1db3e4cca126382c53f2a5869fb4c19bdec989b2930501af3e758ff40588915fe96b10076ce3346a193a0277d79e83e30fd8657c20e35260dd085aa32eac7c4b85786ffefbf1555cafe2bc928443430cdbba48cfbe701e12ae86e676477932730d4fc7c00af820aef85038a5b4df084cf6470d110dc4c49ea1b749b80b34709d199b3db516b223625c5de4501e861f7d261b3838f8f616aa78831d618d41d25872dc810c9b2087b5a9e146ca95be740316dcdbcb77314e23ab87d4487913b800b1113c0603ea2294188b71d3e49875df097b56f9151211fc6832f9790c5c83d17481f14ad37915fd164f4fd713f6732a15f4245714b84cd665bdbd085660ea33ad7d7095dcc414f09e3903604a40facc2314a115c0045bb50e9df38efb57e1b8e7cc105f340a26eeb46aba0fa6672953eee7f1f92dcb408e561909bbd4bdf4a4948c4d57c467d21aa238c34ba43be050398be963191fa2b49828bc1e4eeed224b40dbe9dc3e570890a71a974a2f4527edb1b07105071755105edcb2af2f269facfb89180903a572a99b46456e80d4a01685a80b233278805f2c876678e731f4ec4f52075aeef6b2b023efbb8a3637ef507c4c37c27e428152ec1817fcba640ad601cb09f72f0fbe2d274a2410203010001a321301f301d0603551d0e04160414c28bf33dd5a9a17338e5b1d1a6edd8c7d141ed0b300d06092a864886f70d01010b0500038202010084e20458b2aafd7fc27146b0986f9324f4260f244920417a77c9bf15e2e2d22d2725bdd8093ec261c3779c3ca03312516506f9410075b90595b41345956d8eb2786fb5994f195611382c2b99dba13381b0100a30bc9e6e47248bf4325e2f6eec9d789216dc7536e753bf1f4be603d9fa2e6f5e192b4eb988b8cdb0bb1e8668a9225426f7d4636479f73ed24ad1d2657c31e63c93d9679b9080171b3bd1bf10a3b92b80bd790fbf62d3644900cd08eae8b9bf9c2567be98dc8cdd2ae19a8d57a3e3e2de899f81f1279f578989e6af906f80c8c2b67651730ee7e568c1af5bcb845b6d685dc55332a9984aeceaea3b7e883447edf1c76b155d95253e39b9710eaa22efa6c81468829702b5dce7126538f3ca70c2f0ad9a5795435fdb1f715f20d60359ef9a9926c7050116e802df651727447848827815f70bd82af3cedd08783156102d2d8ce995c4c43b8e47e91a3e6927f3505a5d395e6bebb84542c570903eeab4382a1c2151f1471c7a06a34dc4d268d8fa72e93bdcd2dccc4302ecac47b9e7e3d8bc9b46d21cd097874a24d529548018dc190ff568c6aa428f0a5eedff1a347730931c74f19277538e49647a4ad7254f4c1ec7d4da12cce9e1fad9607534e66ab40a56b473d9d7e3d563fd03cad2052bad365c5a29f8ae54f09b60dbca3ea768d7767cbe1c133ca08ce725c1c1370f4aab8e5b6e286f52dc0be8d0982b5a">
 		<description>This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/u/fdroid. </description>
 		<mirror>http://foobarfoobarfoobar.onion/fdroid/repo</mirror>
 		<mirror>https://foo.bar/fdroid/repo</mirror>
@@ -94,9 +94,9 @@
 			<added>2017-12-22</added>
 			<sig>056c9f1554c40ba59a2103009c82b420</sig>
 			<permissions>ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,CHANGE_WIFI_MULTICAST_STATE,INTERNET,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE</permissions>
-			<uses-permission maxSdkVersion="18" name="android.permission.READ_EXTERNAL_STORAGE"/>
-			<uses-permission maxSdkVersion="18" name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-			<uses-permission-sdk-23 maxSdkVersion="27" name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
+			<uses-permission name="android.permission.READ_EXTERNAL_STORAGE" maxSdkVersion="18"/>
+			<uses-permission name="android.permission.WRITE_EXTERNAL_STORAGE" maxSdkVersion="18"/>
+			<uses-permission-sdk-23 name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" maxSdkVersion="27"/>
 		</package>
 	</application>
 	<application id="fake.ota.update">
@@ -182,9 +182,9 @@
 			<added>2013-12-31</added>
 			<sig>eb41d4d6082bb3e81c3d58dbf7fc7332</sig>
 			<permissions>ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,BLUETOOTH,BLUETOOTH_ADMIN,CHANGE_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,CHANGE_WIFI_STATE,INTERNET,NFC,RECEIVE_BOOT_COMPLETED</permissions>
-			<uses-permission maxSdkVersion="22" name="android.permission.ACCESS_NETWORK_STATE"/>
-			<uses-permission maxSdkVersion="18" name="android.permission.BLUETOOTH_ADMIN"/>
-			<uses-permission-sdk-23 maxSdkVersion="25" name="android.permission.WRITE_SETTINGS"/>
+			<uses-permission name="android.permission.ACCESS_NETWORK_STATE" maxSdkVersion="22"/>
+			<uses-permission name="android.permission.BLUETOOTH_ADMIN" maxSdkVersion="18"/>
+			<uses-permission-sdk-23 name="android.permission.WRITE_SETTINGS" maxSdkVersion="25"/>
 		</package>
 	</application>
 	<application id="obb.main.twoversions">
```
2020-05-14 17:33:21 +02:00
Torsten Grote
3282687f9e Fix nightly --archive-older command line option 2020-05-11 17:40:59 +02:00
Hans-Christoph Steiner
dcb72a77ce
bump to version v1.1.6 2019-12-03 00:28:16 +01:00
Hans-Christoph Steiner
f92eaf644f
nightly: set descriptions for repo and archive 2019-12-03 00:10:46 +01:00
Hans-Christoph Steiner
aa18746cc4
bump to version v1.1.5 2019-08-26 14:58:38 +02:00
Hans-Christoph Steiner
004e2c8f26
setup.py: ruamel.yaml >= 0.15 required for yml rewrites 2019-08-21 14:41:23 +02:00
Hans-Christoph Steiner
39e4e05c9f
setup.py: use officially documented way of including README
https://packaging.python.org/tutorials/packaging-projects/
2019-08-21 14:41:13 +02:00
Hans-Christoph Steiner
c02a98f364 bump to version v1.1.4 2019-08-15 10:45:50 +02:00
Hans-Christoph Steiner
bb36bf6c67 update CHANGELOG for v1.1.4 2019-08-15 10:45:23 +02:00
Hans-Christoph Steiner
dff47beb01 tests: conditionally disable tests that can't work with apksigner
apksigner treats MD5 signatures as valid, fdroid does not.
2019-08-15 10:16:03 +02:00
Hans-Christoph Steiner
6b013d01ac tests: skip disabled_algorithms test when apksigner is present
apksigner doesn't treat MD5 signatures as deprecated, so that portion of
the tests would always fail.
2019-08-15 10:15:25 +02:00
Michael Pöhn
8fe1583f83 improve bitcoin validation regex + testcases 2019-08-14 23:16:40 +02:00
Hans-Christoph Steiner
fd870c59bd bump to version v1.1.3 2019-07-03 23:44:22 +02:00
Hans-Christoph Steiner
fd1e22e791 ./setup.py release: make upload step manual so CI can run first
There is lots of CI tests for the Debian package, so it is good to first
run those Debian CI tests before uploading an fdroidserver release.
2019-07-03 23:44:22 +02:00
Hans-Christoph Steiner
e8cd0986e3 include all relevant files in source tarball (MANIFEST.in) 2019-07-03 23:44:22 +02:00
Hans-Christoph Steiner
5ba7419128 tests: only run source tarball test if running from git clone 2019-07-03 23:44:22 +02:00
Hans-Christoph Steiner
4ddd840471 tests: only run hooks/pre-commit if its present (not in source tarball) 2019-07-03 20:47:27 +02:00
Hans-Christoph Steiner
9e32e2d770 tests: common.test_sign_apk requires aapt to run 2019-07-03 16:21:43 +02:00
Hans-Christoph Steiner
b484e9ecfd tests: handle when apksigner considers MD5 signatures valid 2019-07-03 16:21:43 +02:00
Hans-Christoph Steiner
2e59220644
gitlab-ci: disable bandit fail on standard debug keystore password 2019-06-30 22:50:41 +02:00
Hans-Christoph Steiner
74a0abc530 update bash completion for new deploy/nightly flags 2019-05-02 08:53:22 +02:00
Hans-Christoph Steiner
5a2534b604 nightly: archive older versions; remove archive if git mirror is full 2019-05-01 21:02:11 +02:00
Hans-Christoph Steiner
6e7e9b355c deploy: if git mirror > 1GB after deleting history, delete the archive
git mirrors are meant to be an easy way to host a repo that is zero
maintenance.  They are not meant to be the canonical repo with full,
preserved archive.  This option provides the zero maintenance mode.
2019-05-01 21:02:11 +02:00
Hans-Christoph Steiner
833f23cf89 scanner: allow local Debian Maven repo file:///usr/share/maven-repo
It is now possible to build an app using only things in Debian.  Since the
buildserver will always control the contents of file:///usr/share/maven-repo,
it is the most safe repo there is.
2019-05-01 21:02:11 +02:00
Hans-Christoph Steiner
01fb62fff4 publish: fix stupid error in repro-signing and add integration test
stoopid mistake in ea84014f9b
2019-04-11 13:31:38 +02:00
Nico Alt
bb80c729f5 Version 1.1.2, including changelog 2019-03-29 08:42:49 +01:00
Nico Alt
a5851c083d Flush file before passing it to next function
When downloading a repo index, the downloaded index got written to a
file with `.write()` in a `with` clause. Before the file got actually
written to the disk, it got already passed into the next function,
resulting in a `VerificationException`:
```
JAR signature failed to verify: /tmp/tmppq2r51r0
jarsigner: java.util.zip.ZipException: zip file is empty
```

This behavior got introduced in
869cc114a3.

I've found this bug with help of Repomaker's tests: https://gitlab.com/fdroid/repomaker/merge_requests/215#note_148994053
2019-03-29 08:39:25 +01:00
Hans-Christoph Steiner
6634407c60 update: allow tests to pass when apksigner is not installed
This is only for the v2/v3 signatures.

fdroid/fdroidserver#627
2019-02-03 16:54:32 +01:00
28 changed files with 887 additions and 152 deletions

View file

@ -33,20 +33,19 @@ metadata_v0:
- echo "accepted_formats = ('txt', 'yml')" >> config.py - echo "accepted_formats = ('txt', 'yml')" >> config.py
- ../tests/dump_internal_metadata_format.py - ../tests/dump_internal_metadata_format.py
- sed -i - sed -i
-e '/kivy:\sfalse/d' -e '/Liberapay:/d'
-e '/OpenCollective/d'
metadata/dump_*/*.yaml metadata/dump_*/*.yaml
- diff -uw metadata/dump_* - diff -uw metadata/dump_*
debian_testing: debian_buster:
image: debian:testing image: debian:buster
only:
- master@fdroid/fdroidserver
script: script:
- apt-get -qy update - apt-get -qy update
- apt-get -qy dist-upgrade - apt-get -qy dist-upgrade
- apt-get -qy install --no-install-recommends - apt-get -qy install --no-install-recommends
fdroidserver git gnupg python3-defusedxml python3-setuptools fdroidserver git gnupg python3-defusedxml python3-setuptools
- sed -i -e 's,testing,sid,g' -e 's,testing,sid,g' /etc/apt/sources.list - echo "deb http://deb.debian.org/debian sid main" >> /etc/apt/sources.list
- apt-get -qy update - apt-get -qy update
- apt-get install -y --no-install-recommends aapt androguard android-platform-tools-base zipalign - apt-get install -y --no-install-recommends aapt androguard android-platform-tools-base zipalign
- python3 -c 'import fdroidserver' - python3 -c 'import fdroidserver'
@ -135,7 +134,7 @@ lint_format_safety_bandit_checks:
-x fdroidserver/dscanner.py,docker/install_agent.py,docker/drozer.py -x fdroidserver/dscanner.py,docker/install_agent.py,docker/drozer.py
-r $CI_PROJECT_DIR fdroid -r $CI_PROJECT_DIR fdroid
|| export EXITVALUE=1 || export EXITVALUE=1
- safety check --full-report || export EXITVALUE=1 - safety check --full-report --ignore=38224 || export EXITVALUE=1
- pylint --rcfile=.pylint-rcfile --output-format=colorized --reports=n - pylint --rcfile=.pylint-rcfile --output-format=colorized --reports=n
fdroid fdroid
makebuildserver makebuildserver

View file

@ -1,4 +1,20 @@
### 1.1.4 (2019-08-15)
* include bitcoin validation regex required by fdroiddata
* merged Debian patches to fix test suite there
### 1.1.3 (2019-07-03)
* fixed test suite when run from source tarball
* fixed test runs in Debian
### 1.1.2 (2019-03-29)
* fix bug while downloading repo index ([!636](https://gitlab.com/fdroid/fdroidserver/merge_requests/636))
### 1.1.1 (2019-02-03) ### 1.1.1 (2019-02-03)
* support APK Signature v2 and v3 * support APK Signature v2 and v3

View file

@ -4,9 +4,9 @@ include buildserver/provision-android-sdk
include buildserver/provision-apt-get-install include buildserver/provision-apt-get-install
include buildserver/provision-apt-proxy include buildserver/provision-apt-proxy
include buildserver/provision-gradle include buildserver/provision-gradle
include buildserver/provision-pip
include buildserver/setup-env-vars include buildserver/setup-env-vars
include buildserver/Vagrantfile include buildserver/Vagrantfile
include CHANGELOG.md
include completion/bash-completion include completion/bash-completion
include docker/Dockerfile include docker/Dockerfile
include docker/drozer.py include docker/drozer.py
@ -41,15 +41,513 @@ include locale/uk/LC_MESSAGES/fdroidserver.mo
include locale/zh_Hans/LC_MESSAGES/fdroidserver.mo include locale/zh_Hans/LC_MESSAGES/fdroidserver.mo
include locale/zh_Hant/LC_MESSAGES/fdroidserver.mo include locale/zh_Hant/LC_MESSAGES/fdroidserver.mo
include makebuildserver include makebuildserver
include README.rst include README.md
include tests/androguard_test.py include tests/androguard_test.py
include tests/bad-unicode-*.apk include tests/bad-unicode-*.apk
include tests/build.TestCase include tests/build.TestCase
include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/17.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/18.1.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/18.1.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/18.1.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/18.1.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/19.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/19.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/19.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/19.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/19.1.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/19.1.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/19.1.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/19.1.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/20.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/20.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/20.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/20.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/21.1.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/21.1.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/21.1.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/21.1.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/21.1.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/21.1.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/21.1.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/21.1.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/22.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/22.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/22.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/22.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/22.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/22.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/22.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/22.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/23.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/23.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/23.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/23.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/23.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/23.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/23.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/23.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/23.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/23.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/23.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/23.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/23.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/23.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/23.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/23.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/24.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/24.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/24.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/24.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/24.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/24.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/24.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/24.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/24.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/24.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/24.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/24.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/24.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/24.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/24.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/24.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/25.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/25.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/25.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/25.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/25.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/25.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/25.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/25.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/25.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/25.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/25.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/25.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/25.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/25.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/25.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/25.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/26.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/26.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/26.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/26.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/26.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/26.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/26.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/26.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/26.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/26.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/26.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/26.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/26.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/26.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/26.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/26.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/27.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/27.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/27.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/27.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/27.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/27.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/27.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/27.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/27.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/27.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/27.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/27.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/27.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/27.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/27.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/27.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/28.0.0/aapt-output-com.politedroid_3.txt
include tests/build-tools/28.0.0/aapt-output-com.politedroid_4.txt
include tests/build-tools/28.0.0/aapt-output-com.politedroid_5.txt
include tests/build-tools/28.0.0/aapt-output-com.politedroid_6.txt
include tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt
include tests/build-tools/28.0.1/aapt-output-com.politedroid_3.txt
include tests/build-tools/28.0.1/aapt-output-com.politedroid_4.txt
include tests/build-tools/28.0.1/aapt-output-com.politedroid_5.txt
include tests/build-tools/28.0.1/aapt-output-com.politedroid_6.txt
include tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt
include tests/build-tools/28.0.2/aapt-output-com.politedroid_4.txt
include tests/build-tools/28.0.2/aapt-output-com.politedroid_5.txt
include tests/build-tools/28.0.2/aapt-output-com.politedroid_6.txt
include tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt
include tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt
include tests/build-tools/28.0.3/aapt-output-com.politedroid_3.txt
include tests/build-tools/28.0.3/aapt-output-com.politedroid_4.txt
include tests/build-tools/28.0.3/aapt-output-com.politedroid_5.txt
include tests/build-tools/28.0.3/aapt-output-com.politedroid_6.txt
include tests/build-tools/28.0.3/aapt-output-duplicate.permisssions_9999999.txt
include tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt
include tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt
include tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt
include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt
include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt
include tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt
include tests/build-tools/generate.sh
include tests/check-fdroid-apk
include tests/common.TestCase include tests/common.TestCase
include tests/complete-ci-tests include tests/complete-ci-tests
include tests/config.py include tests/config.py
include tests/description-parsing.py include tests/description-parsing.py
include tests/dummy-keystore.jks
include tests/dump_internal_metadata_format.py include tests/dump_internal_metadata_format.py
include tests/exception.TestCase
include tests/extra/convert_metadata_to_yaml_then_txt.sh include tests/extra/convert_metadata_to_yaml_then_txt.sh
include tests/extra/manual-vmtools-test.py include tests/extra/manual-vmtools-test.py
include tests/getsig/getsig.java include tests/getsig/getsig.java
@ -63,6 +561,8 @@ include tests/import_proxy.py
include tests/import.TestCase include tests/import.TestCase
include tests/index.TestCase include tests/index.TestCase
include tests/install.TestCase include tests/install.TestCase
include tests/IsMD5Disabled.java
include tests/janus.apk
include tests/keystore.jks include tests/keystore.jks
include tests/lint.TestCase include tests/lint.TestCase
include tests/metadata/apk/info.guardianproject.urzip.yaml include tests/metadata/apk/info.guardianproject.urzip.yaml
@ -73,6 +573,7 @@ include tests/metadata/dump/com.politedroid.yaml
include tests/metadata/dump/org.adaway.yaml include tests/metadata/dump/org.adaway.yaml
include tests/metadata/dump/org.smssecure.smssecure.yaml include tests/metadata/dump/org.smssecure.smssecure.yaml
include tests/metadata/dump/org.videolan.vlc.yaml include tests/metadata/dump/org.videolan.vlc.yaml
include tests/metadata/duplicate.permisssions.yml
include tests/metadata/fake.ota.update.txt include tests/metadata/fake.ota.update.txt
include tests/metadata/info.guardianproject.checkey/en-US/description.txt include tests/metadata/info.guardianproject.checkey/en-US/description.txt
include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png
@ -87,18 +588,27 @@ include tests/metadata/info.guardianproject.urzip/en-US/short_description.txt
include tests/metadata/info.guardianproject.urzip/en-US/title.txt include tests/metadata/info.guardianproject.urzip/en-US/title.txt
include tests/metadata/info.guardianproject.urzip/en-US/video.txt include tests/metadata/info.guardianproject.urzip/en-US/video.txt
include tests/metadata/info.guardianproject.urzip.yml include tests/metadata/info.guardianproject.urzip.yml
include tests/metadata/info.zwanenburg.caffeinetile.yml
include tests/metadata/no.min.target.sdk.yml
include tests/metadata/obb.main.oldversion.txt include tests/metadata/obb.main.oldversion.txt
include tests/metadata/obb.mainpatch.current.txt include tests/metadata/obb.mainpatch.current.txt
include tests/metadata/obb.main.twoversions.txt include tests/metadata/obb.main.twoversions.txt
include tests/metadata/org.adaway.json include tests/metadata/org.adaway.json
include tests/metadata/org.fdroid.ci.test.app.txt include tests/metadata/org.fdroid.ci.test.app.txt
include tests/metadata/org.fdroid.fdroid.txt include tests/metadata/org.fdroid.fdroid.txt
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
include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA
include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF
include tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF
include tests/metadata/org.smssecure.smssecure.txt include tests/metadata/org.smssecure.smssecure.txt
include tests/metadata/org.videolan.vlc.yml include tests/metadata/org.videolan.vlc.yml
include tests/metadata/raw.template.txt include tests/metadata/raw.template.txt
include tests/metadata-rewrite-yml/app.with.special.build.params.yml include tests/metadata-rewrite-yml/app.with.special.build.params.yml
include tests/metadata-rewrite-yml/fake.ota.update.yml include tests/metadata-rewrite-yml/fake.ota.update.yml
include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml
include tests/metadata/souch.smsbypass.txt
include tests/metadata.TestCase include tests/metadata.TestCase
include tests/openssl-version-check-test.py include tests/openssl-version-check-test.py
include tests/org.bitbucket.tickytacky.mirrormirror_1.apk include tests/org.bitbucket.tickytacky.mirrormirror_1.apk
@ -106,17 +616,23 @@ include tests/org.bitbucket.tickytacky.mirrormirror_2.apk
include tests/org.bitbucket.tickytacky.mirrormirror_3.apk include tests/org.bitbucket.tickytacky.mirrormirror_3.apk
include tests/org.bitbucket.tickytacky.mirrormirror_4.apk include tests/org.bitbucket.tickytacky.mirrormirror_4.apk
include tests/org.dyndns.fules.ck_20.apk include tests/org.dyndns.fules.ck_20.apk
include tests/publish.TestCase
include tests/repo/categories.txt include tests/repo/categories.txt
include tests/repo/com.example.test.helloworld_1.apk
include tests/repo/com.politedroid_3.apk include tests/repo/com.politedroid_3.apk
include tests/repo/com.politedroid_4.apk include tests/repo/com.politedroid_4.apk
include tests/repo/com.politedroid_5.apk include tests/repo/com.politedroid_5.apk
include tests/repo/com.politedroid_6.apk include tests/repo/com.politedroid_6.apk
include tests/repo/duplicate.permisssions_9999999.apk
include tests/repo/fake.ota.update_1234.zip include tests/repo/fake.ota.update_1234.zip
include tests/repo/index-v1.json
include tests/repo/index.xml include tests/repo/index.xml
include tests/repo/info.zwanenburg.caffeinetile_4.apk
include tests/repo/main.1101613.obb.main.twoversions.obb include tests/repo/main.1101613.obb.main.twoversions.obb
include tests/repo/main.1101615.obb.main.twoversions.obb include tests/repo/main.1101615.obb.main.twoversions.obb
include tests/repo/main.1434483388.obb.main.oldversion.obb include tests/repo/main.1434483388.obb.main.oldversion.obb
include tests/repo/main.1619.obb.mainpatch.current.obb include tests/repo/main.1619.obb.mainpatch.current.obb
include tests/repo/no.min.target.sdk_987.apk
include tests/repo/obb.main.oldversion_1444412523.apk include tests/repo/obb.main.oldversion_1444412523.apk
include tests/repo/obb.mainpatch.current_1619_another-release-key.apk include tests/repo/obb.mainpatch.current_1619_another-release-key.apk
include tests/repo/obb.mainpatch.current_1619.apk include tests/repo/obb.mainpatch.current_1619.apk
@ -154,19 +670,45 @@ include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png
include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot8.png
include tests/repo/patch.1619.obb.mainpatch.current.obb include tests/repo/patch.1619.obb.mainpatch.current.obb
include tests/repo/souch.smsbypass_9.apk
include tests/repo/urzip-*.apk include tests/repo/urzip-*.apk
include tests/repo/v1.v2.sig_1020.apk
include tests/run-tests include tests/run-tests
include tests/scanner.TestCase
include tests/server.TestCase
include tests/signatures.TestCase include tests/signatures.TestCase
include tests/signindex/guardianproject.jar include tests/signindex/guardianproject.jar
include tests/signindex/guardianproject-v1.jar include tests/signindex/guardianproject-v1.jar
include tests/signindex/testy.jar include tests/signindex/testy.jar
include tests/signindex/unsigned.jar include tests/signindex/unsigned.jar
include tests/source-files/at.bitfire.davdroid/build.gradle
include tests/source-files/com.kunzisoft.testcase/build.gradle
include tests/source-files/com.nextcloud.client/build.gradle
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/full_description.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt
include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt
include tests/source-files/eu.siacs.conversations/build.gradle
include tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt
include tests/source-files/fdroid/fdroidclient/AndroidManifest.xml include tests/source-files/fdroid/fdroidclient/AndroidManifest.xml
include tests/source-files/fdroid/fdroidclient/build.gradle include tests/source-files/fdroid/fdroidclient/build.gradle
include tests/source-files/firebase-suspect/app/build.gradle
include tests/source-files/firebase-suspect/build.gradle
include tests/source-files/firebase-whitelisted/app/build.gradle
include tests/source-files/firebase-whitelisted/build.gradle
include tests/source-files/open-keychain/open-keychain/build.gradle include tests/source-files/open-keychain/open-keychain/build.gradle
include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle
include tests/source-files/osmandapp/osmand/build.gradle include tests/source-files/osmandapp/osmand/build.gradle
include tests/source-files/Zillode/syncthing-silk/build.gradle include tests/source-files/Zillode/syncthing-silk/build.gradle
include tests/SpeedoMeterApp.main_1.apk
include tests/stats/known_apks.txt include tests/stats/known_apks.txt
include tests/testcommon.py include tests/testcommon.py
include tests/update.TestCase include tests/update.TestCase
@ -175,3 +717,7 @@ include tests/urzip-badcert.apk
include tests/urzip-badsig.apk include tests/urzip-badsig.apk
include tests/urzip-release.apk include tests/urzip-release.apk
include tests/urzip-release-unsigned.apk include tests/urzip-release-unsigned.apk
include tests/v2.only.sig_2.apk
include tests/valid-package-names/random-package-names
include tests/valid-package-names/RandomPackageNames.java
include tests/valid-package-names/test.py

View file

@ -275,7 +275,7 @@ __complete_mirror() {
__complete_nightly() { __complete_nightly() {
opts="-v -q" opts="-v -q"
lopts="--show-secret-var" lopts="--show-secret-var --archive-older"
__complete_options __complete_options
} }
@ -288,7 +288,7 @@ __complete_stats() {
__complete_deploy() { __complete_deploy() {
opts="-i -v -q" opts="-i -v -q"
lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
--verbose --quiet --no-checksum" --verbose --quiet --no-checksum --no-keep-git-mirror-archive"
__complete_options __complete_options
} }

View file

@ -317,13 +317,17 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
parent.appendChild(el) parent.appendChild(el)
def addElementCheckLocalized(name, app, key, doc, parent, default=''): def addElementCheckLocalized(name, app, key, doc, parent, default=''):
'''Fill in field from metadata or localized block """Fill in field from metadata or localized block
For name/summary/description, they can come only from the app source, For name/summary/description, they can come only from the app source,
or from a dir in fdroiddata. They can be entirely missing from the or from a dir in fdroiddata. They can be entirely missing from the
metadata file if there is localized versions. This will fetch those metadata file if there is localized versions. This will fetch those
from the localized version if its not available in the metadata file. from the localized version if its not available in the metadata file.
'''
Attributes should be alpha-sorted, so they must be added in
alpha- sort order.
"""
el = doc.createElement(name) el = doc.createElement(name)
value = app.get(key) value = app.get(key)
@ -349,21 +353,20 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
doc.appendChild(root) doc.appendChild(root)
repoel = doc.createElement("repo") repoel = doc.createElement("repo")
repoel.setAttribute("icon", os.path.basename(repodict['icon']))
repoel.setAttribute("name", repodict['name'])
if 'maxage' in repodict: if 'maxage' in repodict:
repoel.setAttribute("maxage", str(repodict['maxage'])) repoel.setAttribute("maxage", str(repodict['maxage']))
repoel.setAttribute("icon", os.path.basename(repodict['icon'])) repoel.setAttribute("name", repodict['name'])
pubkey, repo_pubkey_fingerprint = extract_pubkey()
repoel.setAttribute("pubkey", pubkey.decode('utf-8'))
repoel.setAttribute("timestamp", '%d' % repodict['timestamp'].timestamp())
repoel.setAttribute("url", repodict['address']) repoel.setAttribute("url", repodict['address'])
repoel.setAttribute("version", str(repodict['version']))
addElement('description', repodict['description'], doc, repoel) addElement('description', repodict['description'], doc, repoel)
for mirror in repodict.get('mirrors', []): for mirror in repodict.get('mirrors', []):
addElement('mirror', mirror, doc, repoel) addElement('mirror', mirror, doc, repoel)
repoel.setAttribute("version", str(repodict['version']))
repoel.setAttribute("timestamp", '%d' % repodict['timestamp'].timestamp())
pubkey, repo_pubkey_fingerprint = extract_pubkey()
repoel.setAttribute("pubkey", pubkey.decode('utf-8'))
root.appendChild(repoel) root.appendChild(repoel)
for command in ('install', 'uninstall'): for command in ('install', 'uninstall'):
@ -442,6 +445,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
addElementNonEmpty('litecoin', app.Litecoin, doc, apel) addElementNonEmpty('litecoin', app.Litecoin, doc, apel)
addElementNonEmpty('flattr', app.FlattrID, doc, apel) addElementNonEmpty('flattr', app.FlattrID, doc, apel)
addElementNonEmpty('liberapay', app.LiberapayID, doc, apel) addElementNonEmpty('liberapay', app.LiberapayID, doc, apel)
addElementNonEmpty('openCollective', app.OpenCollective, doc, apel)
# These elements actually refer to the current version (i.e. which # These elements actually refer to the current version (i.e. which
# one is recommended. They are historically mis-named, and need # one is recommended. They are historically mis-named, and need
@ -541,16 +545,16 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
for permission in sorted_permissions: for permission in sorted_permissions:
permel = doc.createElement('uses-permission') permel = doc.createElement('uses-permission')
permel.setAttribute('name', permission[0])
if permission[1] is not None: if permission[1] is not None:
permel.setAttribute('maxSdkVersion', '%d' % permission[1]) permel.setAttribute('maxSdkVersion', '%d' % permission[1])
apkel.appendChild(permel) apkel.appendChild(permel)
permel.setAttribute('name', permission[0])
for permission_sdk_23 in sorted(apk['uses-permission-sdk-23']): for permission_sdk_23 in sorted(apk['uses-permission-sdk-23']):
permel = doc.createElement('uses-permission-sdk-23') permel = doc.createElement('uses-permission-sdk-23')
permel.setAttribute('name', permission_sdk_23[0])
if permission_sdk_23[1] is not None: if permission_sdk_23[1] is not None:
permel.setAttribute('maxSdkVersion', '%d' % permission_sdk_23[1]) permel.setAttribute('maxSdkVersion', '%d' % permission_sdk_23[1])
apkel.appendChild(permel) apkel.appendChild(permel)
permel.setAttribute('name', permission_sdk_23[0])
if 'nativecode' in apk: if 'nativecode' in apk:
addElement('nativecode', ','.join(sorted(apk['nativecode'])), doc, apkel) addElement('nativecode', ','.join(sorted(apk['nativecode'])), doc, apkel)
addElementNonEmpty('features', ','.join(sorted(apk['features'])), doc, apkel) addElementNonEmpty('features', ','.join(sorted(apk['features'])), doc, apkel)
@ -717,6 +721,7 @@ def download_repo_index(url_str, etag=None, verify_fingerprint=True, timeout=600
with tempfile.NamedTemporaryFile() as fp: with tempfile.NamedTemporaryFile() as fp:
fp.write(download) fp.write(download)
fp.flush()
index, public_key, public_key_fingerprint = get_index_from_jar(fp.name, fingerprint) index, public_key, public_key_fingerprint = get_index_from_jar(fp.name, fingerprint)
index["repo"]["pubkey"] = hexlify(public_key).decode() index["repo"]["pubkey"] = hexlify(public_key).decode()
index["repo"]["fingerprint"] = public_key_fingerprint index["repo"]["fingerprint"] = public_key_fingerprint

View file

@ -139,9 +139,11 @@ regex_checks = {
], ],
'Donate': http_checks + [ 'Donate': http_checks + [
(re.compile(r'.*flattr\.com'), (re.compile(r'.*flattr\.com'),
_("Flattr donation methods belong in the FlattrID flag")), _("Flattr donation methods belong in the FlattrID: field")),
(re.compile(r'.*liberapay\.com'), (re.compile(r'.*liberapay\.com'),
_("Liberapay donation methods belong in the LiberapayID flag")), _("Liberapay donation methods belong in the Liberapay: field")),
(re.compile(r'.*opencollective\.com'),
_("OpenCollective donation methods belong in the OpenCollective: field")),
], ],
'Changelog': http_checks, 'Changelog': http_checks,
'Author Name': [ 'Author Name': [

View file

@ -36,6 +36,10 @@ from fdroidserver.exception import MetaDataException, FDroidException
srclibs = None srclibs = None
warnings_action = None warnings_action = None
# validates usernames based on a loose collection of rules from GitHub, GitLab,
# Liberapay and issuehunt. This is mostly to block abuse.
VALID_USERNAME_REGEX = re.compile(r'^[a-z\d](?:[a-z\d/._-]){0,38}$', re.IGNORECASE)
def warn_or_exception(value): def warn_or_exception(value):
'''output warning or Exception depending on -W''' '''output warning or Exception depending on -W'''
@ -65,7 +69,9 @@ app_fields = set([
'Changelog', 'Changelog',
'Donate', 'Donate',
'FlattrID', 'FlattrID',
'Liberapay',
'LiberapayID', 'LiberapayID',
'OpenCollective',
'Bitcoin', 'Bitcoin',
'Litecoin', 'Litecoin',
'Name', 'Name',
@ -109,7 +115,9 @@ yaml_app_field_order = [
'Changelog', 'Changelog',
'Donate', 'Donate',
'FlattrID', 'FlattrID',
'Liberapay',
'LiberapayID', 'LiberapayID',
'OpenCollective',
'Bitcoin', 'Bitcoin',
'Litecoin', 'Litecoin',
'\n', '\n',
@ -168,7 +176,9 @@ class App(dict):
self.Changelog = '' self.Changelog = ''
self.Donate = None self.Donate = None
self.FlattrID = None self.FlattrID = None
self.Liberapay = None
self.LiberapayID = None self.LiberapayID = None
self.OpenCollective = None
self.Bitcoin = None self.Bitcoin = None
self.Litecoin = None self.Litecoin = None
self.Name = None self.Name = None
@ -440,10 +450,18 @@ valuetypes = {
r'^[0-9a-z]+$', r'^[0-9a-z]+$',
['FlattrID']), ['FlattrID']),
FieldValidator("Liberapay",
VALID_USERNAME_REGEX,
['Liberapay']),
FieldValidator("Liberapay ID", FieldValidator("Liberapay ID",
r'^[0-9]+$', r'^[0-9]+$',
['LiberapayID']), ['LiberapayID']),
FieldValidator("Open Collective",
r'^[0-9A-Za-z-]+$',
['OpenCollective']),
FieldValidator("HTTP link", FieldValidator("HTTP link",
r'^http[s]?://', r'^http[s]?://',
["WebSite", "SourceCode", "IssueTracker", "Translation", "Changelog", "Donate"]), ["WebSite", "SourceCode", "IssueTracker", "Translation", "Changelog", "Donate"]),
@ -453,11 +471,11 @@ valuetypes = {
["AuthorEmail"]), ["AuthorEmail"]),
FieldValidator("Bitcoin address", FieldValidator("Bitcoin address",
r'^[a-zA-Z0-9]{27,34}$', r'^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$',
["Bitcoin"]), ["Bitcoin"]),
FieldValidator("Litecoin address", FieldValidator("Litecoin address",
r'^L[a-zA-Z0-9]{33}$', r'^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$',
["Litecoin"]), ["Litecoin"]),
FieldValidator("Repo Type", FieldValidator("Repo Type",
@ -1481,6 +1499,7 @@ def write_plaintext_metadata(mf, app, w_comment, w_field, w_build):
w_field_nonempty('Donate') w_field_nonempty('Donate')
w_field_nonempty('FlattrID') w_field_nonempty('FlattrID')
w_field_nonempty('LiberapayID') w_field_nonempty('LiberapayID')
w_field_nonempty('OpenCollective')
w_field_nonempty('Bitcoin') w_field_nonempty('Bitcoin')
w_field_nonempty('Litecoin') w_field_nonempty('Litecoin')
mf.write('\n') mf.write('\n')

View file

@ -39,7 +39,7 @@ from . import common
# hard coded defaults for Android ~/.android/debug.keystore files # hard coded defaults for Android ~/.android/debug.keystore files
# https://developers.google.com/android/guides/client-auth # https://developers.google.com/android/guides/client-auth
KEYSTORE_FILE = os.path.join(os.getenv('HOME'), '.android', 'debug.keystore') KEYSTORE_FILE = os.path.join(os.getenv('HOME'), '.android', 'debug.keystore')
PASSWORD = 'android' PASSWORD = 'android' # nosec B105 standard hardcoded password for debug keystores
KEY_ALIAS = 'androiddebugkey' KEY_ALIAS = 'androiddebugkey'
DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US' DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US'
@ -102,6 +102,8 @@ def main():
help=_('The file to be included in the repo (path or glob)')) help=_('The file to be included in the repo (path or glob)'))
parser.add_argument("--no-checksum", action="store_true", default=False, parser.add_argument("--no-checksum", action="store_true", default=False,
help=_("Don't use rsync checksums")) help=_("Don't use rsync checksums"))
parser.add_argument("--archive-older", type=int, default=20,
help=_("Set maximum releases in repo before older ones are archived"))
# TODO add --with-btlog # TODO add --with-btlog
options = parser.parse_args() options = parser.parse_args()
@ -230,9 +232,12 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
config += "repo_name = '%s'\n" % repo_git_base config += "repo_name = '%s'\n" % repo_git_base
config += "repo_url = '%s'\n" % repo_url config += "repo_url = '%s'\n" % repo_url
config += "repo_icon = 'icon.png'\n" config += "repo_icon = 'icon.png'\n"
config += "repo_description = 'Nightly builds from %s'\n" % git_user_email
config += "archive_name = '%s'\n" % (repo_git_base + ' archive') config += "archive_name = '%s'\n" % (repo_git_base + ' archive')
config += "archive_url = '%s'\n" % (repo_base + '/archive') config += "archive_url = '%s'\n" % (repo_base + '/archive')
config += "archive_icon = 'icon.png'\n" config += "archive_icon = 'icon.png'\n"
config += "archive_description = 'Old nightly builds that have been archived.'\n"
config += "archive_older = %i\n" % options.archive_older
config += "servergitmirrors = '%s'\n" % servergitmirror config += "servergitmirrors = '%s'\n" % servergitmirror
config += "keystore = '%s'\n" % KEYSTORE_FILE config += "keystore = '%s'\n" % KEYSTORE_FILE
config += "repo_keyalias = '%s'\n" % KEY_ALIAS config += "repo_keyalias = '%s'\n" % KEY_ALIAS
@ -293,7 +298,8 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
if not options.no_deploy: if not options.no_deploy:
try: try:
subprocess.check_call(['fdroid', 'server', 'update', '--verbose'], cwd=repo_basedir) cmd = ['fdroid', 'server', 'update', '--verbose', '--no-keep-git-mirror-archive']
subprocess.check_call(cmd, cwd=repo_basedir)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
logging.error(_('cannot publish update, did you set the deploy key?') logging.error(_('cannot publish update, did you set the deploy key?')
+ '\n' + deploy_key_url) + '\n' + deploy_key_url)

View file

@ -280,7 +280,7 @@ def main():
signaturefile, signedfile, manifest = signingfiles signaturefile, signedfile, manifest = signingfiles
with open(signaturefile, 'rb') as f: with open(signaturefile, 'rb') as f:
devfp = common.signer_fingerprint_short(common.get_signature(f.read())) devfp = common.signer_fingerprint_short(common.get_certificate(f.read()))
devsigned = '{}_{}_{}.apk'.format(appid, vercode, devfp) devsigned = '{}_{}_{}.apk'.format(appid, vercode, devfp)
devsignedtmp = os.path.join(tmp_dir, devsigned) devsignedtmp = os.path.join(tmp_dir, devsigned)
shutil.copy(apkfile, devsignedtmp) shutil.copy(apkfile, devsignedtmp)

View file

@ -109,6 +109,7 @@ def scan_source(build_dir, build=metadata.Build()):
's3.amazonaws.com/repo.commonsware.com', # CommonsWare 's3.amazonaws.com/repo.commonsware.com', # CommonsWare
'plugins.gradle.org/m2', # Gradle plugin repo 'plugins.gradle.org/m2', # Gradle plugin repo
'maven.google.com', # Google Maven Repo, https://developer.android.com/studio/build/dependencies.html#google-maven 'maven.google.com', # Google Maven Repo, https://developer.android.com/studio/build/dependencies.html#google-maven
'file:///usr/share/maven-repo', # local repo on Debian installs
] ]
] ]

View file

@ -355,6 +355,10 @@ def update_servergitmirrors(servergitmirrors, repo_section):
if os.path.isdir(dotgit) and _get_size(git_mirror_path) > 1000000000: if os.path.isdir(dotgit) and _get_size(git_mirror_path) > 1000000000:
logging.warning('Deleting git-mirror history, repo is too big (1 gig max)') logging.warning('Deleting git-mirror history, repo is too big (1 gig max)')
shutil.rmtree(dotgit) shutil.rmtree(dotgit)
if options.no_keep_git_mirror_archive and _get_size(git_mirror_path) > 1000000000:
logging.warning('Deleting archive, repo is too big (1 gig max)')
archive_path = os.path.join(git_mirror_path, 'fdroid', 'archive')
shutil.rmtree(archive_path, ignore_errors=True)
# rsync is very particular about trailing slashes # rsync is very particular about trailing slashes
common.local_rsync(options, common.local_rsync(options,
@ -626,6 +630,8 @@ def main():
help=_("Specify a local folder to sync the repo to")) help=_("Specify a local folder to sync the repo to"))
parser.add_argument("--no-checksum", action="store_true", default=False, parser.add_argument("--no-checksum", action="store_true", default=False,
help=_("Don't use rsync checksums")) help=_("Don't use rsync checksums"))
parser.add_argument("--no-keep-git-mirror-archive", action="store_true", default=False,
help=_("If a git mirror gets to big, allow the archive to be deleted"))
options = parser.parse_args() options = parser.parse_args()
config = common.read_config(options) config = common.read_config(options)

View file

@ -53,10 +53,11 @@ fi
# * E501: line too long (82 > 79 characters) # * E501: line too long (82 > 79 characters)
# - Recommended for readability but not enforced # - Recommended for readability but not enforced
# - Some lines are awkward to wrap around a char limit # - Some lines are awkward to wrap around a char limit
# * E741: ambiguous variable name 'l'
# * W503: line break before binary operator # * W503: line break before binary operator
# - Quite pedantic # - Quite pedantic
PEP8_IGNORE="E123,E501,W503" PEP8_IGNORE="E123,E501,E741,W503"
err() { err() {
echo >&2 ERROR: "$@" echo >&2 ERROR: "$@"

View file

@ -1,8 +1,8 @@
# uploading here requires Python 3.5.3+ or setuptools 27+, # uploading here requires Python 3.5.3+ or setuptools 27+,
# use instead: twine upload dist/fdroidserver*.tar.gz* # use instead: twine upload --sign dist/fdroidserver*.tar.gz
[aliases] [aliases]
release = versioncheck compile_catalog register sdist upload --sign release = versioncheck compile_catalog sdist
# All this below is for Babel config. Ideally we would only use # All this below is for Babel config. Ideally we would only use
# Babel, but it is still missing some key features that gettext gives # Babel, but it is still missing some key features that gettext gives

View file

@ -25,7 +25,7 @@ class VersionCheckCommand(Command):
print('ERROR: Release version mismatch! setup.py (%s) does not match git (%s)' print('ERROR: Release version mismatch! setup.py (%s) does not match git (%s)'
% (version, version_git)) % (version, version_git))
sys.exit(1) sys.exit(1)
print('Upload using: twine upload dist/fdroidserver*.tar.gz*') print('Upload using: twine upload --sign dist/fdroidserver-%s.tar.gz' % version)
def get_data_files(): def get_data_files():
@ -49,10 +49,14 @@ def get_data_files():
return data_files return data_files
with open("README.md", "r") as fh:
long_description = fh.read()
setup(name='fdroidserver', setup(name='fdroidserver',
version='1.1.1', version='1.1.9',
description='F-Droid Server Tools', description='F-Droid Server Tools',
long_description='README.md', long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
author='The F-Droid Project', author='The F-Droid Project',
author_email='team@f-droid.org', author_email='team@f-droid.org',
@ -80,7 +84,7 @@ setup(name='fdroidserver',
'python-vagrant', 'python-vagrant',
'PyYAML', 'PyYAML',
'qrcode', 'qrcode',
'ruamel.yaml >= 0.13', 'ruamel.yaml >= 0.15',
'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0', 'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0',
'docker-py >= 1.9, < 2.0', 'docker-py >= 1.9, < 2.0',
], ],

View file

@ -340,6 +340,12 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.config = config fdroidserver.common.config = config
self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk')) self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
if 'apksigner' in fdroidserver.common.config: # apksigner considers MD5 signatures valid
self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk'))
self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk'))
self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk'))
self.assertTrue(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk'))
else:
self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk'))
self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk'))
self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk')) self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk'))
@ -563,6 +569,7 @@ class CommonTest(unittest.TestCase):
def test_sign_apk(self): def test_sign_apk(self):
try: try:
fdroidserver.common.find_sdk_tools_cmd('aapt')
fdroidserver.common.find_sdk_tools_cmd('zipalign') fdroidserver.common.find_sdk_tools_cmd('zipalign')
except fdroidserver.exception.FDroidException: except fdroidserver.exception.FDroidException:
print('\n\nSKIPPING test_sign_apk, zipalign is not installed!\n') print('\n\nSKIPPING test_sign_apk, zipalign is not installed!\n')

View file

@ -39,6 +39,64 @@ class MetadataTest(unittest.TestCase):
os.makedirs(self.tmpdir) os.makedirs(self.tmpdir)
os.chdir(self.basedir) os.chdir(self.basedir)
def test_FieldValidator_BitcoinAddress(self):
validator = None
for vali in fdroidserver.metadata.valuetypes:
if vali.name == 'Bitcoin address':
validator = vali
break
self.assertIsNotNone(validator, "could not find 'Bitcoin address' validator")
fdroidserver.metadata.warnings_action = 'error'
# some valid addresses (P2PKH, P2SH, Bech32)
self.assertIsNone(validator.check('1BrrrrErsrWetrTrnrrrrm4GFg7xJaNVN2', 'fake.app.id'))
self.assertIsNone(validator.check('3JrrrrWrEZr3rNrrvrecrnyirrnqRhWNLy', 'fake.app.id'))
self.assertIsNone(validator.check('bc1qar0srrr7xrkvr5lr43lrdnwrre5rgtrzrf5rrq', 'fake.app.id'))
# some invalid addresses
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'21BvMrSYsrWrtrrlL5A10mlGFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'5Hrgr3ur5rGLrfKrrrrrrHSrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'L1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id')
def test_FieldValidator_LitecoinAddress(self):
validator = None
for vali in fdroidserver.metadata.valuetypes:
if vali.name == 'Litecoin address':
validator = vali
break
self.assertIsNotNone(validator, "could not find 'Litecoin address' validator")
fdroidserver.metadata.warnings_action = 'error'
# some valid addresses (L, M, 3)
self.assertIsNone(validator.check('LgeGrrrrJAxyXprrPrrBrrX5Qrrrrrrrrd', 'fake.app.id'))
self.assertIsNone(validator.check('MrrrrrrrJAxyXpanPtrrRAX5QHxvUJo8id', 'fake.app.id'))
self.assertIsNone(validator.check('3rereVr9rAryrranrrrrrAXrrHx', 'fake.app.id'))
# some invalid addresses (various special use/testnet addresses, invalid chars)
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'21BvMrSYsrWrtrrrn5Au4l4GFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'5Hrgr3ur5rGLrfKrrrrrr1SrqJrroGrrzrQrrrrrrLNrsrDrrrA', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'92rr46rUrgTrrromrVrirW6r1rrrdrerrdbJrrrhrCsYrrrrrrc', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'K1BvMrSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'L0000rSYsrWrtrrrn5Au4m4GFr7rrarrN2', 'fake.app.id')
self.assertRaises(fdroidserver.exception.MetaDataException, validator.check,
'tb1qw5r8drrejxrrg4y5rrrrrraryrrrrwrkxrjrsx', 'fake.app.id')
def test_read_metadata(self): def test_read_metadata(self):
def _build_yaml_representer(dumper, data): def _build_yaml_representer(dumper, data):
@ -54,6 +112,7 @@ class MetadataTest(unittest.TestCase):
config['ndk_paths'] = dict() config['ndk_paths'] = dict()
config['accepted_formats'] = ['json', 'txt', 'yml'] config['accepted_formats'] = ['json', 'txt', 'yml']
fdroidserver.common.config = config fdroidserver.common.config = config
fdroidserver.metadata.warnings_action = None
apps = fdroidserver.metadata.read_metadata(xref=True) apps = fdroidserver.metadata.read_metadata(xref=True)
for appid in ('org.smssecure.smssecure', 'org.adaway', for appid in ('org.smssecure.smssecure', 'org.adaway',
@ -73,6 +132,7 @@ class MetadataTest(unittest.TestCase):
def test_rewrite_yaml_fakeotaupdate(self): def test_rewrite_yaml_fakeotaupdate(self):
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir) testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']} fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
fdroidserver.metadata.warnings_action = None
# rewrite metadata # rewrite metadata
allapps = fdroidserver.metadata.read_metadata(xref=True) allapps = fdroidserver.metadata.read_metadata(xref=True)

View file

@ -17,12 +17,14 @@ Disabled: null
Donate: null Donate: null
FlattrID: null FlattrID: null
IssueTracker: https://github.com/miguelvps/PoliteDroid/issues IssueTracker: https://github.com/miguelvps/PoliteDroid/issues
Liberapay: null
LiberapayID: null LiberapayID: null
License: GPL-3.0-only License: GPL-3.0-only
Litecoin: null Litecoin: null
MaintainerNotes: '' MaintainerNotes: ''
Name: null Name: null
NoSourceSince: '1.5' NoSourceSince: '1.5'
OpenCollective: null
Provides: null Provides: null
Repo: https://github.com/miguelvps/PoliteDroid.git Repo: https://github.com/miguelvps/PoliteDroid.git
RepoType: git RepoType: git

View file

@ -40,12 +40,14 @@ Disabled: null
Donate: http://sufficientlysecure.org/index.php/adaway Donate: http://sufficientlysecure.org/index.php/adaway
FlattrID: '369138' FlattrID: '369138'
IssueTracker: https://github.com/dschuermann/ad-away/issues IssueTracker: https://github.com/dschuermann/ad-away/issues
LiberapayID: null Liberapay: null
LiberapayID: '1234567890'
License: GPL-3.0-only License: GPL-3.0-only
Litecoin: null Litecoin: null
MaintainerNotes: '' MaintainerNotes: ''
Name: null Name: null
NoSourceSince: '' NoSourceSince: ''
OpenCollective: null
Provides: org.sufficientlysecure.adaway Provides: org.sufficientlysecure.adaway
Repo: https://github.com/dschuermann/ad-away.git Repo: https://github.com/dschuermann/ad-away.git
RepoType: git RepoType: git

View file

@ -37,12 +37,14 @@ Disabled: null
Donate: null Donate: null
FlattrID: null FlattrID: null
IssueTracker: https://github.com/SMSSecure/SMSSecure/issues IssueTracker: https://github.com/SMSSecure/SMSSecure/issues
Liberapay: null
LiberapayID: null LiberapayID: null
License: GPL-3.0-only License: GPL-3.0-only
Litecoin: null Litecoin: null
MaintainerNotes: '' MaintainerNotes: ''
Name: null Name: null
NoSourceSince: '' NoSourceSince: ''
OpenCollective: null
Provides: null Provides: null
Repo: https://github.com/SMSSecure/SMSSecure Repo: https://github.com/SMSSecure/SMSSecure
RepoType: git RepoType: git

View file

@ -24,6 +24,7 @@ Disabled: null
Donate: http://www.videolan.org/contribute.html#money Donate: http://www.videolan.org/contribute.html#money
FlattrID: null FlattrID: null
IssueTracker: http://www.videolan.org/support/index.html#bugs IssueTracker: http://www.videolan.org/support/index.html#bugs
Liberapay: null
LiberapayID: null LiberapayID: null
License: GPL-3.0-only License: GPL-3.0-only
Litecoin: null Litecoin: null
@ -45,6 +46,7 @@ MaintainerNotes: 'Instructions and dependencies here: http://wiki.videolan.org/A
' '
Name: null Name: null
NoSourceSince: '' NoSourceSince: ''
OpenCollective: null
Provides: null Provides: null
Repo: git://git.videolan.org/vlc-ports/android.git Repo: git://git.videolan.org/vlc-ports/android.git
RepoType: git RepoType: git

View file

@ -5,6 +5,7 @@ Source Code:https://github.com/guardianproject/checkey
Issue Tracker:https://dev.guardianproject.info/projects/checkey/issues Issue Tracker:https://dev.guardianproject.info/projects/checkey/issues
Translation:https://www.transifex.com/otf/checkey Translation:https://www.transifex.com/otf/checkey
Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk
Liberapay:GuardianProject
Auto Name:Checkey Auto Name:Checkey

View file

@ -1,6 +1,8 @@
AutoName: Urzip本地应用的信息 AutoName: Urzip本地应用的信息
AutoUpdateMode: None AutoUpdateMode: None
Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk
LiberapayID: '9999999'
OpenCollective: f-droid-just-testing
Categories: Categories:
- Development - Development
- GuardianProject - GuardianProject

View file

@ -2,6 +2,7 @@ Categories:Development
License:GPL-3.0-only License:GPL-3.0-only
Source Code:https://github.com/eighthave/urzip Source Code:https://github.com/eighthave/urzip
Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk Bitcoin:1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk
Liberapay:12334
Auto Name:OBB Main Old Version Auto Name:OBB Main Old Version

View file

@ -22,6 +22,7 @@
"Donate": "http://sufficientlysecure.org/index.php/adaway", "Donate": "http://sufficientlysecure.org/index.php/adaway",
"FlattrID": "369138", "FlattrID": "369138",
"IssueTracker": "https://github.com/dschuermann/ad-away/issues", "IssueTracker": "https://github.com/dschuermann/ad-away/issues",
"LiberapayID": "1234567890",
"License": "GPL-3.0-only", "License": "GPL-3.0-only",
"Provides": "org.sufficientlysecure.adaway", "Provides": "org.sufficientlysecure.adaway",
"Repo": "https://github.com/dschuermann/ad-away.git", "Repo": "https://github.com/dschuermann/ad-away.git",

View file

@ -104,6 +104,7 @@
"Development" "Development"
], ],
"suggestedVersionCode": "99999999", "suggestedVersionCode": "99999999",
"liberapay": "12334",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"name": "OBB Main Old Version", "name": "OBB Main Old Version",
"sourceCode": "https://github.com/eighthave/urzip", "sourceCode": "https://github.com/eighthave/urzip",
@ -184,8 +185,10 @@
"suggestedVersionCode": "2147483647", "suggestedVersionCode": "2147483647",
"description": "<p>It\u2019s Urzip \u662f\u4e00\u4e2a\u83b7\u5f97\u5df2\u5b89\u88c5 APK \u76f8\u5173\u4fe1\u606f\u7684\u5b9e\u7528\u5de5\u5177\u3002\u5b83\u4ece\u60a8\u7684\u8bbe\u5907\u4e0a\u5df2\u5b89\u88c5\u7684\u6240\u6709\u5e94\u7528\u5f00\u59cb\uff0c\u4e00\u952e\u89e6\u6478\u5373\u53ef\u663e\u793a APK \u7684\u6307\u7eb9\uff0c\u5e76\u4e14\u63d0\u4f9b\u5230\u8fbe virustotal.com \u548c androidobservatory.org \u7684\u5feb\u6377\u94fe\u63a5\uff0c\u8ba9\u60a8\u65b9\u4fbf\u5730\u4e86\u89e3\u7279\u5b9a APK \u7684\u6863\u6848\u3002\u5b83\u8fd8\u53ef\u4ee5\u8ba9\u60a8\u5bfc\u51fa\u7b7e\u540d\u8bc1\u4e66\u548c\u751f\u6210 ApkSignaturePin Pin \u6587\u4ef6\u4f9b TrustedIntents \u5e93\u4f7f\u7528\u3002</p><p>\u2605 Urzip \u652f\u6301\u4e0b\u5217\u8bed\u8a00\uff1a Deutsch, English, espa\u00f1ol, suomi, \u65e5\u672c\u8a9e, \ud55c\uad6d\uc5b4, Norsk, portugu\u00eas (Portugal), \u0420\u0443\u0441\u0441\u043a\u0438\u0439, Sloven\u0161\u010dina, T\u00fcrk\u00e7e \u6ca1\u770b\u5230\u60a8\u7684\u8bed\u8a00\uff1f\u5e2e\u5fd9\u7ffb\u8bd1\u672c\u5e94\u7528\u5427\uff1a https://www.transifex.com/projects/p/urzip</p><p>\u2605 \u81f4\u7528\u6237\uff1a\u6211\u4eec\u8fd8\u7f3a\u5c11\u4f60\u559c\u6b22\u7684\u529f\u80fd\uff1f\u53d1\u73b0\u4e86\u4e00\u4e2a bug\uff1f\u8bf7\u544a\u8bc9\u6211\u4eec\uff01\u6211\u4eec\u4e50\u4e8e\u542c\u53d6\u60a8\u7684\u610f\u89c1\u3002\u8bf7\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u81f3: support@guardianproject.info \u6216\u8005\u52a0\u5165\u6211\u4eec\u7684\u804a\u5929\u5ba4 https://guardianproject.info/contact</p>", "description": "<p>It\u2019s Urzip \u662f\u4e00\u4e2a\u83b7\u5f97\u5df2\u5b89\u88c5 APK \u76f8\u5173\u4fe1\u606f\u7684\u5b9e\u7528\u5de5\u5177\u3002\u5b83\u4ece\u60a8\u7684\u8bbe\u5907\u4e0a\u5df2\u5b89\u88c5\u7684\u6240\u6709\u5e94\u7528\u5f00\u59cb\uff0c\u4e00\u952e\u89e6\u6478\u5373\u53ef\u663e\u793a APK \u7684\u6307\u7eb9\uff0c\u5e76\u4e14\u63d0\u4f9b\u5230\u8fbe virustotal.com \u548c androidobservatory.org \u7684\u5feb\u6377\u94fe\u63a5\uff0c\u8ba9\u60a8\u65b9\u4fbf\u5730\u4e86\u89e3\u7279\u5b9a APK \u7684\u6863\u6848\u3002\u5b83\u8fd8\u53ef\u4ee5\u8ba9\u60a8\u5bfc\u51fa\u7b7e\u540d\u8bc1\u4e66\u548c\u751f\u6210 ApkSignaturePin Pin \u6587\u4ef6\u4f9b TrustedIntents \u5e93\u4f7f\u7528\u3002</p><p>\u2605 Urzip \u652f\u6301\u4e0b\u5217\u8bed\u8a00\uff1a Deutsch, English, espa\u00f1ol, suomi, \u65e5\u672c\u8a9e, \ud55c\uad6d\uc5b4, Norsk, portugu\u00eas (Portugal), \u0420\u0443\u0441\u0441\u043a\u0438\u0439, Sloven\u0161\u010dina, T\u00fcrk\u00e7e \u6ca1\u770b\u5230\u60a8\u7684\u8bed\u8a00\uff1f\u5e2e\u5fd9\u7ffb\u8bd1\u672c\u5e94\u7528\u5427\uff1a https://www.transifex.com/projects/p/urzip</p><p>\u2605 \u81f4\u7528\u6237\uff1a\u6211\u4eec\u8fd8\u7f3a\u5c11\u4f60\u559c\u6b22\u7684\u529f\u80fd\uff1f\u53d1\u73b0\u4e86\u4e00\u4e2a bug\uff1f\u8bf7\u544a\u8bc9\u6211\u4eec\uff01\u6211\u4eec\u4e50\u4e8e\u542c\u53d6\u60a8\u7684\u610f\u89c1\u3002\u8bf7\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u81f3: support@guardianproject.info \u6216\u8005\u52a0\u5165\u6211\u4eec\u7684\u804a\u5929\u5ba4 https://guardianproject.info/contact</p>",
"issueTracker": "https://dev.guardianproject.info/projects/urzip/issues", "issueTracker": "https://dev.guardianproject.info/projects/urzip/issues",
"liberapayID": "9999999",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"name": "urzip-\u03c0\u00c7\u00c7\u03c0\u00c7\u00c7\u73b0\u4ee3\u6c49\u8bed\u901a\u7528\u5b57-\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438-\u0639\u0631\u0628\u064a1234", "name": "urzip-\u03c0\u00c7\u00c7\u03c0\u00c7\u00c7\u73b0\u4ee3\u6c49\u8bed\u901a\u7528\u5b57-\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438-\u0639\u0631\u0628\u064a1234",
"openCollective": "f-droid-just-testing",
"sourceCode": "https://github.com/guardianproject/urzip", "sourceCode": "https://github.com/guardianproject/urzip",
"summary": "\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\uff0c\u83b7\u53d6\u5df2\u5b89\u88c5\u5728\u60a8\u7684\u8bbe\u5907\u4e0a\u7684\u5e94\u7528\u7684\u6709\u5173\u4fe1\u606f", "summary": "\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\uff0c\u83b7\u53d6\u5df2\u5b89\u88c5\u5728\u60a8\u7684\u8bbe\u5907\u4e0a\u7684\u5e94\u7528\u7684\u6709\u5173\u4fe1\u606f",
"webSite": "https://dev.guardianproject.info/projects/urzip", "webSite": "https://dev.guardianproject.info/projects/urzip",

View file

@ -357,6 +357,8 @@
<source>https://github.com/guardianproject/urzip</source> <source>https://github.com/guardianproject/urzip</source>
<tracker>https://dev.guardianproject.info/projects/urzip/issues</tracker> <tracker>https://dev.guardianproject.info/projects/urzip/issues</tracker>
<bitcoin>1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk</bitcoin> <bitcoin>1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk</bitcoin>
<liberapay>9999999</liberapay>
<openCollective>f-droid-just-testing</openCollective>
<marketversion></marketversion> <marketversion></marketversion>
<marketvercode>2147483647</marketvercode> <marketvercode>2147483647</marketvercode>
<package> <package>

View file

@ -128,7 +128,7 @@ set -x # show each command as it is executed
echo_header "run commit hooks" echo_header "run commit hooks"
cd $WORKSPACE cd $WORKSPACE
./hooks/pre-commit test -x ./hooks/pre-commit && ./hooks/pre-commit
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
@ -305,12 +305,17 @@ cp $WORKSPACE/tests/urzip.apk \
$sed -i.tmp 's,archive_older = [0-9],archive_older = 3,' config.py $sed -i.tmp 's,archive_older = [0-9],archive_older = 3,' config.py
$fdroid update --pretty --nosign $fdroid update --pretty --nosign
if which apksigner; then
test `grep '<package>' archive/index.xml | wc -l` -eq 2
test `grep '<package>' repo/index.xml | wc -l` -eq 10
else
echo "This will fail when jarsigner allows MD5 for APK signatures" echo "This will fail when jarsigner allows MD5 for APK signatures"
test `grep '<package>' archive/index.xml | wc -l` -eq 5 test `grep '<package>' archive/index.xml | wc -l` -eq 5
test `grep '<package>' repo/index.xml | wc -l` -eq 7 test `grep '<package>' repo/index.xml | wc -l` -eq 7
fi
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
if ! which apksigner; then
echo_header 'test per-app "Archive Policy"' echo_header 'test per-app "Archive Policy"'
REPOROOT=`create_test_dir` REPOROOT=`create_test_dir`
@ -378,7 +383,7 @@ test -e archive/com.politedroid_4.apk
test -e archive/com.politedroid_5.apk test -e archive/com.politedroid_5.apk
! test -e archive/com.politedroid_6.apk ! test -e archive/com.politedroid_6.apk
test -e repo/com.politedroid_6.apk test -e repo/com.politedroid_6.apk
fi
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
@ -505,6 +510,7 @@ test -e repo/org.bitbucket.tickytacky.mirrormirror_3.apk
test -e repo/org.bitbucket.tickytacky.mirrormirror_4.apk test -e repo/org.bitbucket.tickytacky.mirrormirror_4.apk
test -e archive/urzip-badsig.apk test -e archive/urzip-badsig.apk
if ! which apksigner; then
$sed -i.tmp '/allow_disabled_algorithms/d' config.py $sed -i.tmp '/allow_disabled_algorithms/d' config.py
$fdroid update --pretty --nosign $fdroid update --pretty --nosign
test `grep '<package>' archive/index.xml | wc -l` -eq 5 test `grep '<package>' archive/index.xml | wc -l` -eq 5
@ -528,6 +534,7 @@ test -e archive/urzip-badsig.apk
test -e repo/com.politedroid_4.apk test -e repo/com.politedroid_4.apk
test -e repo/com.politedroid_5.apk test -e repo/com.politedroid_5.apk
test -e repo/com.politedroid_6.apk test -e repo/com.politedroid_6.apk
fi
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
@ -636,6 +643,8 @@ $fdroid install || true
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
# only run this test if running from a git repo, not all files are in the tarball
if [ -e .git/config ]; then
echo_header "create a source tarball" echo_header "create a source tarball"
cd $WORKSPACE cd $WORKSPACE
@ -648,7 +657,7 @@ cd $REPOROOT
./fdroidserver-*/fdroid init ./fdroidserver-*/fdroid init
copy_apks_into_repo $REPOROOT copy_apks_into_repo $REPOROOT
./fdroidserver-*/fdroid update --create-metadata --verbose ./fdroidserver-*/fdroid update --create-metadata --verbose
fi
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
echo_header "test config checks of local_copy_dir" echo_header "test config checks of local_copy_dir"
@ -1104,6 +1113,35 @@ if have_git_2_3; then
fi fi
#------------------------------------------------------------------------------#
echo_header 'test extracting and publishing with developer signature'
REPOROOT=`create_test_dir`
cd $REPOROOT
fdroid_init_with_prebuilt_keystore
echo "accepted_formats = ['txt']" >> config.py
echo 'keydname = "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US"' >> config.py
test -d metadata || mkdir metadata
cp $WORKSPACE/tests/metadata/com.politedroid.txt metadata/
test -d repo || mkdir repo
test -d unsigned || mkdir unsigned
cp $WORKSPACE/tests/repo/com.politedroid_6.apk unsigned/
$fdroid signatures unsigned/com.politedroid_6.apk
test -d metadata/com.politedroid/signatures/6
test -f metadata/com.politedroid/signatures/6/MANIFEST.MF
test -f metadata/com.politedroid/signatures/6/RELEASE.RSA
test -f metadata/com.politedroid/signatures/6/RELEASE.SF
! test -f repo/com.politedroid_6.apk
$fdroid publish
test -f repo/com.politedroid_6.apk
if which jarsigner; then
jarsigner -verify repo/com.politedroid_6.apk
fi
if which apksigner; then
apksigner verify repo/com.politedroid_6.apk
fi
#------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
# remove this to prevent git conflicts and complaining # remove this to prevent git conflicts and complaining

View file

@ -408,6 +408,7 @@ class UpdateTest(unittest.TestCase):
print('USE_ANDROGUARD', use_androguard) print('USE_ANDROGUARD', use_androguard)
try:
apksigner = fdroidserver.common.find_sdk_tools_cmd('apksigner') apksigner = fdroidserver.common.find_sdk_tools_cmd('apksigner')
if use_androguard and apksigner: # v2 parsing needs both if use_androguard and apksigner: # v2 parsing needs both
config['apksigner'] = apksigner config['apksigner'] = apksigner
@ -415,6 +416,8 @@ class UpdateTest(unittest.TestCase):
self.assertIsNone(apk_info.get('maxSdkVersion')) self.assertIsNone(apk_info.get('maxSdkVersion'))
self.assertEqual(apk_info.get('versionName'), 'v2-only') self.assertEqual(apk_info.get('versionName'), 'v2-only')
self.assertEqual(apk_info.get('versionCode'), 2) self.assertEqual(apk_info.get('versionCode'), 2)
except fdroidserver.exception.FDroidException:
print('WARNING: skipping v2-only test since apksigner cannot be found')
apk_info = fdroidserver.update.scan_apk('repo/v1.v2.sig_1020.apk') apk_info = fdroidserver.update.scan_apk('repo/v1.v2.sig_1020.apk')
self.assertIsNone(apk_info.get('maxSdkVersion')) self.assertIsNone(apk_info.get('maxSdkVersion'))
@ -622,6 +625,10 @@ class UpdateTest(unittest.TestCase):
self.assertFalse(os.path.exists(os.path.join('archive', apkName))) self.assertFalse(os.path.exists(os.path.join('archive', apkName)))
self.assertTrue(os.path.exists(os.path.join('repo', apkName))) self.assertTrue(os.path.exists(os.path.join('repo', apkName)))
if os.path.exists('/usr/bin/apksigner') or 'apksigner' in config:
print('SKIPPING: apksigner installed and it allows MD5 signatures')
return
javac = config['jarsigner'].replace('jarsigner', 'javac') javac = config['jarsigner'].replace('jarsigner', 'javac')
v = subprocess.check_output([javac, '-version'], stderr=subprocess.STDOUT)[6:-1].decode('utf-8') v = subprocess.check_output([javac, '-version'], stderr=subprocess.STDOUT)[6:-1].decode('utf-8')
if LooseVersion(v) < LooseVersion('1.8.0_132'): if LooseVersion(v) < LooseVersion('1.8.0_132'):