diff --git a/.gitignore b/.gitignore
index 57da9fb8..d0955dac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ README.rst
tmp/
/tests/repo/icons*
/tests/repo/latestapps.dat
+/tests/repo/status
# files used in manual testing
/config.py
diff --git a/fdroidserver/index.py b/fdroidserver/index.py
index c19b6277..af5c3522 100644
--- a/fdroidserver/index.py
+++ b/fdroidserver/index.py
@@ -21,7 +21,6 @@
# along with this program. If not, see .
import collections
-import copy
import json
import logging
import os
@@ -41,31 +40,32 @@ from . import metadata
from . import net
from . import signindex
from fdroidserver.common import FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints
-from fdroidserver.exception import FDroidException, VerificationException, MetaDataException
+from fdroidserver.exception import FDroidException, VerificationException
-def make(apps, sortedids, apks, repodir, archive):
+def make(apps, apks, repodir, archive):
"""Generate the repo index files.
This requires properly initialized options and config objects.
- :param apps: fully populated apps list
- :param sortedids: app package IDs, sorted
- :param apks: full populated apks list
+ :param apps: OrderedDict of apps to go into the index, each app should have
+ at least one associated apk
+ :param apks: list of apks to go into the index
:param repodir: the repo directory
:param archive: True if this is the archive repo, False if it's the
main one.
"""
from fdroidserver.update import METADATA_VERSION
- def _resolve_description_link(appid):
- if appid in apps:
- return "fdroid.app:" + appid, apps[appid].Name
- raise MetaDataException("Cannot resolve app id " + appid)
-
if not common.options.nosign:
common.assert_config_keystore(common.config)
+ # Historically the index has been sorted by App Name, so we enforce this ordering here
+ sortedids = sorted(apps, key=lambda appid: apps[appid].Name.upper())
+ sortedapps = collections.OrderedDict()
+ for appid in sortedids:
+ sortedapps[appid] = apps[appid]
+
repodict = collections.OrderedDict()
repodict['timestamp'] = datetime.utcnow().replace(tzinfo=timezone.utc)
repodict['version'] = METADATA_VERSION
@@ -106,21 +106,6 @@ def make(apps, sortedids, apks, repodir, archive):
if mirrors:
repodict['mirrors'] = mirrors
- appsWithPackages = collections.OrderedDict()
- for packageName in sortedids:
- app = apps[packageName]
- if app['Disabled']:
- continue
-
- # only include apps with packages
- for apk in apks:
- if apk['packageName'] == packageName:
- newapp = copy.copy(app) # update wiki needs unmodified description
- newapp['Description'] = metadata.description_html(app['Description'],
- _resolve_description_link)
- appsWithPackages[packageName] = newapp
- break
-
requestsdict = collections.OrderedDict()
for command in ('install', 'uninstall'):
packageNames = []
@@ -136,9 +121,9 @@ def make(apps, sortedids, apks, repodir, archive):
fdroid_signing_key_fingerprints = load_stats_fdroid_signing_key_fingerprints()
- make_v0(appsWithPackages, apks, repodir, repodict, requestsdict,
+ make_v0(sortedapps, apks, repodir, repodict, requestsdict,
fdroid_signing_key_fingerprints)
- make_v1(appsWithPackages, apks, repodir, repodict, requestsdict,
+ make_v1(sortedapps, apks, repodir, repodict, requestsdict,
fdroid_signing_key_fingerprints)
@@ -311,11 +296,6 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
value = str(apk[key])
addElement(name, value, doc, parent)
- def addElementCDATA(name, value, doc, parent):
- el = doc.createElement(name)
- el.appendChild(doc.createCDATASection(value))
- parent.appendChild(el)
-
def addElementCheckLocalized(name, app, key, doc, parent, default=''):
"""Fill in field from metadata or localized block
diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py
index a170699c..ee58b1b4 100644
--- a/fdroidserver/metadata.py
+++ b/fdroidserver/metadata.py
@@ -616,7 +616,7 @@ class DescriptionFormatter:
warn_or_exception(_("Unterminated ]]"))
url = txt[2:index]
if self.linkResolver:
- url, urltext = self.linkResolver(url)
+ url, urltext = self.linkResolver.resolve_description_link(url)
else:
urltext = url
res_html += '' + html.escape(urltext, quote=False) + ''
@@ -899,14 +899,9 @@ def read_metadata(xref=True, check_vcs=[], refresh=True, sort_by_time=False):
if xref:
# Parse all descriptions at load time, just to ensure cross-referencing
# errors are caught early rather than when they hit the build server.
- def linkres(appid):
- if appid in apps:
- return ("fdroid.app:" + appid, "Dummy name - don't know yet")
- warn_or_exception(_("Cannot resolve app id {appid}").format(appid=appid))
-
for appid, app in apps.items():
try:
- description_html(app.Description, linkres)
+ description_html(app.Description, DummyDescriptionResolver(apps))
except MetaDataException as e:
warn_or_exception(_("Problem with description of {appid}: {error}")
.format(appid=appid, error=str(e)))
@@ -1679,3 +1674,21 @@ def add_metadata_arguments(parser):
'''add common command line flags related to metadata processing'''
parser.add_argument("-W", choices=['error', 'warn', 'ignore'], default='error',
help=_("force metadata errors (default) to be warnings, or to be ignored."))
+
+
+class DescriptionResolver:
+ def __init__(self, apps):
+ self.apps = apps
+
+ def resolve_description_link(self, appid):
+ if appid in self.apps:
+ if self.apps[appid].Name:
+ return "fdroid.app:" + appid, self.apps[appid].Name
+ raise MetaDataException("Cannot resolve app id " + appid)
+
+
+class DummyDescriptionResolver(DescriptionResolver):
+ def resolve_description_link(self, appid):
+ if appid in self.apps:
+ return "fdroid.app:" + appid, "Dummy name - don't know yet"
+ warn_or_exception(_("Cannot resolve app id {appid}").format(appid=appid))
diff --git a/fdroidserver/update.py b/fdroidserver/update.py
index 06ed01de..babc3254 100644
--- a/fdroidserver/update.py
+++ b/fdroidserver/update.py
@@ -126,7 +126,7 @@ def disabled_algorithms_allowed():
return options.allow_disabled_algorithms or config['allow_disabled_algorithms']
-def status_update_json(apps, sortedids, apks):
+def status_update_json(apps, apks):
"""Output a JSON file with metadata about this `fdroid update` run
:param apps: fully populated list of all applications
@@ -141,7 +141,7 @@ def status_update_json(apps, sortedids, apks):
output['failedBuilds'] = dict()
output['noPackages'] = []
- for appid in sortedids:
+ for appid in apps:
app = apps[appid]
for af in app.get('AntiFeatures', []):
antiFeatures = output['antiFeatures'] # JSON camelCase
@@ -177,7 +177,7 @@ def status_update_json(apps, sortedids, apks):
common.write_status_json(output, options.pretty)
-def update_wiki(apps, sortedids, apks):
+def update_wiki(apps, apks):
"""Update the wiki
:param apps: fully populated list of all applications
@@ -193,7 +193,7 @@ def update_wiki(apps, sortedids, apks):
generated_pages = {}
generated_redirects = {}
- for appid in sortedids:
+ for appid in apps:
app = metadata.App(apps[appid])
wikidata = ''
@@ -1113,7 +1113,7 @@ def insert_localized_app_metadata(apps):
...as well as the /metadata// directory.
If it finds them, they will be added to the dict of all packages, with the
- versions in the /metadata/ folder taking precendence over the what
+ versions in the /metadata/ folder taking precedence over the what
is in the app's source repo.
The is the locale of the files supplied in that directory, using
@@ -2009,19 +2009,19 @@ def make_categories_txt(repodir, categories):
def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversions):
-
def filter_apk_list_sorted(apk_list):
- res = []
+ apkList = []
currentVersionApk = None
for apk in apk_list:
if apk['packageName'] == appid:
- if apk['versionCode'] == common.version_code_string_to_int(app.CurrentVersionCode):
- currentVersionApk = apk
- continue
- res.append(apk)
+ if app.CurrentVersionCode is not None:
+ if apk['versionCode'] == common.version_code_string_to_int(app.CurrentVersionCode):
+ currentVersionApk = apk
+ continue
+ apkList.append(apk)
# Sort the apk list by version code. First is highest/newest.
- sorted_list = sorted(res, key=lambda apk: apk['versionCode'], reverse=True)
+ sorted_list = sorted(apkList, key=lambda apk: apk['versionCode'], reverse=True)
if currentVersionApk:
# Insert apk which corresponds to currentVersion at the front
sorted_list.insert(0, currentVersionApk)
@@ -2166,6 +2166,75 @@ def create_metadata_from_template(apk):
logging.info(_("Generated skeleton metadata for {appid}").format(appid=apk['packageName']))
+def read_names_from_apks(apps, apks):
+ """This is a stripped down copy of apply_info_from_latest_apk that only parses app names"""
+ for appid, app in apps.items():
+ bestver = UNSET_VERSION_CODE
+ for apk in apks:
+ if apk['packageName'] == appid:
+ if apk['versionCode'] > bestver:
+ bestver = apk['versionCode']
+ bestapk = apk
+
+ if bestver == UNSET_VERSION_CODE:
+ if app.Name is None:
+ app.Name = app.AutoName or appid
+ app.icon = None
+ else:
+ if app.Name is None:
+ app.Name = bestapk['name']
+
+
+def render_app_descriptions(apps, all_apps):
+ """
+ Renders the app html description.
+ For resolving inter-app links it needs the full list of apps, even if they end up in
+ separate repos (i.e. archive or per app repos).
+ """
+ for app in apps.values():
+ app['Description'] = metadata.description_html(app['Description'], metadata.DescriptionResolver(all_apps))
+
+
+def get_apps_with_packages(apps, apks):
+ """Returns a deepcopy of that subset apps that actually has any associated packages. Skips disabled apps."""
+ appsWithPackages = collections.OrderedDict()
+ for packageName in apps:
+ app = apps[packageName]
+ if app['Disabled']:
+ continue
+
+ # only include apps with packages
+ for apk in apks:
+ if apk['packageName'] == packageName:
+ newapp = copy.copy(app)
+ appsWithPackages[packageName] = newapp
+ break
+ return appsWithPackages
+
+
+def prepare_apps(apps, apks, repodir):
+ """Encapsulates all necessary preparation steps before we can build an index out of apps and apks.
+
+ :param apps: All apps as read from metadata
+ :param apks: list of apks that belong into repo, this gets modified in place
+ :param repodir: the target repository directory, metadata files will be copied here
+ :return: the relevant subset of apps (as a deepcopy)
+ """
+ apps_with_packages = get_apps_with_packages(apps, apks)
+ apply_info_from_latest_apk(apps_with_packages, apks)
+ render_app_descriptions(apps_with_packages, apps)
+ insert_funding_yml_donation_links(apps)
+ # This is only currently done for /repo because doing it for the archive
+ # will take a lot of time and bloat the archive mirrors and index
+ if repodir == 'repo':
+ copy_triple_t_store_metadata(apps_with_packages)
+ insert_obbs(repodir, apps_with_packages, apks)
+ translate_per_build_anti_features(apps_with_packages, apks)
+ if repodir == 'repo':
+ insert_localized_app_metadata(apps_with_packages)
+ return apps_with_packages
+
+
config = None
options = None
start_timestamp = time.gmtime()
@@ -2302,12 +2371,6 @@ def main():
else:
logging.warning(msg + '\n\t' + _('Use `fdroid update -c` to create it.'))
- insert_funding_yml_donation_links(apps)
- copy_triple_t_store_metadata(apps)
- insert_obbs(repodirs[0], apps, apks)
- insert_localized_app_metadata(apps)
- translate_per_build_anti_features(apps, apks)
-
# Scan the archive repo for apks as well
if len(repodirs) > 1:
archapks, cc = process_apks(apkcache, repodirs[1], knownapks, options.use_date_from_apk)
@@ -2316,13 +2379,18 @@ def main():
else:
archapks = []
- # Apply information from latest apks to the application and update dates
- apply_info_from_latest_apk(apps, apks + archapks)
+ # We need app.Name populated for all apps regardless of which repo they end up in
+ # for the old-style inter-app links, so let's do it before we do anything else.
+ # This will be done again (as part of apply_info_from_latest_apk) for repo and archive
+ # separately later on, but it's fairly cheap anyway.
+ read_names_from_apks(apps, apks + archapks)
- # Sort the app list by name, then the web site doesn't have to by default.
- # (we had to wait until we'd scanned the apks to do this, because mostly the
- # name comes from there!)
- sortedids = sorted(apps.keys(), key=lambda appid: apps[appid].Name.upper())
+ if len(repodirs) > 1:
+ archive_old_apks(apps, apks, archapks, repodirs[0], repodirs[1], config['archive_older'])
+ archived_apps = prepare_apps(apps, archapks, repodirs[1])
+ index.make(archived_apps, archapks, repodirs[1], True)
+
+ repoapps = prepare_apps(apps, apks, repodirs[0])
# APKs are placed into multiple repos based on the app package, providing
# per-app subscription feeds for nightly builds and things like it
@@ -2333,25 +2401,15 @@ def main():
appdict = dict()
appdict[appid] = app
if os.path.isdir(repodir):
- index.make(appdict, [appid], apks, repodir, False)
+ index.make(appdict, apks, repodir, False)
else:
logging.info(_('Skipping index generation for {appid}').format(appid=appid))
return
- if len(repodirs) > 1:
- archive_old_apks(apps, apks, archapks, repodirs[0], repodirs[1], config['archive_older'])
-
# Make the index for the main repo...
- index.make(apps, sortedids, apks, repodirs[0], False)
+ index.make(repoapps, apks, repodirs[0], False)
make_categories_txt(repodirs[0], categories)
- # If there's an archive repo, make the index for it. We already scanned it
- # earlier on.
- if len(repodirs) > 1:
- archived_apps = copy.deepcopy(apps)
- apply_info_from_latest_apk(archived_apps, archapks)
- index.make(archived_apps, sortedids, archapks, repodirs[1], True)
-
git_remote = config.get('binary_transparency_remote')
if git_remote or os.path.isdir(os.path.join('binary_transparency', '.git')):
from . import btlog
@@ -2381,8 +2439,8 @@ def main():
# Update the wiki...
if options.wiki:
- update_wiki(apps, sortedids, apks + archapks)
- status_update_json(apps, sortedids, apks + archapks)
+ update_wiki(apps, apks + archapks)
+ status_update_json(apps, apks + archapks)
logging.info(_("Finished"))
diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase
index 5a574702..f9ba731d 100755
--- a/tests/metadata.TestCase
+++ b/tests/metadata.TestCase
@@ -905,6 +905,13 @@ class MetadataTest(unittest.TestCase):
'Subdir': None,
'Prepare': None}})
+ def test_read_xref_metadata(self):
+ os.chdir('xref')
+ fdroidserver.metadata.warnings_action = 'error'
+ apps = fdroidserver.metadata.read_metadata(xref=True)
+ self.assertListEqual(list(apps.keys()),
+ ['aarddict.android', 'org.coolreader', 'org.geometerplus.zlibrary.ui.android'])
+
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
diff --git a/tests/run-tests b/tests/run-tests
index 9c5d85d9..a5435351 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -607,6 +607,18 @@ grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml
grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index-v1.json
! grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index.xml
+#------------------------------------------------------------------------------#
+echo_header "test whatsnew from fastlane without CVC set"
+REPOROOT=`create_test_dir`
+cd $REPOROOT
+fdroid_init_with_prebuilt_keystore
+mkdir -p metadata/com.politedroid/en-US/changelogs/
+cp $WORKSPACE/tests/repo/com.politedroid_6.apk repo
+cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata
+echo "whatsnew test" > metadata/com.politedroid/en-US/changelogs/6.txt
+sed -i -e '/CurrentVersion/d' metadata/com.politedroid.yml
+$fdroid update --pretty --nosign
+grep -F 'whatsnew' repo/index-v1.json
#------------------------------------------------------------------------------#
echo_header "test metadata checks"
diff --git a/tests/xref/metadata/aarddict.android.yml b/tests/xref/metadata/aarddict.android.yml
new file mode 100644
index 00000000..d679c6b0
--- /dev/null
+++ b/tests/xref/metadata/aarddict.android.yml
@@ -0,0 +1,104 @@
+Categories:
+ - Reading
+License: GPL-3.0-only
+WebSite: http://aarddict.org
+SourceCode: https://github.com/aarddict/android
+IssueTracker: https://github.com/aarddict/android/issues
+Donate: http://aarddict.org/android
+FlattrID: '80944'
+
+AutoName: Aard
+Description: |-
+ '''Note:''' This app is no longer maintained.
+
+ * looks up words fast even with huge dictionaries like English Wikipedia
+ * looks up words in multiple dictionaries in multiple languages without switching
+ * works great as an offline Wikipedia reader
+ * uses same the efficient, highly compressed dictionary data storage format as the desktop version
+ * it can integrate with both [[org.geometerplus.zlibrary.ui.android]] and [[org.coolreader]]
+
+ Ready-made dictionaries can be found on the website, or you can roll your own
+ with the tools on the website.
+
+RepoType: git
+Repo: https://github.com/aarddict/android.git
+
+Builds:
+ - versionName: 1.3.1
+ versionCode: 10
+ commit: 1.3.1
+ prebuild: mv lib libs
+
+ - versionName: 1.4.0
+ versionCode: 12
+ commit: 7df930161256324e31b2c720281629f58446b6d6
+ prebuild: mv lib libs
+
+ - versionName: 1.4.1
+ versionCode: 13
+ commit: b81c9c8c52de5f65b550e3c608a610962582e5cd
+ prebuild: mv lib libs
+
+ - versionName: 1.6.1
+ versionCode: 16
+ commit: 1.6.1
+ target: android-17
+
+ - versionName: 1.6.2
+ versionCode: 17
+ commit: 1.6.2
+ target: android-17
+
+ - versionName: 1.6.3
+ versionCode: 18
+ commit: 1.6.3
+ target: android-17
+
+ - versionName: 1.6.4
+ versionCode: 19
+ commit: 1.6.4
+ target: android-17
+
+ - versionName: 1.6.5
+ versionCode: 20
+ commit: 1.6.5
+ target: android-17
+
+ - versionName: 1.6.6
+ versionCode: 21
+ commit: 1.6.6
+ target: android-17
+
+ - versionName: 1.6.7
+ versionCode: 22
+ commit: 1.6.7
+ target: android-17
+
+ - versionName: 1.6.8
+ versionCode: 23
+ commit: 1.6.8
+ target: android-17
+
+ - versionName: 1.6.9
+ versionCode: 24
+ commit: 1.6.9
+ target: android-17
+
+ - versionName: 1.6.10
+ versionCode: 25
+ commit: 1.6.10
+ target: android-17
+
+ - versionName: 1.6.11
+ versionCode: 26
+ commit: 1.6.11
+ target: android-17
+
+MaintainerNotes: |-
+ Github site points to https://github.com/itkach/aard2-android (itkach.aard2) as successor.
+ We cannot point to this app as all its builds are disabled (as of 2018-10-16).
+
+AutoUpdateMode: Version %v
+UpdateCheckMode: Tags
+CurrentVersion: 1.6.11
+CurrentVersionCode: 26
diff --git a/tests/xref/metadata/org.coolreader.yml b/tests/xref/metadata/org.coolreader.yml
new file mode 100644
index 00000000..e1dc1df9
--- /dev/null
+++ b/tests/xref/metadata/org.coolreader.yml
@@ -0,0 +1,551 @@
+Categories:
+ - Reading
+License: GPL-2.0-only
+AuthorName: Vadim Lopatin
+AuthorEmail: coolreader.org@gmail.com
+WebSite: https://sourceforge.net/projects/crengine/
+SourceCode: https://github.com/buggins/coolreader
+IssueTracker: https://github.com/buggins/coolreader/issues
+Donate: https://sourceforge.net/p/crengine/donate
+
+AutoName: Cool Reader
+Description: |-
+ An e-book reader. Supported formats: FB2, TXT, RTF, TCR, HTML, EPUB, CHM. Browse
+ free books online and add your own OPDS shares.
+
+ The default dictionary app is non-free. However, you can choose
+ [[aarddict.android]] as a dictionary from the Dictionary section of the
+ Settings.
+
+RepoType: git
+Repo: https://github.com/buggins/coolreader
+
+Builds:
+ - versionName: 3.0.39-35
+ versionCode: 60
+ commit: 68ad007ac1272ef322fd61cb6591618723422380
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.40-1
+ versionCode: 64
+ commit: cr3.0.40-1
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.40-6
+ versionCode: 69
+ commit: cr3.0.40-6
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.41-3
+ versionCode: 75
+ commit: cr3.0.41-3
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.41-9
+ versionCode: 81
+ commit: cr3.0.41-9
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.42-6
+ versionCode: 86
+ commit: cr3.0.42-6
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.43-4
+ versionCode: 94
+ commit: cr3.0.43-4
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.43-6
+ versionCode: 96
+ commit: cr3.0.43-6
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.44-03
+ versionCode: 103
+ commit: cr3.0.44-3
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.44-09
+ versionCode: 109
+ commit: cr3.0.44-9
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.45-04
+ versionCode: 114
+ disable: tag points to wrong version
+ commit: unknown - see disabled
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.45-09
+ versionCode: 119
+ disable: tag points to wrong version
+ commit: unknown - see disabled
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.45-11
+ versionCode: 121
+ commit: 6c42a9b65090da9640ccb6ee317bb32de24201fb
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.45-14
+ versionCode: 124
+ commit: cr3.0.45-14
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.46-1
+ versionCode: 131
+ commit: cr3.0.46-1
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.46-5
+ versionCode: 135
+ commit: cr3.0.46-5
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.46-11
+ versionCode: 141
+ commit: cr3.0.46-11
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.48-5
+ versionCode: 155
+ commit: cr3.0.48-5
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.49-2
+ versionCode: 162
+ commit: cr3.0.49-2
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.49-5
+ versionCode: 165
+ commit: cr3.0.49-5
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.49-9
+ versionCode: 169
+ commit: cr3.0.49-9
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.49-16
+ versionCode: 176
+ commit: cr3.0.49-16
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.51-7
+ versionCode: 197
+ commit: cr3.0.51-7
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.52-1
+ versionCode: 241
+ commit: cr3.0.52-1
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.52-4
+ versionCode: 244
+ commit: cr3.0.52-4
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.53-3
+ versionCode: 247
+ commit: cr3.0.53-3
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.53-10
+ versionCode: 255
+ commit: cr3.0.53-10
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.53-14
+ versionCode: 259
+ commit: cr3.0.53-14
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.53-18
+ versionCode: 263
+ commit: c555ecd66d18b218fb255733c8b33a0825992f76
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.53-19
+ versionCode: 264
+ commit: cr3.0.53-19
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.54-5
+ versionCode: 275
+ commit: cr3.0.54-5
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.54-9
+ versionCode: 279
+ commit: cr3.0.54-9
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.54-33
+ versionCode: 303
+ commit: cr3.0.54-33
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.54-38
+ versionCode: 308
+ commit: cr3.0.54-38
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.54-47
+ versionCode: 447
+ commit: cr3.0.54-47
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.55-5
+ versionCode: 505
+ commit: cr3.0.55-5
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.55-9
+ versionCode: 509
+ commit: cr3.0.55-9
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.55-14
+ versionCode: 514
+ commit: cr3.0.55-14
+ subdir: android
+ rm:
+ - android/build.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.55-30
+ versionCode: 530
+ commit: cr3.0.55-30
+ subdir: android
+ rm:
+ - android/ant.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.55-32
+ versionCode: 532
+ commit: cr3.0.55-32
+ subdir: android
+ rm:
+ - android/ant.properties
+ buildjni:
+ - yes
+
+ - versionName: 3.0.56-5
+ versionCode: 565
+ disable: builds ok but crashes at cr3.0.56-5
+ commit: cr3.0.56-5
+ subdir: android
+ rm:
+ - android/ant.properties
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 3.0.57-15
+ versionCode: 625
+ disable: builds ok but crashes at cr3.0.57-15
+ commit: cr3.0.57-15
+ subdir: android
+ rm:
+ - android/ant.properties
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 3.0.57-16
+ versionCode: 626
+ disable: builds ok but crashes at 2f3d5fb86df316d
+ commit: 2f3d5fb86df316d
+ subdir: android
+ rm:
+ - android/ant.properties
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-27
+ versionCode: 847
+ commit: cr3-3.1.2-27
+ subdir: android
+ rm:
+ - android/ant.properties
+ target: android-16
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-38
+ versionCode: 858
+ disable: ndk build errors
+ commit: cr3-3.1.2-38
+ subdir: android
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-39
+ versionCode: 859
+ commit: cr3-3.1.2-39-market
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-19
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-48
+ versionCode: 868
+ commit: cr3.1.2-48
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-19
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-50
+ versionCode: 870
+ commit: cr3.1.2-50
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-19
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-51
+ versionCode: 871
+ commit: cr3-3.1.2-51
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-19
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-55
+ versionCode: 875
+ commit: cr3-3.1.2-55
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-19
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-68
+ versionCode: 888
+ commit: cr3.1.2-68
+ subdir: android
+ rm:
+ - android/build.properties
+ target: android-22
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-72
+ versionCode: 892
+ commit: cr3.1.2-71
+ subdir: android
+ rm:
+ - android/build.properties
+ prebuild: sed -i -e 's/^APP_ABI\s*:=.*/APP_ABI := all/' jni/Application.mk
+ target: android-22
+ buildjni:
+ - yes
+
+ - versionName: 3.1.2-87
+ versionCode: 907
+ commit: 1e07d15d4644c690
+ subdir: android
+ rm:
+ - android/build.properties
+ prebuild: sed -i -e 's/^APP_ABI\s*:=.*/APP_ABI := all/' jni/Application.mk
+ target: android-22
+ scanignore:
+ - cr3wx
+ buildjni:
+ - yes
+
+ - versionName: 3.2.9-1
+ versionCode: 2091
+ commit: bf48e5b7a5e89e5fc8b1f971573b5046e6b27bd3
+ subdir: android
+ gradle:
+ - yes
+ output: app/build/outputs/apk/release/app-universal-release-unsigned.apk
+ rm:
+ - android/build.properties
+ prebuild: sed -i -e 's/^APP_ABI\s*:=.*/APP_ABI := all/' jni/Application.mk
+ scanignore:
+ - cr3wx
+ ndk: r16b
+
+ - versionName: 3.2.38-1
+ versionCode: 32380
+ commit: cr3.2.38
+ subdir: android/app
+ gradle:
+ - yes
+ rm:
+ - cr3wx/src/resources/crrcconv.exe
+ prebuild:
+ - sed -i -e 's/\r//' ../gradle/wrapper/gradle-wrapper.properties
+ - sed -i -e 's/enable true/enable false/' build.gradle
+ ndk: r21
+
+AutoUpdateMode: None
+UpdateCheckMode: Tags
+CurrentVersion: 3.2.39-1
+CurrentVersionCode: 32390
diff --git a/tests/xref/metadata/org.geometerplus.zlibrary.ui.android.yml b/tests/xref/metadata/org.geometerplus.zlibrary.ui.android.yml
new file mode 100644
index 00000000..ff2897eb
--- /dev/null
+++ b/tests/xref/metadata/org.geometerplus.zlibrary.ui.android.yml
@@ -0,0 +1,556 @@
+AntiFeatures:
+ - NonFreeAdd
+ - UpstreamNonFree
+Categories:
+ - Reading
+License: GPL-2.0-or-later
+AuthorName: Nikolay Pultsin
+AuthorEmail: geometer@fbreader.org
+AuthorWebSite: https://fbreader.org/
+WebSite: https://fbreader.org/FBReaderJ
+SourceCode: https://github.com/geometer/FBReaderJ
+IssueTracker: https://github.com/geometer/FBReaderJ/issues
+Changelog: https://raw.githubusercontent.com/geometer/FBReaderJ/HEAD/ChangeLog
+Donate: https://fbreader.org/donation/make.php
+
+AutoName: FBReader
+Description: |-
+ '''N.B'''There are three different apks to cover the different versions of
+ Android. Donut covers 1.5-1.6; Froyo covers 2.0-2.3 and Honeycomb covers 3.0+.
+ x86 and MIPS are supported natively in all apks.
+
+ An e-book reader. Features include the ability to stock up on books from online
+ OPDS libraries like Project Gutenberg straight from the app. F-Droid.org has two
+ other addon apps that provide text-to-speech functionality and one to support
+ ''local'' OPDS shares.
+
+ Anti-features: Addons. While there are some addons for this app that are free,
+ the dictionaries that are suggested are not. However, it does support
+ [[aarddict.android]], as long as that is installed beforehand '''and''' you
+ choose it via the Dictionary section of the settings.
+
+RepoType: git
+Repo: https://github.com/geometer/FBReaderJ.git
+
+Builds:
+ - versionName: 0.99.11
+ versionCode: 9911
+ commit: 0.99.11
+ antcommands:
+ - package
+
+ - versionName: 0.99.12
+ versionCode: 9912
+ commit: 0.99.12
+ antcommands:
+ - package
+
+ - versionName: 0.99.15
+ versionCode: 9915
+ commit: 0.99.15
+ antcommands:
+ - package
+
+ - versionName: 0.99.18
+ versionCode: 9918
+ commit: 0.99.18
+ antcommands:
+ - package
+
+ - versionName: 1.0.9
+ versionCode: 10011
+ commit: 1.0.9
+ antcommands:
+ - package
+
+ - versionName: 1.0.11
+ versionCode: 10013
+ commit: 1.0.11
+ antcommands:
+ - package
+
+ - versionName: 1.0.12
+ versionCode: 10014
+ commit: fd349108eff9caa9152a
+ antcommands:
+ - package
+
+ - versionName: 1.1.0
+ versionCode: 10100
+ commit: 5eb993e1fac2898d2361
+ antcommands:
+ - package
+
+ - versionName: 1.1.1
+ versionCode: 10101
+ commit: 1.1.1
+ antcommands:
+ - package
+
+ - versionName: 1.1.2
+ versionCode: 10102
+ commit: 1.1.2
+ antcommands:
+ - package
+
+ - versionName: 1.1.8
+ versionCode: 101081
+ commit: 1.1.8
+ antcommands:
+ - package
+
+ - versionName: 1.1.9
+ versionCode: 101091
+ commit: 1.1.9
+ antcommands:
+ - package
+
+ - versionName: 1.1.10
+ versionCode: 101101
+ commit: 13ee5d79431815dd694e
+ antcommands:
+ - package
+
+ - versionName: 1.2.2
+ versionCode: 102021
+ commit: e63c553aeb032da828b270a735f0171d8d22c54c
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.2.3
+ versionCode: 102031
+ commit: 46d83bb4351c2f6ec51e0d9aa6202c86c1297e7f
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.2.4
+ versionCode: 102041
+ commit: 6426bcf131d4
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.2.6
+ versionCode: 102061
+ commit: 1.2.6
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.3.3
+ versionCode: 103031
+ commit: 1.3.3
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.3.6
+ versionCode: 103061
+ commit: a16e3eb7ff731edea99248f8a7c1633148a26236
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.5.5
+ versionCode: 105051
+ commit: 1.5.5
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ target: android-10
+ buildjni:
+ - yes
+
+ - versionName: 1.6.1
+ versionCode: 106011
+ commit: 1.6.1
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.6.4-Donut
+ versionCode: 106040
+ commit: af881fe37
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.6.4-Froyo
+ versionCode: 106041
+ commit: 696ed7704
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.6.4
+ versionCode: 106042
+ commit: b3b4667ccb
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.2-Donut
+ versionCode: 107019
+ commit: a4a5e506b
+ forceversion: true
+ forcevercode: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.2-Froyo
+ versionCode: 107020
+ commit: 33ffc7e5b
+ forceversion: true
+ forcevercode: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.2-Honeycomb
+ versionCode: 107021
+ commit: 0520159677
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.3-Donut
+ versionCode: 107040
+ commit: 2c6253dd
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.3-Froyo
+ versionCode: 107041
+ commit: 934bf7f5
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.3-Honeycomb
+ versionCode: 107042
+ commit: c4a3c7a9a
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.8-Donut
+ versionCode: 107080
+ commit: c1470c9be1
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.8-Froyo
+ versionCode: 107084
+ commit: 1.7.8
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.7.8-Honeycomb
+ versionCode: 107085
+ commit: 1.7.8-ics
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ buildjni:
+ - yes
+
+ - versionName: 1.8.2-Donut
+ versionCode: 108020
+ commit: 9bec0ff445e66a
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ androidupdate:
+ - third-party/AmbilWarna
+ - .
+ buildjni:
+ - yes
+
+ - versionName: 1.8.2-Froyo
+ versionCode: 108021
+ commit: 0f02d4e9232227
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ androidupdate:
+ - third-party/AmbilWarna
+ - .
+ buildjni:
+ - yes
+
+ - versionName: 1.8.2-Honeycomb+
+ versionCode: 108022
+ commit: 1112df415d
+ forceversion: true
+ prebuild:
+ - mkdir res/drawable
+ - find icons -iname "*.*" -exec cp {} res/drawable \;
+ androidupdate:
+ - third-party/AmbilWarna
+ - .
+ buildjni:
+ - yes
+
+ - versionName: 2.0.6-gb
+ versionCode: 2000610
+ disable: missing res with android-9
+ commit: 2.0.6
+ patch:
+ - fbreader-2.0.6.patch
+ srclibs:
+ - PDFParseLib@36d7479ce85638eb4f0ff9c875ec77680177da5d
+ - ApacheHttpClient@4.2.5
+ - NanoHttpd@Release-2.0.5
+ - JsonSimple@tag_release_1_1_1
+ forceversion: true
+ rm:
+ - libs/*jar
+ - obsolete/lib/*.jar
+ prebuild:
+ - echo -e "sdk.dir=$$SDK$$\nndk.dir=$$NDK$$\n" >> local.properties
+ - cp local.properties third-party/AmbilWarna/
+ - cp local.properties third-party/android-filechooser/code/
+ - cp local.properties third-party/drag-sort-listview/library/
+ - pushd $$ApacheHttpClient$$/httpmime/
+ - $$MVN3$$ package
+ - popd
+ - cp $$ApacheHttpClient$$/httpmime/target/httpmime-4.2.5.jar libs/
+ - pushd $$NanoHttpd$$
+ - $$MVN3$$ package
+ - popd
+ - cp $$NanoHttpd$$/core/target/nanohttpd-2.0.5.jar libs/
+ - cp -fR $$JsonSimple$$/src/main/java/org src/
+ - cp -fR $$PDFParseLib$$/pdfparse-lib/src/main/java/org src/
+ - rm -fR src/com/paragon
+ androidupdate:
+ - third-party/AmbilWarna
+ - third-party/android-filechooser/code
+ - third-party/drag-sort-listview/library
+ - .
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 2.0.6-ics
+ versionCode: 2000620
+ commit: b1dd70ff149560889e7548762046da4933e51e94
+ patch:
+ - fbreader-2.0.6.patch
+ srclibs:
+ - FBReaderJ@2.0.6
+ - PDFParseLib@36d7479ce85638eb4f0ff9c875ec77680177da5d
+ - ApacheHttpClient@4.2.5
+ - NanoHttpd@Release-2.0.5
+ - JsonSimple@tag_release_1_1_1
+ forceversion: true
+ rm:
+ - libs/*jar
+ - obsolete/lib/*.jar
+ prebuild:
+ - echo -e "sdk.dir=$$SDK$$\nndk.dir=$$NDK$$\n" >> local.properties
+ - cp local.properties third-party/AmbilWarna/
+ - cp local.properties third-party/android-filechooser/code/
+ - cp local.properties third-party/drag-sort-listview/library/
+ - pushd $$ApacheHttpClient$$/httpmime/
+ - $$MVN3$$ package
+ - popd
+ - cp $$ApacheHttpClient$$/httpmime/target/httpmime-4.2.5.jar libs/
+ - pushd $$NanoHttpd$$
+ - $$MVN3$$ package
+ - popd
+ - cp $$NanoHttpd$$/core/target/nanohttpd-2.0.5.jar libs/
+ - cp -fR $$JsonSimple$$/src/main/java/org src/
+ - cp -fR $$PDFParseLib$$/pdfparse-lib/src/main/java/org src/
+ - rm -fR src/com/paragon
+ - sed -i -e '/com.google.android.gms.version/d' -e '/google_play_services/d' AndroidManifest.xml
+ - sed -i -e '/google.services.lib.dir/d' project.properties
+ - rm -fR src/org/geometerplus/android/fbreader/network/auth
+ - cp -fR $$FBReaderJ$$/src/org/geometerplus/android/fbreader/network/auth src/org/geometerplus/android/fbreader/network/
+ androidupdate:
+ - third-party/AmbilWarna
+ - third-party/android-filechooser/code
+ - third-party/drag-sort-listview/library
+ - .
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 2.1-ics
+ versionCode: 2010020
+ commit: 33139e2b04ae36388956a57373ba74e8cc0ef23c
+ patch:
+ - fbreader-2.0.6.patch
+ srclibs:
+ - FBReaderJ@2.1
+ - PDFParseLib@36d7479ce85638eb4f0ff9c875ec77680177da5d
+ - ApacheHttpClient@4.2.5
+ - NanoHttpd@Release-2.0.5
+ - JsonSimple@tag_release_1_1_1
+ forceversion: true
+ rm:
+ - libs/*jar
+ - obsolete/lib/*.jar
+ prebuild:
+ - echo -e "sdk.dir=$$SDK$$\nndk.dir=$$NDK$$\n" >> local.properties
+ - cp local.properties third-party/AmbilWarna/
+ - cp local.properties third-party/android-filechooser/code/
+ - cp local.properties third-party/drag-sort-listview/library/
+ - pushd $$ApacheHttpClient$$/httpmime/
+ - $$MVN3$$ package
+ - popd
+ - cp $$ApacheHttpClient$$/httpmime/target/httpmime-4.2.5.jar libs/
+ - pushd $$NanoHttpd$$
+ - $$MVN3$$ package
+ - popd
+ - cp $$NanoHttpd$$/core/target/nanohttpd-2.0.5.jar libs/
+ - cp -fR $$JsonSimple$$/src/main/java/org src/
+ - cp -fR $$PDFParseLib$$/pdfparse-lib/src/main/java/org src/
+ - rm -fR src/com/paragon
+ - sed -i -e '/com.google.android.gms.version/d' -e '/google_play_services/d' AndroidManifest.xml
+ - sed -i -e '/google.services.lib.dir/d' project.properties
+ - rm -fR src/org/geometerplus/android/fbreader/network/auth
+ - cp -fR $$FBReaderJ$$/src/org/geometerplus/android/fbreader/network/auth src/org/geometerplus/android/fbreader/network/
+ androidupdate:
+ - third-party/AmbilWarna
+ - third-party/android-filechooser/code
+ - third-party/drag-sort-listview/library
+ - .
+ target: android-14
+ buildjni:
+ - yes
+
+ - versionName: 2.5.9-ics
+ versionCode: 2050920
+ commit: 43e14feedf10ad53ec68bf42b1644f488889381c
+ srclibs:
+ - FBReaderJ@2.5.9
+ - PDFParseLib@36d7479ce85638eb4f0ff9c875ec77680177da5d
+ - ApacheHttpClient@4.2.5
+ - NanoHttpd@Release-2.0.5
+ - JsonSimple@tag_release_1_1_1
+ forceversion: true
+ rm:
+ - libs/*jar
+ - obsolete/lib/*.jar
+ - src/org/geometerplus/android/fbreader/dict/OpenDictionary.java
+ - src/org/geometerplus/android/fbreader/dict/Lingvo.java
+ extlibs:
+ - android/android-support-v4.jar
+ prebuild:
+ - echo -e "sdk.dir=$$SDK$$\nndk.dir=$$NDK$$\n" >> local.properties
+ - cp local.properties third-party/AmbilWarna/
+ - cp local.properties third-party/android-filechooser/code/
+ - cp local.properties third-party/drag-sort-listview/library/
+ - echo 'APP_PLATFORM := android-11' >> jni/Application.mk
+ - pushd $$ApacheHttpClient$$/httpmime/
+ - $$MVN3$$ package -Dmaven.javadoc.skip=true
+ - popd
+ - cp $$ApacheHttpClient$$/httpmime/target/httpmime-4.2.5.jar libs/
+ - pushd $$NanoHttpd$$
+ - $$MVN3$$ package
+ - popd
+ - cp $$NanoHttpd$$/core/target/nanohttpd-2.0.5.jar libs/
+ - cp -fR $$JsonSimple$$/src/main/java/org src/
+ - cp -fR $$PDFParseLib$$/pdfparse-lib/src/main/java/org src/
+ - rm -fR src/com/paragon
+ - sed -i -e '/com.google.android.gms.version/d' -e '/google_play_services/d' AndroidManifest.xml
+ - sed -i -e '/google.services.lib.dir/d' project.properties
+ - mkdir third-party/drag-sort-listview/library/libs
+ - cp libs/android-support-v4.jar third-party/drag-sort-listview/library/libs/&&
+ sed -i -e '/Lingvo/d' src/org/geometerplus/android/fbreader/dict/DictionaryUtil.java
+ - rm -fR src/org/geometerplus/android/fbreader/network/auth
+ - cp -fR $$FBReaderJ$$/src/org/geometerplus/android/fbreader/network/auth src/org/geometerplus/android/fbreader/network/
+ - sed -i -e '/^\s*OpenDictionary.collect/d' src/org/geometerplus/android/fbreader/dict/DictionaryUtil.java
+ androidupdate:
+ - third-party/AmbilWarna
+ - third-party/android-filechooser/code
+ - third-party/drag-sort-listview/library
+ - .
+ target: android-21
+ buildjni:
+ - yes
+
+MaintainerNotes: |-
+ * LingvoIntegration and OpenDictionary APIs are non-free. Remove jars and patch
+ depending code. Currently done with rm and sed in prebuilds.
+ * %v tags are currently targeting gingerbread, but have ressource conflicts
+ with target=android-9; they build with target=android-14
+ * %v-ics tags are actually based on the yotaphone branch, so we have to
+ use raw commits for the ice-cream-sandwich branch (look for "Merge
+ branch 'master' into ice-cream-sandwich" after a commit with "version
+ => ...")
+ * ics branch uses google play, so we have to sed AM.xml and ant files.
+ /fbreader/network/ depends on Google Play Services, so these are
+ removed and replaced with the master branch which does not depend on
+ these.
+ * UCM is set to master branch, we don't care for target or device specific
+ releases.
+
+ TODO:
+ * make gingerbread/master available for android-9!
+
+ArchivePolicy: 6 versions
+AutoUpdateMode: None
+UpdateCheckMode: Tags ^[0-9.]*$
+VercodeOperation: '%c + 10'
+CurrentVersion: 2.5.9
+CurrentVersionCode: 2050920