android-build 0.1.0

A build-time dependency to compile Java source files for Android as part of a Rust build. Use this from your `build.rs` Cargo build script.
Documentation
# android-build

[![Latest Version](https://img.shields.io/crates/v/android-build.svg)](https://crates.io/crates/android_build)
[![Docs](https://docs.rs/android-build/badge.svg)](https://docs.rs/android-build/latest/android_build/)
[![Project Robius Matrix Chat](https://img.shields.io/matrix/robius-general%3Amatrix.org?server_fqdn=matrix.org&style=flat&logo=matrix&label=Project%20Robius%20Matrix%20Chat&color=B7410E)](https://matrix.to/#/#robius:matrix.org)

Use this crate from your Cargo `build.rs` build script to compile Java source files and to run Java/Android commands as part of a Rust build,
specifically designed for Android-targeted builds and Android tools.

This crate aims to behave similarly to [`cc-rs`](https://github.com/rust-lang/cc-rs/tree/main), but for Java (primarily on Android) instead of C/C++.

This crate is part of [Project Robius](https://github.com/project-robius) and is primarily used by those crates.

## Usage
Add this crate as a build dependency to your `Cargo.toml`:
```toml
[build-dependencies]
android-build = "0.1.0"
```

Then add this to your `build.rs` build script:
```rust
fn main() {
    let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
    if target_os == "android" {
        let output_dir = std::env::var("OUT_DIR").unwrap();
        let android_jar_path = android_build::android_jar(None)
            .expect("Failed to find android.jar");

        android_build::JavaBuild::new()
            .class_path(android_jar_path)
            .classes_out_dir(std::path::PathBuf::from(output_dir))
            .file("YourJavaFile.java")
            .compile()
            .expect("java build failed!");

        // `YourJavaFile.class` will be the Cargo-specified OUT_DIR.
    }
}
```

The above code will automatically run when you build your crate using `cargo build`.

## Configuration via environment variables
The [crate-level documentation](https://docs.rs/android-build/latest/android_build/) provides a detailed list of environment variables that can be set
to configure this crate.

## Examples
Check out the [`robius-authentication` build script](https://github.com/project-robius/robius-authentication/blob/main/build.rs) to see how we use this crate for more complicated build procedures:
* Discovering specific Android jarfiles and SDK directories (platforms, build tools, etc).
* Compiling Java classes against the main `android.jar` jarfile.
* Invoking Android's `d8` DEXer tool.