Getting started on Android

Creating a new project

Open Android Studio and select File > New > New Project… to create a new project for your application:

create-new-project

  1. Choose the correct template for your project. In this example, you’ll use Empty Views Activity:

app-template

  1. When prompted, choose your app name (Nutrient Demo) and set the Save location, Language, and Minimum SDK of your choice:

app-options

  1. Click Finish to save the project to your default project location.

Adding Nutrient to your project

  1. In the settings.gradle.kts file at the root of your project, add the Nutrient Maven repository:

dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		google()
		mavenCentral()
		maven {
			url = uri("https://my.nutrient.io/maven")
		}
	}
}
  1. In your app/build.gradle.kts file, add the Nutrient dependency:

dependencies {
	implementation("com.pspdfkit:pspdfkit:2024.9.0")
}

Configuring your build

Nutrient is supported on Android devices running API level 21 and newer and targeting the latest stable Android API version (API 35). Furthermore, Nutrient requires apps to enable, at minimum, Java 8 language features to build — though we recommend the default 17.

Inside your app/build.gradle.kts file, make sure to have the following configuration:

android {
    compileSdk = 35

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 21
        targetSdk = 35
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}
Information

With minSdk set to 21, your app is available on more than 98.6 percent of devices on the Google Play Store (last update: October 2023).

Displaying a PDF

To verify Nutrient was successfully integrated into your app, try opening a PDF file with the ready-to-use PdfActivity:

  1. Copy a PDF document into the assets directory of your Android project — for example, to src/main/assets/my-document.pdf.

  2. Add PdfActivity to your app’s AndroidManifest.xml:

<application>
    ...

    <activity
        android:name="com.pspdfkit.ui.PdfActivity"
        android:windowSoftInputMode="adjustNothing" />
</application>
  1. You can now start PdfActivity with the document from your assets directory:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        val uri = Uri.parse("file:///android_asset/my-document.pdf")
        val config = PdfActivityConfiguration.Builder(this).build()
        PdfActivity.showDocument(this, uri, config)
    }
}
  1. PdfActivity will now present the document from your assets directory.

Information

Note that the android_assets folder is read-only and is used as a simple example. For actual usage, you might want to copy the file to a local folder first for full read and write privileges. You can read more about this in our guide on opening PDFs from URLs and in Google’s Data and file storage overview.

Next steps

Creating a new project

Open Android Studio and select File > New > New Project… to create a new project for your application:

create-new-project

  1. Choose the correct template for your project. In this example, you’ll use Empty Activity:

app-template

  1. When prompted, choose your app name (Nutrient Demo) and set the Save location, Language, and Minimum SDK of your choice:

app-options

  1. Click Finish to save the project to your default project location.

Adding Nutrient to your project

  1. In the settings.gradle.kts file at the root of your project, add the Nutrient Maven repository:

dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		google()
		mavenCentral()
		maven {
			url = uri("https://my.nutrient.io/maven")
		}
	}
}
  1. In your app/build.gradle.kts file, add the Nutrient dependency:

dependencies {
	implementation("com.pspdfkit:pspdfkit:2024.9.0")
}

Configuring your build

Nutrient is supported on Android devices running API level 21 and newer and targeting the latest stable Android API version (API 35). Furthermore, Nutrient requires apps to enable, at minimum, Java 8 language features to build — though we recommend the default 17.

Inside your app/build.gradle.kts file, make sure to have the following configuration:

android {
    compileSdk = 35

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 21
        targetSdk = 35
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}
Information

With minSdk set to 21, your app is available on more than 98.6 percent of devices on the Google Play Store (last update: October 2023).

Displaying a PDF

To verify Nutrient was successfully integrated into your app, try opening a PDF file with the ready-to-use composable DocumentView:

  1. Copy a PDF document into the assets directory of your Android project — for example, to src/main/assets/my-document.pdf.

  2. Make sure you’re using AppCompatActivity as your parent activity.

  3. Because of the AppCompat requirement, you also need set the theme accordingly in the AppCompat theme Activity inside your app’s AndroidManifest.xml:

...
        <activity
            android:name=".MainActivity"
...
            android:theme="@style/Theme.AppCompat.NoActionBar">
        </activity>
<application>
  1. Add DocumentView in any composable scope:

class MainActivity : AppCompatActivity() {
    @OptIn(ExperimentalPSPDFKitApi::class)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Surface {
                val uri = Uri.parse("file:///android_asset/my-document.pdf")
                DocumentView(
                    documentUri = uri,
                    modifier = Modifier.fillMaxSize()
                )
            }
        }
    }
}
  1. DocumentView will now present the document from your assets directory.

Information

Note that the android_assets folder is read-only and is used as a simple example. For actual usage, you might want to copy the file to a local folder first for full read and write privileges. You can read more about this in our guide on opening PDFs from URLs and in Google’s data and file storage overview guide.

Next steps

Adding Nutrient to your project

  1. In the settings.gradle.kts file at the root of your project, add the Nutrient Maven repository:

dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		google()
		mavenCentral()
		maven {
			url = uri("https://my.nutrient.io/maven")
		}
	}
}
  1. In your app/build.gradle.kts file, add the Nutrient dependency:

dependencies {
	implementation("com.pspdfkit:pspdfkit:2024.9.0")
}

Configuring your build

Nutrient is supported on Android devices running API level 21 and newer and targeting the latest stable Android API version (API 35). Furthermore, Nutrient requires apps to enable, at minimum, Java 8 language features to build — though we recommend the default 17.

Inside your app/build.gradle.kts file, make sure to have the following configuration:

android {
    compileSdk = 35

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 21
        targetSdk = 35
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}
Information

With minSdk set to 21, your app is available on more than 98.6 percent of devices on the Google Play Store (last update: October 2023).

Displaying a PDF

To verify Nutrient was successfully integrated into your app, try opening a PDF file with the ready-to-use PdfActivity:

  1. Copy a PDF document into the assets directory of your Android project — for example, to src/main/assets/my-document.pdf.

  2. Add PdfActivity to your app’s AndroidManifest.xml:

<application>
    ...

    <activity
        android:name="com.pspdfkit.ui.PdfActivity"
        android:windowSoftInputMode="adjustNothing" />
</application>
  1. You can now start PdfActivity with the document from your assets directory:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        val uri = Uri.parse("file:///android_asset/my-document.pdf")
        val config = PdfActivityConfiguration.Builder(this).build()
        PdfActivity.showDocument(this, uri, config)
    }
}
  1. PdfActivity will now present the document from your assets directory.

Information

Note that the android_assets folder is read-only and is used as a simple example. For actual usage, you might want to copy the file to a local folder first for full read and write privileges. You can read more about this in our guide on opening PDFs from URLs and in Google’s Data and file storage overview.

Next steps

Adding Nutrient to your project

Nutrient Android SDK can be imported manually. Below are the steps to follow if you wish to do so.

  1. Download the Nutrient Android SDK library AAR bundle from our Maven repository.

  2. Copy the Nutrient AAR file into your project’s libs directory, and rename it to pspdfkit-2024.9.0.aar.

  3. Include Nutrient as a file-based dependency in your project, and provide all the transitive dependencies required by Nutrient (as shown below):

dependencies {
	implementation(files("libs/pspdfkit-2024.9.0.aar")

	// You must include all transitive dependencies of Nutrient.
	implementation("androidx.appcompat:appcompat:1.7.0")
	implementation("androidx.cardview:cardview:1.0.0")
	implementation("androidx.compose.material:material:1.7.5")
	implementation("androidx.compose.runtime:runtime-rxjava3:1.7.5")
	implementation("androidx.compose.runtime:runtime:1.7.5")
	implementation("androidx.compose.ui:ui:1.7.5")
	implementation("androidx.constraintlayout:constraintlayout:2.2.0")
	implementation("androidx.exifinterface:exifinterface:1.3.7")
	implementation("androidx.fragment:fragment-ktx:1.8.5")
	implementation("androidx.gridlayout:gridlayout:1.0.0")
	implementation("androidx.legacy:legacy-support-v4:1.0.0")
	implementation("androidx.palette:palette:1.0.0")
	implementation("androidx.preference:preference:1.2.1")
	implementation("androidx.recyclerview:recyclerview:1.3.2")
	implementation("androidx.viewpager2:viewpager2:1.1.0")
	implementation("androidx.webkit:webkit:1.12.1")
	implementation("com.getkeepsafe.relinker:relinker:1.4.5")
	implementation("com.google.android.material:material:1.12.0")
	implementation("io.reactivex.rxjava3:rxandroid:3.0.2")
	implementation("io.reactivex.rxjava3:rxjava:3.1.6")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20")
	implementation("org.jetbrains.kotlin:kotlin-stdlib:2.0.20")
	implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1")
}

ℹ️ Note: Starting with the Android Gradle plugin 3.5.0, the use of flatDir repositories to include local AAR files is no longer supported. If you’ve been using this technique, you need to migrate to file-based dependencies when updating the Android Gradle plugin to 3.5.0.

The following library is included in the list of transitive dependencies:

  • ReLinker — to work around some versions of Android that have unreliable PackageManager implementations

This optional library can be omitted from the list of transitive dependencies if you don’t want to bundle it with your app. In such a case, Nutrient will detect the absence of this dependency and fall back to different implementations.

ProGuard

There’s no need to specify additional ProGuard rules since PSPDFKit uses consumersProguardFiles to keep ProGuard from obfuscating the required symbols. If you want to check out the rules, look in the proguard.txt file, which is located inside the PSPDFKit .aar:

cd [YOUR_AAR_LOCATION]
	unzip [YOUR_AAR_NAME].aar -d aar-contents
	cat aar-contents/proguard.txt

Displaying a PDF

To verify Nutrient was successfully integrated into your app, try opening a PDF file with the ready-to-use PdfActivity:

  1. Copy a PDF document into the assets directory of your Android project — for example, to src/main/assets/my-document.pdf.

  2. Add PdfActivity to your app’s AndroidManifest.xml:

<application>
    ...

    <activity
        android:name="com.pspdfkit.ui.PdfActivity"
        android:windowSoftInputMode="adjustNothing" />
</application>
  1. You can now start PdfActivity with the document from your assets directory:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        val uri = Uri.parse("file:///android_asset/my-document.pdf")
        val config = PdfActivityConfiguration.Builder(this).build()
        PdfActivity.showDocument(this, uri, config)
    }
}
  1. PdfActivity will now present the document from your assets directory.

Information

Note that the android_assets folder is read-only and is used as a simple example. For actual usage, you might want to copy the file to a local folder first for full read and write privileges. You can read more about this in our guide on opening PDFs from URLs and in Google’s Data and file storage overview.

Next steps

Cloning Nutrient Catalog

  1. Open the terminal app and change the current working directory. In this case, use the ~/Downloads directory:

cd ~/Downloads
  1. Clone the Nutrient Android SDK Catalog repository:

git clone https://github.com/PSPDFKit/pspdfkit-android-catalog.git
  1. Start Android Studio and open the cloned project folder from the File > Open… menu.

  2. Wait a few moments for Gradle to sync the project.

  3. Make sure you either set up an emulator with the AVD or connect an Android device.

  4. Build and run the app configuration using the Run ‘app’ button in Android Studio.

build-run-catalog-app

  1. You’ll see the Nutrient Catalog app on your device:

catalog-view

Next steps