Add dependency on native Rust project
This commit is contained in:
parent
fee6c52606
commit
9c33d1fbb0
|
@ -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
|
||||
```
|
|
@ -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'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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()
|
||||
}
|
Loading…
Reference in New Issue