diff mupdf-source/docs/guide/using-with-android.md @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/docs/guide/using-with-android.md	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,195 @@
+# Using with Android
+
+## Introduction
+
+This document outlines the steps necessary to use the MuPDF Android Library in various ways.
+
+First, we show you how to embed MuPDF in your app. Then, we explain how to
+customize the viewer if you need to change how it looks or behaves. Finally, we
+tell you where to go if you need to do work on the library itself.
+
+Embedding the viewer in your app provides an activity that you can start to
+view PDF documents from within your app. This should be enough for most use
+cases.
+
+## Acquire a valid license
+
+### Open Source license
+
+If your software is open source, you may use MuPDF under the terms of the
+[GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html).
+
+This means that *all of the source code* for your *complete* app must be
+released under a compatible open source license!
+
+It also means that you may *not* use any proprietary closed source libraries or
+components in your app. This includes (but is not limited to):
+
+- Google Play Services
+- Google Mobile Services
+- AdMob by Google
+- Crashlytics
+- Answers
+- *etc.*
+
+Just because a library ships with Android or is made by Google does *not* make it AGPL compatible!
+
+If you cannot or do not want to comply with these restrictions, you **must** acquire a commercial license instead.
+
+### Commercial license
+
+If your software is not open source, Artifex Software can sell you a license to use MuPDF in closed source software.
+
+Fill out the
+[MuPDF product inquiry form](https://artifex.com/contact/mupdf-inquiry.php?utm_source=rtd-mupdf&utm_medium=rtd&utm_content=inline-link)
+for commercial licensing terms and pricing.
+
+## Add the MuPDF Library to your project
+
+The MuPDF library uses the Gradle build system.
+In order to include MuPDF in your app, you also need to use Gradle.
+The Eclipse and Ant build systems are not supported.
+
+The MuPDF library needs Android version 4.1 or newer.
+Make sure that the `minSdkVersion` in your app's `build.gradle` is at least 16.
+
+	android {
+		defaultConfig {
+			minSdkVersion 16
+			...
+		}
+		...
+	}
+
+The MuPDF library can be retrieved as a pre-built artifact from our Maven repository.
+In your project's top `build.gradle`, add the line to the repositories section:
+
+	allprojects {
+		repositories {
+			jcenter()
+				maven { url 'http://maven.ghostscript.com' }
+			...
+		}
+	}
+
+Then add the MuPDF viewer library to your app's dependencies.
+In your app's `build.gradle`, add the line to the dependencies section:
+
+	dependencies {
+		api 'com.artifex.mupdf:viewer:1.15.+'
+		...
+	}
+
+## Invoke the document viewer activity
+
+Once this has been done, you have access to the MuPDF viewer activity.
+You can now open a document viewing activity by launching an `Intent`,
+passing the URI of the document you wish to view.
+
+	import com.artifex.mupdf.viewer.DocumentActivity;
+
+	public void startMuPDFActivity(Uri documentUri) {
+		Intent intent = new Intent(this, DocumentActivity.class);
+		intent.setAction(Intent.ACTION_VIEW);
+		intent.setData(documentUri);
+		startActivity(intent);
+	}
+
+## How to customize the viewer
+
+If you've already tried embedding the viewer in your app, but are unhappy with some
+aspect of the look or behavior and want to modify it in some way, this section should
+point you in the right direction.
+
+### Decide which viewer to base your customizations on
+
+In order to customize the viewer UI, you will need to modify the existing Android viewer activity.
+There are two separate code bases you can start with:
+
+- `mupdf-android-viewer`
+	The main viewer app. This code is difficult to work with, but has the most
+	features and pre-renders neighboring pages into a page cache for faster page
+	turning performance.
+
+- `mupdf-android-viewer-mini`
+	This is a minimalist viewer which has fewer features but is designed to be
+	easy to understand and modify. It does not (currently) have high-resolution
+	zooming, and it does not use the swipe gesture to flip pages (it requires the
+	user to tap on the side of the screen to flip pages).
+
+If all you want to do is brand the UI with your own colors and icons, you are
+welcome to use whichever code base you prefer. However, if you want to do
+extensive modifications, we suggest you base your code on the mini viewer.
+
+### Check out the chosen project
+
+When you have decided which project to base your modifications on, you should check out
+the corresponding git repository:
+
+	$ git clone git://git.ghostscript.com/mupdf-android-viewer.git
+	$ git clone git://git.ghostscript.com/mupdf-android-viewer-mini.git
+
+Inside the checked out project you will find two modules: `app` and `lib`.
+The `app` module is a file chooser activity that lets the user open files from the external storage.
+The `lib` module is the viewer activity, which provides the `com.artifex.mupdf:viewer`
+package that you're already using.
+
+The `lib` module is the one you want; ignore everything else in this project.
+
+### Copy the viewer library module into your project
+
+Copy the 'lib' directory to your project, renaming it to something appropriate.
+The following instructions assume you called the directory 'mupdf-lib'.
+
+Don't forget to include the module in the `settings.gradle` file:
+
+	include ':app'
+	include ':mupdf-lib'
+	...
+
+You'll also want to change your app's dependencies to now depend on your local
+copy rather than the official MuPDF viewer package. In your app `build.gradle`:
+
+	dependencies {
+		api project(':mupdf-lib')
+		...
+	}
+
+The `lib` module depends on the JNI library `com.artifex.mupdf:fitz`, so do
+*not* remove the Maven repository from your top `build.gradle`.
+
+### Edit the viewer activity
+
+If all has gone well, you can now build your project with the local viewer library,
+and access the MuPDF viewer activity just as you used to.
+
+You're now free to customize the resources in `mupdf-lib/src/main/res` and behavior in
+`mupdf-lib/src/main/java` as you desire.
+
+## Working on the MuPDF Library
+
+If you want to work on the library itself, rather than just use it, you will need
+to check out the following git repositories.
+
+- `mupdf.git`
+	This repository contains the low-level "fitz" C library and the JNI bindings.
+
+- `mupdf-android-fitz.git`
+	This repository contains an Android project to build the C library and JNI bindings.
+	It uses `mupdf.git` as a Git submodule.
+
+- `mupdf-android-viewer.git`
+	This repository contains the Android viewer library and app.
+	It uses `mupdf-android-fitz.git` as either a Maven artifact or Git submodule.
+
+- `mupdf-android-viewer-mini.git`
+	This repository contains the minimalist Android viewer library and app.
+	It uses `mupdf-android-fitz.git` as either a Maven artifact or Git submodule.
+
+These repositories are set up with Git submodules. If you're a Git expert,
+you can clone one of the viewer repositories recursively and get the fitz
+and mupdf git repositories all at once.
+
+If you only want to work with one of the viewer repositories, you can clone it
+non-recursively and use the Maven artifact for the JNI bindings library and not
+worry about the `mupdf.git` and `mupdf-android-fitz.git` repositories.