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.
Set your project’s source and target compatibility values to Java 8:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Add the -Xplugin:Manifold javac argument to connect Manifold with the compiler.
// Manifold Javac plugin
getTasks().withType(JavaCompile) {
options.compilerArgs += ['-Xplugin:Manifold']
}
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.
compileOnly 'systems.manifold:manifold:2024.1.42'
implementation 'systems.manifold:manifold-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-ext:2024.1.42'
implementation 'systems.manifold:manifold-ext-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-props:2024.1.42'
implementation 'systems.manifold:manifold-props-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-graphql:2024.1.42'
implementation 'systems.manifold:manifold-graphql-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-json:2024.1.42'
implementation 'systems.manifold:manifold-json-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-xml:2024.1.42'
implementation 'systems.manifold:manifold-xml-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-yaml:2024.1.42'
implementation 'systems.manifold:manifold-yaml-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-csv:2024.1.42'
implementation 'systems.manifold:manifold-csb-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-properties:2024.1.42'
compileOnly 'systems.manifold:manifold-image:2024.1.42'
compileOnly 'systems.manifold:manifold-js:2024.1.42'
implementation 'systems.manifold:manifold-js-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-templates:2024.1.42'
implementation 'systems.manifold:manifold-templates-rt:2024.1.42'
compileOnly 'systems.manifold:manifold-strings:2024.1.42'
compileOnly 'systems.manifold:manifold-exceptions:2024.1.42'
compileOnly 'systems.manifold:manifold-preprocessor:2024.1.42'
compileOnly 'systems.manifold:manifold-preprocessor-android-syms:2024.1.42'
implementation 'systems.manifold:manifold-science:2024.1.42'
implementation 'systems.manifold:manifold-collections:2024.1.42'
implementation 'systems.manifold:manifold-io:2024.1.42'
implementation 'systems.manifold:manifold-text:2024.1.42'
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.
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'
}