Using Manifold with Android Studio

Android Studio’s support for Java 8 features enables Android applications to work directly with Manifold. This document provides supplementary configuration information to elp you setup your Android project to use Manifold.

🛈 Note, you can also develop Android applications with IntelliJ IDEA using the Android plugin along with the Manifold plugin.

Get the Manifold plugin

Get the Manifold plugin directly from within Android Studio:
Settings | Plugins | Marketplace | search "Manifold"

You must restart Android Studio to enable the plugin.

Java 8 Source and Target Compatibility

Set your project’s source and target compatibility values to Java 8:

android {

  ...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Javac Plugin

Add the -Xplugin:Manifold javac argument to connect Manifold with the compiler.

// Manifold Javac plugin
getTasks().withType(JavaCompile) {
    options.compilerArgs += ['-Xplugin:Manifold']
}

Manifold Dependencies

You can conveniently copy/paste from the following list of the latest Manifold dependencies. Note the distinction between compileOnly and implementation scoping. Manifold dependencies that operate exclusively within the Java compiler are only accessible from the processor path, therefore they have no impact on your runtime distribution.

Manifold Core

compileOnly 'systems.manifold:manifold:2024.1.42'
implementation 'systems.manifold:manifold-rt:2024.1.42'

Manifold : Extensions

compileOnly 'systems.manifold:manifold-ext:2024.1.42'
implementation 'systems.manifold:manifold-ext-rt:2024.1.42'

Manifold : Props

compileOnly 'systems.manifold:manifold-props:2024.1.42'
implementation 'systems.manifold:manifold-props-rt:2024.1.42'

Manifold : GraphQL

compileOnly 'systems.manifold:manifold-graphql:2024.1.42'
implementation 'systems.manifold:manifold-graphql-rt:2024.1.42'

Manifold : JSON

compileOnly 'systems.manifold:manifold-json:2024.1.42'
implementation 'systems.manifold:manifold-json-rt:2024.1.42'

Manifold : XML

compileOnly 'systems.manifold:manifold-xml:2024.1.42'
implementation 'systems.manifold:manifold-xml-rt:2024.1.42'

Manifold : YAML

compileOnly 'systems.manifold:manifold-yaml:2024.1.42'
implementation 'systems.manifold:manifold-yaml-rt:2024.1.42'

Manifold : CSV

compileOnly 'systems.manifold:manifold-csv:2024.1.42'
implementation 'systems.manifold:manifold-csb-rt:2024.1.42'

Manifold : Properties Files

compileOnly 'systems.manifold:manifold-properties:2024.1.42'

Manifold : Image Files

compileOnly 'systems.manifold:manifold-image:2024.1.42'

Manifold : JavaScript

compileOnly 'systems.manifold:manifold-js:2024.1.42'
implementation 'systems.manifold:manifold-js-rt:2024.1.42'

Manifold : Templates

compileOnly 'systems.manifold:manifold-templates:2024.1.42'
implementation 'systems.manifold:manifold-templates-rt:2024.1.42'

Manifold : String Interpolation

compileOnly 'systems.manifold:manifold-strings:2024.1.42'

Manifold : (Un)checked Exceptions

compileOnly 'systems.manifold:manifold-exceptions:2024.1.42'

Manifold : Preprocessor

compileOnly 'systems.manifold:manifold-preprocessor:2024.1.42'

Manifold : Preprocessor : Android Symbols

compileOnly 'systems.manifold:manifold-preprocessor-android-syms:2024.1.42'

Manifold : Science

implementation 'systems.manifold:manifold-science:2024.1.42'

Manifold : Collections Extension

implementation 'systems.manifold:manifold-collections:2024.1.42'

Manifold : IO Extensions

implementation 'systems.manifold:manifold-io:2024.1.42'

Manifold : Text Extensions

implementation 'systems.manifold:manifold-text:2024.1.42'

Resources

If you use a type manifold that is based on resource files such as GraphQL, JSON, Templates, etc. you must place the resource files in the source directory along with your Java files. Do NOT place them in the res or assets directories.

echo method

Preprocessor and build variant symbols

If you use the preprocessor, you can directly reference Android build variant symbols with the manifold-preprocessor-android-syms dependency.

#if FLAVOR == "paid"
  @Override
  public void specialMethod(Foo foo) {
  ...
  }
#endif

build.gradle

dependencies {
    ...
    compileOnly 'systems.manifold:manifold-preprocessor:2024.1.42'
    compileOnly 'systems.manifold:manifold-preprocessor-android-syms:2024.1.42'
}