PEP484 python stub generator for Java classes accessed through Chaquopy on Android
Project description
chaquopy-stubgen
This tool is a Python type stub generator from Java classes. It is optimized for the usage with Android via chaquopy v17 and briefcase.
The generated stubs can be used with Python 3.10 or higher.
CLI Usage
Example call uv run -m chaquopy_stubgen "$ANDROID_HOME/platforms/android-35/android.jar"
$ uv run -m chaquopy_stubgen --help
usage: __main__.py [-h] [--jvmpath JVMPATH] [--output-dir OUTPUT_DIR] [--no-clean] [--cache-dir CACHE_DIR] inputs [inputs ...]
Generate Python Type Stubs for Java classes that are optimized for chaquopy.
positional arguments:
inputs List of .jar/.aar files, directories containing .class files, Android platform shorthands (e.g.
'android-35'), or Maven coordinates (e.g. 'androidx.appcompat:appcompat:1.0.2') to generate stubs for.
options:
-h, --help show this help message and exit
--jvmpath JVMPATH path to the JVM ("libjvm.so", "jvm.dll", ...) (default: use system default JVM)
--output-dir OUTPUT_DIR
path to write stubs to (default: ./dist/stubs)
--no-clean skip clearing the output directory before generating stubs
--cache-dir CACHE_DIR
directory for caching downloaded artifacts (default: ~/.cache/chaquopy-stubgen)
Caveats & Limitations
Importing Java Packages
Always use from java.lang import String rather than import java.lang.String. While the stubs permit both forms, only the first works at runtime under chaquopy's import hook. See the chaquopy documentation for details.
Handling of null Values
In Java, any reference type can in principle be null. Annotating every return type as X | None would be technically correct, but makes the generated stubs very noisy and forces callers to perform if ... is not None: checks everywhere.
Whether a method can actually return null usually only becomes apparent from its documentation. chaquopy-stubgen therefore ships a whitelist of methods that are documented to return null; those are emitted with | None appended to their return type. All other reference return types are treated as non-optional, even though they could theoretically be null at runtime.
The whitelist is not exhaustive and may have gaps or false positives. Feel free to open an issue or pull request if you find a missing or incorrect entry.
Development
- Create venv:
uv sync - Test:
uv run pytest
Credits
This is based on stubgenj, but generates stubs optimized for chaquopy and is internally reworked to use ASM instead of Java Reflection.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chaquopy_stubgen-0.3.0.tar.gz.
File metadata
- Download URL: chaquopy_stubgen-0.3.0.tar.gz
- Upload date:
- Size: 26.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb952050002b4379ecf84e240ed606155a75bf2a92f3fca335e1cf2fedfad202
|
|
| MD5 |
7d548387404795a751a9f8878277ca3f
|
|
| BLAKE2b-256 |
cd3c7c661f5f63f7c2d2ebd4bc2f5419bdc40e58239184855adca2167208f862
|
Provenance
The following attestation bundles were made for chaquopy_stubgen-0.3.0.tar.gz:
Publisher:
python-publish.yml on timrid/chaquopy-stubgen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chaquopy_stubgen-0.3.0.tar.gz -
Subject digest:
bb952050002b4379ecf84e240ed606155a75bf2a92f3fca335e1cf2fedfad202 - Sigstore transparency entry: 1201118772
- Sigstore integration time:
-
Permalink:
timrid/chaquopy-stubgen@949944ac0580640c2258f49ea18faae54698dfa0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/timrid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@949944ac0580640c2258f49ea18faae54698dfa0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chaquopy_stubgen-0.3.0-py3-none-any.whl.
File metadata
- Download URL: chaquopy_stubgen-0.3.0-py3-none-any.whl
- Upload date:
- Size: 225.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a59ac271cfef9cd8388b60c754f6c456e64af9f993aaa794f9c565de0e58aaa
|
|
| MD5 |
dbc219c988f5f0fb77be8d54956d88ae
|
|
| BLAKE2b-256 |
7612f1c64ca8e86555f7880e16e71e533950884270d3b0bd03dd74aec75f5e81
|
Provenance
The following attestation bundles were made for chaquopy_stubgen-0.3.0-py3-none-any.whl:
Publisher:
python-publish.yml on timrid/chaquopy-stubgen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chaquopy_stubgen-0.3.0-py3-none-any.whl -
Subject digest:
4a59ac271cfef9cd8388b60c754f6c456e64af9f993aaa794f9c565de0e58aaa - Sigstore transparency entry: 1201118777
- Sigstore integration time:
-
Permalink:
timrid/chaquopy-stubgen@949944ac0580640c2258f49ea18faae54698dfa0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/timrid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@949944ac0580640c2258f49ea18faae54698dfa0 -
Trigger Event:
release
-
Statement type: