mirror of
				https://github.com/f-droid/fdroidserver.git
				synced 2025-11-04 06:30:27 +03:00 
			
		
		
		
	purge code that modifies the app description, including linkifying
closes #845
This commit is contained in:
		
							parent
							
								
									15a6e2d3a0
								
							
						
					
					
						commit
						828d6015ef
					
				
					 14 changed files with 68 additions and 1488 deletions
				
			
		| 
						 | 
				
			
			@ -405,7 +405,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
 | 
			
		|||
            addElement('icon', app.icon, doc, apel)
 | 
			
		||||
 | 
			
		||||
        addElementCheckLocalized('desc', app, 'Description', doc, apel,
 | 
			
		||||
                                 '<p>No description available</p>')
 | 
			
		||||
                                 'No description available')
 | 
			
		||||
 | 
			
		||||
        addElement('license', app.License, doc, apel)
 | 
			
		||||
        if app.Categories:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -583,7 +583,7 @@ def main():
 | 
			
		|||
    config = common.read_config(options)
 | 
			
		||||
 | 
			
		||||
    # Get all apps...
 | 
			
		||||
    allapps = metadata.read_metadata(xref=True)
 | 
			
		||||
    allapps = metadata.read_metadata()
 | 
			
		||||
    apps = common.read_app_args(options.appid, allapps, False)
 | 
			
		||||
 | 
			
		||||
    anywarns = check_for_unsupported_metadata_files()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,10 +21,7 @@
 | 
			
		|||
import os
 | 
			
		||||
import re
 | 
			
		||||
import glob
 | 
			
		||||
import html
 | 
			
		||||
import logging
 | 
			
		||||
import textwrap
 | 
			
		||||
import io
 | 
			
		||||
import yaml
 | 
			
		||||
try:
 | 
			
		||||
    from yaml import CSafeLoader as SafeLoader
 | 
			
		||||
| 
						 | 
				
			
			@ -467,196 +464,6 @@ def check_metadata(app):
 | 
			
		|||
            v.check(app[k], app.id)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Formatter for descriptions. Create an instance, and call parseline() with
 | 
			
		||||
# each line of the description source from the metadata. At the end, call
 | 
			
		||||
# end() and then text_txt and text_html will contain the result.
 | 
			
		||||
class DescriptionFormatter:
 | 
			
		||||
 | 
			
		||||
    stNONE = 0
 | 
			
		||||
    stPARA = 1
 | 
			
		||||
    stUL = 2
 | 
			
		||||
    stOL = 3
 | 
			
		||||
 | 
			
		||||
    def __init__(self, linkres):
 | 
			
		||||
        self.bold = False
 | 
			
		||||
        self.ital = False
 | 
			
		||||
        self.state = self.stNONE
 | 
			
		||||
        self.laststate = self.stNONE
 | 
			
		||||
        self.text_html = ''
 | 
			
		||||
        self.text_txt = ''
 | 
			
		||||
        self.html = io.StringIO()
 | 
			
		||||
        self.text = io.StringIO()
 | 
			
		||||
        self.para_lines = []
 | 
			
		||||
        self.linkResolver = None
 | 
			
		||||
        self.linkResolver = linkres
 | 
			
		||||
 | 
			
		||||
    def endcur(self, notstates=None):
 | 
			
		||||
        if notstates and self.state in notstates:
 | 
			
		||||
            return
 | 
			
		||||
        if self.state == self.stPARA:
 | 
			
		||||
            self.endpara()
 | 
			
		||||
        elif self.state == self.stUL:
 | 
			
		||||
            self.endul()
 | 
			
		||||
        elif self.state == self.stOL:
 | 
			
		||||
            self.endol()
 | 
			
		||||
 | 
			
		||||
    def endpara(self):
 | 
			
		||||
        self.laststate = self.state
 | 
			
		||||
        self.state = self.stNONE
 | 
			
		||||
        whole_para = ' '.join(self.para_lines)
 | 
			
		||||
        self.addtext(whole_para)
 | 
			
		||||
        wrapped = textwrap.fill(whole_para, 80,
 | 
			
		||||
                                break_long_words=False,
 | 
			
		||||
                                break_on_hyphens=False)
 | 
			
		||||
        self.text.write(wrapped)
 | 
			
		||||
        self.html.write('</p>')
 | 
			
		||||
        del self.para_lines[:]
 | 
			
		||||
 | 
			
		||||
    def endul(self):
 | 
			
		||||
        self.html.write('</ul>')
 | 
			
		||||
        self.laststate = self.state
 | 
			
		||||
        self.state = self.stNONE
 | 
			
		||||
 | 
			
		||||
    def endol(self):
 | 
			
		||||
        self.html.write('</ol>')
 | 
			
		||||
        self.laststate = self.state
 | 
			
		||||
        self.state = self.stNONE
 | 
			
		||||
 | 
			
		||||
    def formatted(self, txt, htmlbody):
 | 
			
		||||
        res = ''
 | 
			
		||||
        if htmlbody:
 | 
			
		||||
            txt = html.escape(txt, quote=False)
 | 
			
		||||
        while True:
 | 
			
		||||
            index = txt.find("''")
 | 
			
		||||
            if index == -1:
 | 
			
		||||
                return res + txt
 | 
			
		||||
            res += txt[:index]
 | 
			
		||||
            txt = txt[index:]
 | 
			
		||||
            if txt.startswith("'''"):
 | 
			
		||||
                if htmlbody:
 | 
			
		||||
                    if self.bold:
 | 
			
		||||
                        res += '</b>'
 | 
			
		||||
                    else:
 | 
			
		||||
                        res += '<b>'
 | 
			
		||||
                self.bold = not self.bold
 | 
			
		||||
                txt = txt[3:]
 | 
			
		||||
            else:
 | 
			
		||||
                if htmlbody:
 | 
			
		||||
                    if self.ital:
 | 
			
		||||
                        res += '</i>'
 | 
			
		||||
                    else:
 | 
			
		||||
                        res += '<i>'
 | 
			
		||||
                self.ital = not self.ital
 | 
			
		||||
                txt = txt[2:]
 | 
			
		||||
 | 
			
		||||
    def linkify(self, txt):
 | 
			
		||||
        res_plain = ''
 | 
			
		||||
        res_html = ''
 | 
			
		||||
        while True:
 | 
			
		||||
            index = txt.find("[")
 | 
			
		||||
            if index == -1:
 | 
			
		||||
                return (res_plain + self.formatted(txt, False), res_html + self.formatted(txt, True))
 | 
			
		||||
            res_plain += self.formatted(txt[:index], False)
 | 
			
		||||
            res_html += self.formatted(txt[:index], True)
 | 
			
		||||
            txt = txt[index:]
 | 
			
		||||
            if txt.startswith("[["):
 | 
			
		||||
                index = txt.find("]]")
 | 
			
		||||
                if index == -1:
 | 
			
		||||
                    _warn_or_exception(_("Unterminated ]]"))
 | 
			
		||||
                url = txt[2:index]
 | 
			
		||||
                if self.linkResolver:
 | 
			
		||||
                    url, urltext = self.linkResolver.resolve_description_link(url)
 | 
			
		||||
                else:
 | 
			
		||||
                    urltext = url
 | 
			
		||||
                res_html += '<a href="' + url + '">' + html.escape(urltext, quote=False) + '</a>'
 | 
			
		||||
                res_plain += urltext
 | 
			
		||||
                txt = txt[index + 2:]
 | 
			
		||||
            else:
 | 
			
		||||
                index = txt.find("]")
 | 
			
		||||
                if index == -1:
 | 
			
		||||
                    _warn_or_exception(_("Unterminated ]"))
 | 
			
		||||
                url = txt[1:index]
 | 
			
		||||
                index2 = url.find(' ')
 | 
			
		||||
                if index2 == -1:
 | 
			
		||||
                    urltxt = url
 | 
			
		||||
                else:
 | 
			
		||||
                    urltxt = url[index2 + 1:]
 | 
			
		||||
                    url = url[:index2]
 | 
			
		||||
                    if url == urltxt:
 | 
			
		||||
                        _warn_or_exception(_("URL title is just the URL, use brackets: [URL]"))
 | 
			
		||||
                res_html += '<a href="' + url + '">' + html.escape(urltxt, quote=False) + '</a>'
 | 
			
		||||
                res_plain += urltxt
 | 
			
		||||
                if urltxt != url:
 | 
			
		||||
                    res_plain += ' (' + url + ')'
 | 
			
		||||
                txt = txt[index + 1:]
 | 
			
		||||
 | 
			
		||||
    def addtext(self, txt):
 | 
			
		||||
        p, h = self.linkify(txt)
 | 
			
		||||
        self.html.write(h)
 | 
			
		||||
 | 
			
		||||
    def parseline(self, line):
 | 
			
		||||
        if not line:
 | 
			
		||||
            self.endcur()
 | 
			
		||||
        elif line.startswith('* '):
 | 
			
		||||
            self.endcur([self.stUL])
 | 
			
		||||
            if self.state != self.stUL:
 | 
			
		||||
                self.html.write('<ul>')
 | 
			
		||||
                self.state = self.stUL
 | 
			
		||||
                if self.laststate != self.stNONE:
 | 
			
		||||
                    self.text.write('\n\n')
 | 
			
		||||
            else:
 | 
			
		||||
                self.text.write('\n')
 | 
			
		||||
            self.text.write(line)
 | 
			
		||||
            self.html.write('<li>')
 | 
			
		||||
            self.addtext(line[1:])
 | 
			
		||||
            self.html.write('</li>')
 | 
			
		||||
        elif line.startswith('# '):
 | 
			
		||||
            self.endcur([self.stOL])
 | 
			
		||||
            if self.state != self.stOL:
 | 
			
		||||
                self.html.write('<ol>')
 | 
			
		||||
                self.state = self.stOL
 | 
			
		||||
                if self.laststate != self.stNONE:
 | 
			
		||||
                    self.text.write('\n\n')
 | 
			
		||||
            else:
 | 
			
		||||
                self.text.write('\n')
 | 
			
		||||
            self.text.write(line)
 | 
			
		||||
            self.html.write('<li>')
 | 
			
		||||
            self.addtext(line[1:])
 | 
			
		||||
            self.html.write('</li>')
 | 
			
		||||
        else:
 | 
			
		||||
            self.para_lines.append(line)
 | 
			
		||||
            self.endcur([self.stPARA])
 | 
			
		||||
            if self.state == self.stNONE:
 | 
			
		||||
                self.state = self.stPARA
 | 
			
		||||
                if self.laststate != self.stNONE:
 | 
			
		||||
                    self.text.write('\n\n')
 | 
			
		||||
                self.html.write('<p>')
 | 
			
		||||
 | 
			
		||||
    def end(self):
 | 
			
		||||
        self.endcur()
 | 
			
		||||
        self.text_txt = self.text.getvalue()
 | 
			
		||||
        self.text_html = self.html.getvalue()
 | 
			
		||||
        self.text.close()
 | 
			
		||||
        self.html.close()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Parse multiple lines of description as written in a metadata file, returning
 | 
			
		||||
# a single string in wiki format. Used for the Maintainer Notes field as well,
 | 
			
		||||
# because it's the same format.
 | 
			
		||||
def description_wiki(s):
 | 
			
		||||
    return s
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Parse multiple lines of description as written in a metadata file, returning
 | 
			
		||||
# a single string in HTML format.
 | 
			
		||||
def description_html(s, linkres):
 | 
			
		||||
    ps = DescriptionFormatter(linkres)
 | 
			
		||||
    for line in s.splitlines():
 | 
			
		||||
        ps.parseline(line)
 | 
			
		||||
    ps.end()
 | 
			
		||||
    return ps.text_html
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_yaml_srclib(metadatapath):
 | 
			
		||||
 | 
			
		||||
    thisinfo = {'RepoType': '',
 | 
			
		||||
| 
						 | 
				
			
			@ -734,7 +541,7 @@ def read_srclibs():
 | 
			
		|||
        srclibs[srclibname] = parse_yaml_srclib(metadatapath)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def read_metadata(xref=True, check_vcs=[], refresh=True, sort_by_time=False):
 | 
			
		||||
def read_metadata(check_vcs=[], refresh=True, sort_by_time=False):
 | 
			
		||||
    """Return a list of App instances sorted newest first
 | 
			
		||||
 | 
			
		||||
    This reads all of the metadata files in a 'data' repository, then
 | 
			
		||||
| 
						 | 
				
			
			@ -780,16 +587,6 @@ def read_metadata(xref=True, check_vcs=[], refresh=True, sort_by_time=False):
 | 
			
		|||
        check_metadata(app)
 | 
			
		||||
        apps[app.id] = app
 | 
			
		||||
 | 
			
		||||
    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.
 | 
			
		||||
        for appid, app in apps.items():
 | 
			
		||||
            try:
 | 
			
		||||
                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)))
 | 
			
		||||
 | 
			
		||||
    return apps
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1179,23 +976,3 @@ 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 application ID {appid}')
 | 
			
		||||
                                .format(appid=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 application ID {appid}')
 | 
			
		||||
                           .format(appid=appid))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ def main():
 | 
			
		|||
    metadata.warnings_action = options.W
 | 
			
		||||
    common.read_config(None)
 | 
			
		||||
 | 
			
		||||
    metadata.read_metadata(xref=True)
 | 
			
		||||
    metadata.read_metadata()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ def main():
 | 
			
		|||
    config = common.read_config(options)
 | 
			
		||||
 | 
			
		||||
    # Get all apps...
 | 
			
		||||
    allapps = metadata.read_metadata(xref=True)
 | 
			
		||||
    allapps = metadata.read_metadata()
 | 
			
		||||
    apps = common.read_app_args(options.appid, allapps, False)
 | 
			
		||||
 | 
			
		||||
    for appid, app in apps.items():
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,11 +234,11 @@ def update_wiki(apps, apks):
 | 
			
		|||
        wikidata += " - [https://f-droid.org/repository/browse/?fdid=" + appid + " view in repository]\n\n"
 | 
			
		||||
 | 
			
		||||
        wikidata += "=Description=\n"
 | 
			
		||||
        wikidata += metadata.description_wiki(app.Description) + "\n"
 | 
			
		||||
        wikidata += app.Description + "\n"
 | 
			
		||||
 | 
			
		||||
        wikidata += "=Maintainer Notes=\n"
 | 
			
		||||
        if app.MaintainerNotes:
 | 
			
		||||
            wikidata += metadata.description_wiki(app.MaintainerNotes) + "\n"
 | 
			
		||||
            wikidata += app.MaintainerNotes + "\n"
 | 
			
		||||
        wikidata += "\nMetadata: [https://gitlab.com/fdroid/fdroiddata/blob/master/metadata/{0}.yml current] [https://gitlab.com/fdroid/fdroiddata/commits/master/metadata/{0}.yml history]\n".format(appid)
 | 
			
		||||
 | 
			
		||||
        # Get a list of all packages for this application...
 | 
			
		||||
| 
						 | 
				
			
			@ -2120,16 +2120,6 @@ def read_names_from_apks(apps, apks):
 | 
			
		|||
                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()
 | 
			
		||||
| 
						 | 
				
			
			@ -2157,7 +2147,6 @@ def prepare_apps(apps, apks, repodir):
 | 
			
		|||
    """
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ savedir = os.path.join('metadata', 'dump_' + repo.git.describe())
 | 
			
		|||
if not os.path.isdir(savedir):
 | 
			
		||||
    os.mkdir(savedir)
 | 
			
		||||
 | 
			
		||||
apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
for appid, app in apps.items():
 | 
			
		||||
    savepath = os.path.join(savedir, appid + '.yaml')
 | 
			
		||||
    if hasattr(app, 'attr_to_field'):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,7 +133,7 @@ class MetadataTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.common.config = config
 | 
			
		||||
        fdroidserver.metadata.warnings_action = None
 | 
			
		||||
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        for appid in ('org.smssecure.smssecure', 'org.adaway',
 | 
			
		||||
                      'org.videolan.vlc', 'com.politedroid'):
 | 
			
		||||
            savepath = os.path.join('metadata', 'dump', appid + '.yaml')
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ class MetadataTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.metadata.warnings_action = None
 | 
			
		||||
 | 
			
		||||
        # rewrite metadata
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        for appid, app in allapps.items():
 | 
			
		||||
            if appid == 'fake.ota.update':
 | 
			
		||||
                fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ class MetadataTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.common.config = {'accepted_formats': ['yml']}
 | 
			
		||||
 | 
			
		||||
        # rewrite metadata
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        for appid, app in allapps.items():
 | 
			
		||||
            if appid == 'org.fdroid.fdroid':
 | 
			
		||||
                fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
 | 
			
		||||
| 
						 | 
				
			
			@ -185,7 +185,7 @@ class MetadataTest(unittest.TestCase):
 | 
			
		|||
        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
 | 
			
		||||
 | 
			
		||||
        # rewrite metadata
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        for appid, app in allapps.items():
 | 
			
		||||
            if appid == 'app.with.special.build.params':
 | 
			
		||||
                fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +258,7 @@ class MetadataTest(unittest.TestCase):
 | 
			
		|||
            randomlist = [os.path.basename(f)[:-4]] + randomlist
 | 
			
		||||
            i += 1
 | 
			
		||||
        os.chdir(testdir)
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata(xref=True, sort_by_time=True)
 | 
			
		||||
        allapps = fdroidserver.metadata.read_metadata(sort_by_time=True)
 | 
			
		||||
        allappids = []
 | 
			
		||||
        for appid, app in allapps.items():
 | 
			
		||||
            allappids.append(appid)
 | 
			
		||||
| 
						 | 
				
			
			@ -828,13 +828,6 @@ 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__))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
      ],
 | 
			
		||||
      "suggestedVersionName": "0.9",
 | 
			
		||||
      "suggestedVersionCode": "9",
 | 
			
		||||
      "description": "<p>In order to keep away curious eyes, SMS-bypass filters incoming SMS messages before they reach your inbox. Based on bughunter2.smsfilter.</p><p>Features:</p><ul><li> Discrete fake app \"Battery level\": Long tap on Battery percentage will show SMS.</li><li> Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings</li><li> Add contact from contact list</li><li> Export messages to a text file</li></ul>",
 | 
			
		||||
      "description": "In order to keep away curious eyes, SMS-bypass filters incoming SMS messages\nbefore they reach your inbox. Based on bughunter2.smsfilter.\n\nFeatures:\n\n* Discrete fake app \"Battery level\": Long tap on Battery percentage will show SMS.\n* Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings\n* Add contact from contact list\n* Export messages to a text file",
 | 
			
		||||
      "donate": "http://rodolphe.souchaud.free.fr/donate",
 | 
			
		||||
      "flattrID": "cad90e036b975ed129a3ce80a0750466",
 | 
			
		||||
      "issueTracker": "https://gitlab.com/souch/SMSbypass/issues",
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@
 | 
			
		|||
      ],
 | 
			
		||||
      "suggestedVersionName": "0.2.1",
 | 
			
		||||
      "suggestedVersionCode": "2000",
 | 
			
		||||
      "description": "<p>F-Droid can make use of system privileges or permissions to install, update and remove applications on its own. The only way to obtain those privileges is to become a system app.</p><p>This is where the Privileged Extension comes in - being a separate app and much smaller, it can be installed as a system app and communicate with the main app via AIDL IPC.</p><p>This has several advantages:</p><ul><li> Reduced disk usage in the system partition</li><li> System updates don't remove F-Droid</li><li> The process of installing into system via root is safer</li></ul><p>This is packaged as an OTA (Over-The-Air) update ZIP file.  It must be installed using TWRP or other Android recovery that can flash updates to the system from the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone APK is called F-Droid Privileged Extension.</p>",
 | 
			
		||||
      "description": "F-Droid can make use of system privileges or permissions to\ninstall, update and remove applications on its own. The only way to obtain those\nprivileges is to become a system app.\n\nThis is where the Privileged Extension comes in - being a separate app and much\nsmaller, it can be installed as a system app and communicate with the main app\nvia AIDL IPC.\n\nThis has several advantages:\n\n* Reduced disk usage in the system partition\n* System updates don't remove F-Droid\n* The process of installing into system via root is safer\n\nThis is packaged as an OTA (Over-The-Air) update ZIP file.  It must be installed\nusing TWRP or other Android recovery that can flash updates to the system from\nthe /data/data/org.fdroid.fdroid folder on the /data partition. The standalone\nAPK is called F-Droid Privileged Extension.",
 | 
			
		||||
      "donate": "https://f-droid.org/about",
 | 
			
		||||
      "issueTracker": "https://gitlab.com/fdroid/privileged-extension/issues",
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@
 | 
			
		|||
      ],
 | 
			
		||||
      "suggestedVersionName": "1.5",
 | 
			
		||||
      "suggestedVersionCode": "6",
 | 
			
		||||
      "description": "<p>Activates silent mode during calendar events.</p>",
 | 
			
		||||
      "description": "Activates silent mode during calendar events.",
 | 
			
		||||
      "issueTracker": "https://github.com/miguelvps/PoliteDroid/issues",
 | 
			
		||||
      "license": "GPL-3.0-only",
 | 
			
		||||
      "name": "Polite Droid",
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@
 | 
			
		|||
        "2.0"
 | 
			
		||||
      ],
 | 
			
		||||
      "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": "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\n\n\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\n\u6ca1\u770b\u5230\u60a8\u7684\u8bed\u8a00\uff1f\u5e2e\u5fd9\u7ffb\u8bd1\u672c\u5e94\u7528\u5427\uff1a\nhttps://www.transifex.com/projects/p/urzip\n\n\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\n",
 | 
			
		||||
      "issueTracker": "https://dev.guardianproject.info/projects/urzip/issues",
 | 
			
		||||
      "liberapayID": "9999999",
 | 
			
		||||
      "license": "GPL-3.0-only",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,15 @@
 | 
			
		|||
		<name>Battery level</name>
 | 
			
		||||
		<summary>Filter SMS and show them in a fake app</summary>
 | 
			
		||||
		<icon>souch.smsbypass.9.png</icon>
 | 
			
		||||
		<desc><p>In order to keep away curious eyes, SMS-bypass filters incoming SMS messages before they reach your inbox. Based on bughunter2.smsfilter.</p><p>Features:</p><ul><li> Discrete fake app "Battery level": Long tap on Battery percentage will show SMS.</li><li> Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings</li><li> Add contact from contact list</li><li> Export messages to a text file</li></ul></desc>
 | 
			
		||||
		<desc>In order to keep away curious eyes, SMS-bypass filters incoming SMS messages
 | 
			
		||||
before they reach your inbox. Based on bughunter2.smsfilter.
 | 
			
		||||
 | 
			
		||||
Features:
 | 
			
		||||
 | 
			
		||||
* Discrete fake app "Battery level": Long tap on Battery percentage will show SMS.
 | 
			
		||||
* Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings
 | 
			
		||||
* Add contact from contact list
 | 
			
		||||
* Export messages to a text file</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Phone & SMS</categories>
 | 
			
		||||
		<category>Phone & SMS</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +54,7 @@
 | 
			
		|||
		<name>Caffeine Tile</name>
 | 
			
		||||
		<summary>Test app for extracting icons when an XML one is default</summary>
 | 
			
		||||
		<icon>info.zwanenburg.caffeinetile.4.xml</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>Unknown</license>
 | 
			
		||||
		<categories>Development</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +83,7 @@
 | 
			
		|||
		<name>Duplicate Permisssions</name>
 | 
			
		||||
		<summary>Test app for all possible <uses-permissions></summary>
 | 
			
		||||
		<icon>duplicate.permisssions.9999999.png</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>Unknown</license>
 | 
			
		||||
		<categories>tests</categories>
 | 
			
		||||
		<category>tests</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +113,24 @@
 | 
			
		|||
		<lastupdated>2016-03-10</lastupdated>
 | 
			
		||||
		<name>fake.ota.update_1234</name>
 | 
			
		||||
		<summary>Tests whether OTA ZIP files are being include</summary>
 | 
			
		||||
		<desc><p>F-Droid can make use of system privileges or permissions to install, update and remove applications on its own. The only way to obtain those privileges is to become a system app.</p><p>This is where the Privileged Extension comes in - being a separate app and much smaller, it can be installed as a system app and communicate with the main app via AIDL IPC.</p><p>This has several advantages:</p><ul><li> Reduced disk usage in the system partition</li><li> System updates don't remove F-Droid</li><li> The process of installing into system via root is safer</li></ul><p>This is packaged as an OTA (Over-The-Air) update ZIP file.  It must be installed using TWRP or other Android recovery that can flash updates to the system from the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone APK is called F-Droid Privileged Extension.</p></desc>
 | 
			
		||||
		<desc>F-Droid can make use of system privileges or permissions to
 | 
			
		||||
install, update and remove applications on its own. The only way to obtain those
 | 
			
		||||
privileges is to become a system app.
 | 
			
		||||
 | 
			
		||||
This is where the Privileged Extension comes in - being a separate app and much
 | 
			
		||||
smaller, it can be installed as a system app and communicate with the main app
 | 
			
		||||
via AIDL IPC.
 | 
			
		||||
 | 
			
		||||
This has several advantages:
 | 
			
		||||
 | 
			
		||||
* Reduced disk usage in the system partition
 | 
			
		||||
* System updates don't remove F-Droid
 | 
			
		||||
* The process of installing into system via root is safer
 | 
			
		||||
 | 
			
		||||
This is packaged as an OTA (Over-The-Air) update ZIP file.  It must be installed
 | 
			
		||||
using TWRP or other Android recovery that can flash updates to the system from
 | 
			
		||||
the /data/data/org.fdroid.fdroid folder on the /data partition. The standalone
 | 
			
		||||
APK is called F-Droid Privileged Extension.</desc>
 | 
			
		||||
		<license>Apache-2.0</license>
 | 
			
		||||
		<categories>System</categories>
 | 
			
		||||
		<category>System</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +156,7 @@
 | 
			
		|||
		<name>No minSdkVersion or targetSdkVersion</name>
 | 
			
		||||
		<summary>An APK without any <uses-sdk> block in AndroidManifest.xml</summary>
 | 
			
		||||
		<icon>no.min.target.sdk.987.png</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>Unknown</license>
 | 
			
		||||
		<categories>Development</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +184,7 @@
 | 
			
		|||
		<name>OBB Main Old Version</name>
 | 
			
		||||
		<summary></summary>
 | 
			
		||||
		<icon>obb.main.oldversion.1444412523.png</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Development</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +219,7 @@
 | 
			
		|||
		<name>OBB Main Two Versions</name>
 | 
			
		||||
		<summary></summary>
 | 
			
		||||
		<icon>obb.main.twoversions.1101617.png</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Development</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -252,7 +277,7 @@
 | 
			
		|||
		<name>OBB Main/Patch Current</name>
 | 
			
		||||
		<summary></summary>
 | 
			
		||||
		<icon>obb.mainpatch.current.1619.png</icon>
 | 
			
		||||
		<desc><p>No description available</p></desc>
 | 
			
		||||
		<desc>No description available</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Development</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +310,7 @@
 | 
			
		|||
		<name>Polite Droid</name>
 | 
			
		||||
		<summary>Calendar tool</summary>
 | 
			
		||||
		<icon>com.politedroid.6.png</icon>
 | 
			
		||||
		<desc><p>Activates silent mode during calendar events.</p></desc>
 | 
			
		||||
		<desc>Activates silent mode during calendar events.</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Time</categories>
 | 
			
		||||
		<category>Time</category>
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +374,14 @@
 | 
			
		|||
		<name>urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234</name>
 | 
			
		||||
		<summary>一个实用工具,获取已安装在您的设备上的应用的有关信息</summary>
 | 
			
		||||
		<icon>info.guardianproject.urzip.100.png</icon>
 | 
			
		||||
		<desc><p>It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。</p><p>★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe 没看到您的语言?帮忙翻译本应用吧: https://www.transifex.com/projects/p/urzip</p><p>★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact</p></desc>
 | 
			
		||||
		<desc>It’s Urzip 是一个获得已安装 APK 相关信息的实用工具。它从您的设备上已安装的所有应用开始,一键触摸即可显示 APK 的指纹,并且提供到达 virustotal.com 和 androidobservatory.org 的快捷链接,让您方便地了解特定 APK 的档案。它还可以让您导出签名证书和生成 ApkSignaturePin Pin 文件供 TrustedIntents 库使用。
 | 
			
		||||
 | 
			
		||||
★ Urzip 支持下列语言: Deutsch, English, español, suomi, 日本語, 한국어, Norsk, português (Portugal), Русский, Slovenščina, Türkçe
 | 
			
		||||
没看到您的语言?帮忙翻译本应用吧:
 | 
			
		||||
https://www.transifex.com/projects/p/urzip
 | 
			
		||||
 | 
			
		||||
★ 致用户:我们还缺少你喜欢的功能?发现了一个 bug?请告诉我们!我们乐于听取您的意见。请发送电子邮件至: support@guardianproject.info 或者加入我们的聊天室 https://guardianproject.info/contact
 | 
			
		||||
</desc>
 | 
			
		||||
		<license>GPL-3.0-only</license>
 | 
			
		||||
		<categories>Development,GuardianProject,1,2.0</categories>
 | 
			
		||||
		<category>Development</category>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.update.options = fdroidserver.common.options
 | 
			
		||||
        os.chdir(tmptestsdir)
 | 
			
		||||
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        fdroidserver.update.copy_triple_t_store_metadata(apps)
 | 
			
		||||
 | 
			
		||||
        # TODO ideally, this would compare the whole dict like in metadata.TestCase's test_read_metadata()
 | 
			
		||||
| 
						 | 
				
			
			@ -236,7 +236,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.update.config = config
 | 
			
		||||
        fdroidserver.update.options = fdroidserver.common.options
 | 
			
		||||
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        self.assertTrue(packageName in apps)
 | 
			
		||||
        fdroidserver.update.copy_triple_t_store_metadata(apps)
 | 
			
		||||
        correctlocales = ['de-DE', 'en-US', 'fr-FR', 'kn-IN']
 | 
			
		||||
| 
						 | 
				
			
			@ -382,7 +382,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.update.options.rename_apks = False
 | 
			
		||||
        fdroidserver.update.options.allow_disabled_algorithms = False
 | 
			
		||||
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        knownapks = fdroidserver.common.KnownApks()
 | 
			
		||||
        apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False)
 | 
			
		||||
        self.assertEqual(len(apks), 17)
 | 
			
		||||
| 
						 | 
				
			
			@ -439,7 +439,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.update.options.rename_apks = False
 | 
			
		||||
        fdroidserver.update.options.allow_disabled_algorithms = False
 | 
			
		||||
 | 
			
		||||
        fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        fdroidserver.metadata.read_metadata()
 | 
			
		||||
        knownapks = fdroidserver.common.KnownApks()
 | 
			
		||||
        apkcache = fdroidserver.update.get_cache()
 | 
			
		||||
        self.assertEqual(2, len(apkcache))
 | 
			
		||||
| 
						 | 
				
			
			@ -817,7 +817,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        fdroidserver.update.options.rename_apks = False
 | 
			
		||||
        fdroidserver.update.options.allow_disabled_algorithms = False
 | 
			
		||||
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        knownapks = fdroidserver.common.KnownApks()
 | 
			
		||||
        apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False)
 | 
			
		||||
        fdroidserver.update.translate_per_build_anti_features(apps, apks)
 | 
			
		||||
| 
						 | 
				
			
			@ -860,16 +860,16 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        testfile = 'metadata/info.guardianproject.urzip.yml'
 | 
			
		||||
        # create empty 0 byte .yml file, run read_metadata, it should work
 | 
			
		||||
        open(testfile, 'a').close()
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        self.assertEqual(1, len(apps))
 | 
			
		||||
        os.remove(testfile)
 | 
			
		||||
 | 
			
		||||
        # test using internal template
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        self.assertEqual(0, len(apps))
 | 
			
		||||
        fdroidserver.update.create_metadata_from_template(apk)
 | 
			
		||||
        self.assertTrue(os.path.exists(testfile))
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        self.assertEqual(1, len(apps))
 | 
			
		||||
        for app in apps.values():
 | 
			
		||||
            self.assertEqual('urzip', app['Name'])
 | 
			
		||||
| 
						 | 
				
			
			@ -882,7 +882,7 @@ class UpdateTest(unittest.TestCase):
 | 
			
		|||
        shutil.copy(os.path.join(localmodule, 'examples', 'template.yml'), tmptestsdir)
 | 
			
		||||
        fdroidserver.update.create_metadata_from_template(apk)
 | 
			
		||||
        self.assertTrue(os.path.exists(testfile))
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata(xref=True)
 | 
			
		||||
        apps = fdroidserver.metadata.read_metadata()
 | 
			
		||||
        self.assertEqual(1, len(apps))
 | 
			
		||||
        for app in apps.values():
 | 
			
		||||
            self.assertEqual('urzip', app['Name'])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,104 +0,0 @@
 | 
			
		|||
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
 | 
			
		||||
| 
						 | 
				
			
			@ -1,551 +0,0 @@
 | 
			
		|||
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
 | 
			
		||||
| 
						 | 
				
			
			@ -1,556 +0,0 @@
 | 
			
		|||
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
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue