Skip to content

Commit

Permalink
Update build instructions for future android app release
Browse files Browse the repository at this point in the history
  • Loading branch information
ad-oliviero committed Apr 28, 2022
1 parent 1ba1483 commit 5cefa10
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 3 deletions.
15 changes: 15 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[target.aarch64-linux-android]
linker = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android32-clang"
ar = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android32-ar"
# target-dir = "../app/src/main/jniLibs/arm64-v8a"

[target.armv7-linux-androideabi]
linker = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-clang"
ar = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
# target-dir = "../app/src/main/jniLibs/armeabi-v7a"

[target.i686-linux-android]
linker = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-clang"
ar = "/home/adri/Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
# target-dir = "../app/src/main/jniLibs/x86"

12 changes: 9 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
[package]
name = "num-string"
version = "2.1.0"
edition = "2021"
name = "numstr"
version = "0.1.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "num_string"
crate-type = ["dylib"]

[dependencies]
clap = {version = "3.1.12", features = ["derive"]}
Expand All @@ -12,3 +14,7 @@ clipboard = "0.5.0"

[target.'cfg(not(target_os = "android"))'.dependencies]
gtk4 = "0.4.7"

[target.'cfg(target_os="android")'.dependencies]
jni = { version = "0.5", default-features = false }

24 changes: 24 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
ANDROID_NDK_HOME = $(HOME)/Android/Sdk/ndk
GENERATED_V8A = target/aarch64-linux-android/debug/libnum_string.so
GENERATED_V7A = target/armv7-linux-androideabi/debug/libnum_string.so
GENERATED_X86 = target/i686-linux-android/debug/libnum_string.so

all: dirs arm64-v8a armv7-v7a x86

dirs:
rm -r ../app/src/main/jniLibs
mkdir -p ../app/src/main/jniLibs/{arm64-v8a,armeabi-v7a,x86}

arm64-v8a:
ANDROID_NDK_HOME=$(ANDROID_NDK_HOME) cargo +nightly ndk -t arm64-v8a build -Zbuild-std
cp $(GENERATED_V8A) ../app/src/main/jniLibs/arm64-v8a

armv7-v7a:
ANDROID_NDK_HOME=$(ANDROID_NDK_HOME) cargo +nightly ndk -t armeabi-v7a build -Zbuild-std
cp $(GENERATED_V7A) ../app/src/main/jniLibs/armeabi-v7a

x86:
ANDROID_NDK_HOME=$(ANDROID_NDK_HOME) cargo +nightly ndk -t x86 build -Zbuild-std
cp $(GENERATED_X86) ../app/src/main/jniLibs/x86


14 changes: 14 additions & 0 deletions num-string/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
edition = "2021"
name = "numstr"
version = "0.1.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
clap = {version = "3.1.12", features = ["derive"]}
sscanf = "0.2.1"
clipboard = "0.5.0"

[target.'cfg(not(target_os = "android"))'.dependencies]
gtk4 = "0.4.7"
35 changes: 35 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
use std::os::raw::{c_char};
use std::ffi::{CString, CStr};

#[no_mangle]
pub extern fn rust_greeting(to: *const c_char) -> *mut c_char {
let c_str = unsafe { CStr::from_ptr(to) };
let recipient = match c_str.to_str() {
Err(_) => "there",
Ok(string) => string,
};

CString::new("Hello ".to_owned() + recipient).unwrap().into_raw()
}

#[cfg(target_os="android")]
#[allow(non_snake_case)]
pub mod android {
extern crate jni;

use super::*;
use self::jni::JNIEnv;
use self::jni::objects::{JClass, JString};
use self::jni::sys::{jstring};

#[no_mangle]
pub unsafe extern fn Java_com_tdb_numstring_MainActivity_greeting(env: JNIEnv, _: JClass, java_pattern: JString) -> jstring {
// Our Java companion code might pass-in "world" as a string, hence the name.
let world = rust_greeting(env.get_string(java_pattern).expect("invalid pattern string").as_ptr());
// Retake pointer so that we can use it below and allow memory to be freed when it goes out of scope.
let world_ptr = CString::from_raw(world);
let output = env.new_string(world_ptr.to_str().unwrap()).expect("Couldn't create java string!");

output.into_inner()
}
}

0 comments on commit 5cefa10

Please sign in to comment.