All About Descriptions, Graphics, and Screenshots

Each app can have complete app store content, including localized descriptions, feature graphics, and screenshots (as of v0.103 of the F-Droid client app and v0.8 of fdroidserver). This is possible both when apps are added via build metadata as well as when including pre-built files in a simple repository. There are three paths to including app store content for apps (in order of preference):

There are two data formats:

  • descriptive materials in plain text or HTML
  • graphics and screenshots as PNG or JPEG files

One important detail: dangerous and unneeded metadata is stripped from image files before they are included in the repo. For example, JPEG EXIF data has security issues, and it is not needed to display images. This can also mean that the images are recompressed.

In the app’s source repository

There are two options for including the app store materials in an app’s source repository: fastlane supply and Triple-T Gradle Play Publisher. Both of these are free software tools that integrate into an Android developer’s workflow. Once the files are included in the app’s source repo, and those files are included in a tagged release of the app, F-Droid will include all those files.

In the end, it is not actually necessary to actually install or use either fastlane supply nor Gradle Play Publisher. F-Droid includes these files purely based on the standard file layout that those tools use.

All the localized descriptions and graphics will automatically show up in the F-Droid repo once they are available in the source repo of a release that the repo builds. For example, if these files are included in a git repo’s master branch but not yet in a tagged release, they will not be included.

The last important detail is that the texts in the app’s metadata file will override all other descriptive texts from Fastlane/Triple-T. That is specifically Name, Summary, and Description. Once an app’s descriptive texts have been moved into the source repo, then file a merge request or issue to remove Summary and Description from the app’s metadata file.

Here’s the general rule of filling the index from the metadata sources:

metadata file --> fdroiddata localized files --> fastlane/triple-t in app source

For things that can also be scraped from the APK, then we get:

metadata file --> fdroiddata localized files --> fastlane/triple-t in app source --> APK

In the app’s build metadata in an fdroiddata collection

All the app store materials can also be added to any fdroiddata repository of build metadata. This follows a file layout modeled after fastlane supply, modified to fit into the fdroiddata workflow. Any files in this layout will be copied into the repo and added to the repo’s index file by fdroid update.

- <fdroiddata>/
  └── metadata/
      └── <package-id>/
          └── <locale>/
              ├── full_description.txt
              ├── short_description.txt
              ├── title.txt
              ├── video.txt
              ├── changelogs/
              │   ├── <version-code>.txt
              │   └── <version-code>.txt
              └── images/
                  ├── featureGraphic.png
                  ├── icon.png
                  ├── promoGraphic.png
                  ├── tvBanner.png
                  ├── phoneScreenshots/
                  │   └── *.png
                  ├── sevenInchScreenshots/
                  │   └── *.png
                  ├── tenInchScreenshots/
                  │   └── *.png
                  ├── tvScreenshots/
                  │   └── *.png
                  └── wearScreenshots/
                      └── *.png

The images must be either JPEGs or PNGs.

Example:

Directly in the F-Droid repo

The ultimate destination for files from the app’s source repo and fdroiddata metadata sub-directories is in the F-Droid repo. The text all gets included into the index file (aka index-v1.json). All of the graphics files can be directly included in the repo. If graphics files are also in the app’s source or fdroiddata, then the files directly in the repo will be overwritten. The text files from the fastlane layout are ignored if they are in the repo.

- fdroid/
  └── repo/
      └── <package-id>/
          └── <locale>/
              ├── featureGraphic.png
              ├── icon.png
              ├── promoGraphic.png
              ├── tvBanner.png
              ├── phoneScreenshots/
              │   └── *.png
              ├── sevenInchScreenshots/
              │   └── *.png
              ├── tenInchScreenshots/
              │   └── *.png
              ├── tvScreenshots/
              │   └── *.png
              └── wearScreenshots/
                  └── *.png

fdroid update adds all the graphics files it finds in the repo to the index. fdroid server update will sync all of the files in the repo to the various locations where the repo is actually hosted.