"description":"For every app on F-Droid a metadata file in the format of <application-id>.yml have to be provided, in order to build an app or check or if it has been updated. See https://f-droid.org/docs/Build_Metadata_Reference for a complete reference of a metadata file.",
"type":"object",
"properties":{
"AntiFeatures":{
"description":"Any number of anti-features the application has.",
"$ref":"#/definitions/anti_features"
},
"Categories":{
"description":"Any number of categories for the application to be placed in.",
"description":"The lowercase hex value of the SHA-256 fingerprint of the signing certificate of an app. If an APK of that app is not signed by one of these keys, it will not be included in the repository.",
"description":"This is a multi-line field using the same rules and syntax as the description. It's used to record notes for F-Droid maintainers to assist in maintaining and updating the application in the repository.",
"description":"Specifies to build from a subdirectory of the checked out source code. Normally this directory is changed to before building.",
"type":"string"
},
"submodules":{
"description":"Use if the project (git only) has submodules - causes git submodule update --init --recursive to be executed after the source is cloned.",
"description":"Specifies a script to be run using sudo bash -x -c \"xxxx\" in the Buildserver VM guest. This script is run with full root privileges, but the state will be reset after each build.",
"description":"Time limit for this build (in seconds). After time is up, Buildserver VM is forcefully terminated. The default is 7200 (2 hours); 0 means no limit.",
"description":"The sdk location in the repo is in an old format, or the build.xml is expecting such. The 'new' format is sdk.dir while the VERY OLD format is sdk-location.",
"description":"Specifies a particular SDK target for compilation, overriding the value defined in the code by upstream. This has different effects depending on what build system used — this flag currently affects Ant, Maven and Gradle projects only.",
"description":"By default, 'android update' is used in Ant builds to generate or update the project and all its referenced projects. Specifying update=no bypasses that. Note that this is useless in builds that don't use Ant.",
"description":"If specified, the package version in AndroidManifest.xml is replaced with the version name for the build as specified in the metadata.",
"description":"If specified, the package version code in the AndroidManifest.xml is replaced with the version code for the build. See also forceversion.",
"description":"Comma-separated list of source libraries or Android projects. Each item is of the form name@rev where name is the predefined source library name and rev is the revision or tag to use in the respective source control.",
"description":"Apply patch(es). 'x' names one (or more - comma-separated) files within a directory below the metadata, with the same name as the metadata file but without the extension. Each of these patches is applied to the code in turn.",
"description":"Specifies a shell command (or commands - chain with &&) to run before the build takes place.",
"$ref":"#/definitions/string_list"
},
"scanignore":{
"description":"Enables one or more files/paths to be excluded from the scan process. This should only be used where there is a very good reason, and probably accompanied by a comment explaining why it is necessary.",
"$ref":"#/definitions/string_list"
},
"scandelete":{
"description":"When running the scan process, any files that trigger errors - like binaries - will be removed. It acts just like scanignore, but instead of ignoring the files, it removes them.",
"description":"As for 'prebuild', but runs during the actual build phase (but before the main Ant/Maven build). Use this only for actions that do actual building. Any preparation of the source code should be done using 'init' or 'prebuild'.",
"$ref":"#/definitions/string_list"
},
"postbuild":{
"description":"Specifies a single or a list of shell commands to run after the build takes place.",
"description":"Version of the NDK to use in this build.",
"type":"string"
},
"gradle":{
"description":"Build with Gradle instead of Ant, specifying what flavours to use. Flavours are case sensitive since the path to the output APK is as well.",
"description":"Specify an alternate set of Ant commands (target) instead of the default 'release'. It can't be given any flags, such as the path to a build.xml.",
"description":"Don't check that the version name and code in the resulting APK are correct by looking at the build output - assume the metadata is correct.",
"description":"If this field is present, the application does not get put into the public index. The value should be a description of why the application is disabled.",
"description":"This determines the number of versions to keep. The older versions of the app are moved to the archive repo, if one is configured. Defaults to 3.",
"description":"This determines the method used for auto-generating new builds when new releases are available - in other words, adding a new Build Version line to the metadata.",
"description":"This determines the method using for determining when new releases are available - in other words, the updating of the CurrentVersion and CurrentVersionCode fields in the metadata by the fdroid checkupdates process.",
"description":"A list of operations to be applied to the vercode obtained by the defined UpdateCheckMode. %c will be replaced by the actual vercode, and each string will be passed to python's eval function to calculate a version code.",
"description":"When checking for updates (via UpdateCheckMode) this can be used to specify a regex which, if matched against the version name, causes that version to be ignored.",
"type":"string"
},
"UpdateCheckName":{
"description":"When checking for updates (via UpdateCheckMode) this can be used to specify the package name to search for. Useful when apps have a static package name but change it programmatically in some app flavors, by e.g. appending “.open” or “.free” at the end of the package name.",
"description":"Used in conjunction with UpdateCheckMode for certain modes.",
"type":"string"
},
"CurrentVersion":{
"description":"The name of the version that is the recommended release. There may be newer versions of the application than this (e.g. unstable versions), and there will almost certainly be older ones.",
"type":"string"
},
"CurrentVersionCode":{
"description":"The version code corresponding to the CurrentVersion field.",
"type":"integer"
},
"NoSourceSince":{
"description":"In case we are missing the source code for the CurrentVersion reported by Upstream, or that Non-Free elements have been introduced, this defines the first version that began to miss source code.",