Skip to content

Repository files navigation

MaxMath (Higher Algebra Calculator)

CI Release License: MIT

English | 简体中文

Download MaxMath 1.1.1 APK · Release notes

MaxMath is an offline Android app for higher-algebra computation and interactive plotting, powered by GNU Maxima. Its interface is built with Kotlin and Jetpack Compose, mathematical input is handled by a pure Kotlin parser, and complex symbolic computations run in a separate engine process.

Current release: 1.1.1. Minimum supported version: Android 8.0 (API 26). The native computation engine currently provides an arm64-v8a build workflow only.

Features

  • Matrices: determinant, inverse, transpose, rank, trace, eigenvalues, and eigenvectors
  • Systems of equations: natural syntax such as x+y=1; 2x-y=3, plus raw Maxima input
  • Polynomials: factorization, greatest common divisor, root finding, expansion, and simplification
  • Vector spaces: inner product, norm, and Gram-Schmidt orthogonalization
  • Quadratic forms: expansion, eigenvalues, and signature
  • Calculus: limits, derivatives of arbitrary order, and definite or indefinite integrals
  • Plotting: touch-enabled 2D multi-function plots, 3D surfaces, and contour plots, all with axis ticks and numeric labels
  • Input: implicit multiplication, radicals, fractions, common functions, π/e, and natural equation syntax
  • Output: offline LaTeX rendering, copyable text, and PNG saving or sharing
  • Localization: Chinese, English, or the system language
  • Appearance: complete light and dark themes, including interactive plots
  • Privacy: no network permission, accounts, ads, analytics, or telemetry

Architecture

Path Responsibility
parser/ Lexing, AST construction, expression evaluation, and Maxima/NumPy code generation
engine/ Typed computation tasks, Maxima scripts, JNI subprocesses, the isolated process service, and 2D plotting
app/ Compose screens, state management, LaTeX output, and interactive OpenGL 3D/contour rendering
native/ Android cross-compilation and runtime packaging scripts for ECL and Maxima
docs/ Product specifications and implementation constraints

Lightweight operations run in the UI process. Long-running work is forwarded through Android Messenger to the isolated :engine process. Cancellation or a timeout terminates the corresponding Maxima subprocess. Maxima assists with 2D plot analysis before Matplotlib renders the image; 3D surfaces and contour plots are sampled locally from the same expression AST and rendered with OpenGL.

Getting the Source

git clone https://github.com/ParuhParhat/MaxMath.git
cd MaxMath

Requirements

  • JDK 17
  • Android Studio, or Android SDK 36
  • Android NDK 27.2.12479018 and CMake 3.22 (required to compile the JNI bridge)
  • Python 3.10 (required when Chaquopy packages Python runtime dependencies)

Put the local SDK path in the untracked local.properties file. The repository does not contain signing keys; place release-signing configuration in the untracked keystore.properties file.

Running Tests

./gradlew :parser:test
./gradlew -Pmaxmath.buildNative=false :engine:testDebugUnitTest :app:testDebugUnitTest

On Windows, use:

gradlew.bat :parser:test
gradlew.bat -Pmaxmath.buildNative=false :engine:testDebugUnitTest :app:testDebugUnitTest

Building the Android App

./gradlew :app:assembleDebug

The APK is written to app/build/outputs/apk/debug/app-debug.apk.

Native Maxima Engine

The Maxima/ECL download directories, cross-compilation outputs, and generated application runtime are large and governed by their respective licenses, so they are not tracked by Git. A fresh checkout can build and install the UI, but actual Maxima computation requires generating and packaging the native engine first:

cd native
./download-sources.sh
./build-host-ecl.sh
./build-ecl-android.sh arm64-v8a
./build-maxima-android.sh arm64-v8a
./package-engine.sh arm64-v8a
cd ..
./gradlew :app:assembleDebug

The current scripts target a Linux x86_64 host and the NDK's linux-x86_64 toolchain. See native/README.md for complete dependency, environment-variable, and troubleshooting information.

Generated directories that must not be committed include:

  • .build/
  • app/src/main/assets/engine/
  • app/src/main/jniLibs/

Project Documentation

Known Limitations

  • The native computation engine currently targets arm64-v8a only; the x86_64 build scripts still need further verification.
  • A fresh source checkout does not include a prebuilt Maxima/ECL runtime. Generate it as described above before running full computations.
  • Results come from computer algebra and numerical algorithms and should not be treated as formal proofs.

License

Source code contributed to MaxMath that is original to the project and does not carry a separate license notice is licensed under the MIT License.

The build resolves the GPL-2.0-licensed jlatexmath-android and may include the GPL-licensed GNU Maxima. ECL, Chaquopy, Matplotlib, NumPy, and other components also retain their respective licenses. Distribution of a complete APK must comply with those third-party license obligations. See THIRD_PARTY_NOTICES.md for details.

About

Offline Android advanced algebraic calculation and interactive drawing application, based on GNU Maxima, Kotlin and Jetpack Compose.

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages