Java Kotlin Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Metal Only Android App

Codacy Badge

Diese App bringt den Internet Radio Stream von auf Android, wo man 24 Stunden am Tag Rock und Metal hören kann. Außerdem enthält sie einige Sender-spezifische Funktionen, wie das Senden von Musik-Wünschen oder Grüßen.

Die App kann über Google Play heruntergeladen werden. Probleme und Feature-Wünsche können an gesendet werden.

Ursprünglich wurde die App von @rbrtslmn und @michael-busch entwickelt. News gibt es primär unter

Table of Contents


Send Feedback and Report Errors

The easiest option is to use the feedback functionality in the app. It automatically includes the most important information in the email template. If it's not possible to use the feedback function, try to answer the following questions:

  • Which device do you have and which Android version is running on it?
  • What did you do?
  • What happened and what would you exptected to happen instead?

You can add the issues directly to the issue tracker:

Help with App Development

We're using the gradle build system. I strongly recommend Android Studio to develop.

Currently, the app is mainly written in Java but a migration to kotlin has been started in May 2017. New code should be written in kotlin if possible.

Getting started

  1. Fork this project.
  2. Import the project into android studio (Check out from Version Control, select github or git)
  3. Create a branch to work on. Then fix bugs, implement features, ...
  4. Push on your fork
  5. Create a Pull request with base branch Codingspezis/metal-only develop

See also

Additional gradle files

You can create a in the project root with the following content:


file-collection refers to similarly named files residing in the same folder, e.g. metalonly.signing.gradle and metalonly.signing.keystore. The property metalonly.signing can be re-used to point to the key-store etc. Please refer to the build.gradle files which additionals exist. Here are some templates for the ones currently used:

android {
  defaultConfig {
    manifestPlaceholders = [fabric_io_id: "replace-me"]
// metalonly.signing
android {
  signingConfigs {
    release {
      storeFile file("metalonly.signing")+".keystore")
      storePassword "replace-me"
      keyAlias "replace-me"
      keyPassword "replace-me"

  buildTypes {
    release {
      signingConfig signingConfigs.release

Please note: the fabric key added to the git is not the one the app is delivered with. It was only added so the app can be built without sharing the official key.

Useful Knowledge

It may be useful to check for dependency updates once in a while. We're using a gradle plugin for that: Execute ./gradlew dependencyUpdates to list updates. Note: for some reason, the report may include false positives, i.e. non-existing updates.

Used Libraries and Software

Build Time dependencise (i.e. not-packaged):

Project Organization

The project has been split into multiple modules to enforce encapsulation. See Understanding Onion Architecture for more information. In addition to the onion architecture, we will also split out some functionality for easier re-use later, e.g. the json API implementation. The current goal is to split the project into the following sub-modules:

  • core will contain only data models and code related to these models. There should be no dependency on Android. It corresponds to the domain layer.
  • :metal-only-client-library will contain the json model and the API implementation. It may enable the re-use of the API implementation in other projects. The service implementations rely on this library.
  • services will hold implementations of our business logic. This layer responds to requests from the UI or system handles. It's a intermediate between the app and the infrastructure layer.
  • infrastructure provides specific implementations for the service layer to handle logging and data storage.
  • app will contain Android-specific implementations like Activities and Services that calls on the service layer