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 {
|
plugins {
|
||||||
id 'com.android.application'
|
id 'com.android.application'
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
|
id "org.mozilla.rust-android-gradle.rust-android"
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
@ -44,6 +45,7 @@ android {
|
||||||
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ndkVersion '25.1.8937393'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -62,3 +64,17 @@ dependencies {
|
||||||
debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version"
|
debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version"
|
||||||
debugImplementation "androidx.compose.ui:ui-test-manifest:$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.application' version '7.3.0' apply false
|
||||||
id 'com.android.library' 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.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