Add dependency on native Rust project

This commit is contained in:
Lonami Exo 2022-10-12 16:03:29 +02:00
parent fee6c52606
commit 9c33d1fbb0
6 changed files with 75 additions and 0 deletions

10
README.md Normal file
View File

@ -0,0 +1,10 @@
# Building
Make sure the required Android NDK platforms are installed, and the environment
variable `ANDROID_NDK_TOOLCHAIN_DIR` is configured correctly.
On Windows, this might be a path such as the following (NDK "Side by side" SDK tool):
```
%LOCALAPPDATA%\Android\Sdk\ndk\25.1.8937393\toolchains\llvm\prebuilt\windows-x86_64\bin
```

View File

@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "org.mozilla.rust-android-gradle.rust-android"
}
android {
@ -44,6 +45,7 @@ android {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
ndkVersion '25.1.8937393'
}
dependencies {
@ -62,3 +64,17 @@ dependencies {
debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_ui_version"
}
// See https://github.com/mozilla/rust-android-gradle for other targets and required toolchains
cargo {
module = "../native"
libname = "talaria"
targets = ["arm64", "arm", "x86"]
profile = 'release'
}
tasks.whenTaskAdded { task ->
if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) {
task.dependsOn 'cargoBuild'
}
}

View File

@ -7,4 +7,5 @@ plugins {
id 'com.android.application' version '7.3.0' apply false
id 'com.android.library' version '7.3.0' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
id "org.mozilla.rust-android-gradle.rust-android" version "0.9.3"
}

14
native/.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

14
native/Cargo.toml Normal file
View File

@ -0,0 +1,14 @@
[package]
name = "talaria"
version = "0.1.0"
edition = "2021"
[lib]
name = "talaria"
crate-type = ["cdylib"]
[dependencies]
jni = { version = "0.10.2", default-features = false }
[profile.release]
lto = true

20
native/src/lib.rs Normal file
View File

@ -0,0 +1,20 @@
#![cfg(target_os = "android")]
#![allow(non_snake_case)]
use std::ffi::{CStr, CString};
use jni::JNIEnv;
use jni::objects::{JObject, JString};
use jni::sys::jstring;
#[no_mangle]
pub unsafe extern fn Java_dev_lonami_talaria_MainActivity_hello(env: JNIEnv, _: JObject, j_recipient: JString) -> jstring {
let recipient = CString::from(
CStr::from_ptr(
env.get_string(j_recipient).unwrap().as_ptr()
)
);
let output = env.new_string("Hello ".to_owned() + recipient.to_str().unwrap()).unwrap();
output.into_inner()
}