From 0c89713c4661552cb0a9c1036ab8f19c87cb7620 Mon Sep 17 00:00:00 2001 From: shaorongqiang <26101255+shaorongqiang@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:27:54 +0800 Subject: [PATCH] fix mobile build (#998) --- .../Dockerfile-wallet_mobile-lib_android | 14 ++++++------- .../wallet_mobile/src/android/tx_builder.rs | 20 ++++++++++++++++--- src/components/wallet_mobile/src/ios/free.rs | 4 ++-- src/components/wallet_mobile/src/ios/mod.rs | 2 +- .../wallet_mobile/src/ios/tx_builder.rs | 12 +++++++++-- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/container/Dockerfile-wallet_mobile-lib_android b/container/Dockerfile-wallet_mobile-lib_android index c4064a4c7..cdf0dfa67 100644 --- a/container/Dockerfile-wallet_mobile-lib_android +++ b/container/Dockerfile-wallet_mobile-lib_android @@ -1,4 +1,4 @@ -FROM rust:1.66.0-slim +FROM rust:1.70.0-slim RUN apt update -y && apt upgrade -y && apt install -y unzip wget make pkg-config RUN wget -nc -P /opt/ https://www.openssl.org/source/openssl-1.1.1s.tar.gz @@ -7,18 +7,18 @@ RUN wget -nc -P /opt/ https://dl.google.com/android/repository/android-ndk-r25c- ENV PATH="/opt/android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH" ENV ANDROID_NDK_HOME /opt/android-ndk-r25c/ -RUN tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt -WORKDIR /opt/openssl-1.1.1s +RUN mkdir -p /opt/aarch64/ && tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt/aarch64 +WORKDIR /opt/aarch64/openssl-1.1.1s RUN ./Configure android-arm64 --prefix=/opt/aarch64-linux/ssl RUN make -j `nproc` && make install -RUN rm -rvf /opt/openssl-1.1.1s && tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt -WORKDIR /opt/openssl-1.1.1s +RUN mkdir -p /opt/armv7a/ && tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt/armv7a +WORKDIR /opt/armv7a/openssl-1.1.1s RUN ./Configure android-arm --prefix=/opt/armv7a-linux/ssl RUN make -j `nproc` && make install -RUN rm -rvf /opt/openssl-1.1.1s && tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt -WORKDIR /opt/openssl-1.1.1s +RUN mkdir -p /opt/x86_64/ && tar -xvf /opt/openssl-1.1.1s.tar.gz -C /opt/x86_64 +WORKDIR /opt/x86_64/openssl-1.1.1s RUN ./Configure android-x86_64 --prefix=/opt/x86_64-linux/ssl RUN make -j `nproc` && make install diff --git a/src/components/wallet_mobile/src/android/tx_builder.rs b/src/components/wallet_mobile/src/android/tx_builder.rs index 5f46b949e..264dac2fe 100644 --- a/src/components/wallet_mobile/src/android/tx_builder.rs +++ b/src/components/wallet_mobile/src/android/tx_builder.rs @@ -273,14 +273,21 @@ pub unsafe extern "system" fn Java_com_findora_JniApi_transactionBuilderAddOpera /// # Safety /// pub unsafe extern "system" fn Java_com_findora_JniApi_transactionBuilderAddOperationClaim( - _env: JNIEnv, + env: JNIEnv, _: JClass, builder: jlong, + td_addr: JString, keypair: jlong, ) -> jlong { let builder = &*(builder as *mut TransactionBuilder); + let td_addr: String = env + .get_string(td_addr) + .expect("Couldn't get java string!") + .into(); + let addr = td_addr.strip_prefix("0x").unwrap_or(&td_addr); + let td_address = hex::decode(addr) .expect("addr format error!"); let keypair = &*(keypair as *mut XfrKeyPair); - let builder = builder.clone().add_operation_claim(keypair).unwrap(); + let builder = builder.clone().add_operation_claim(td_address,keypair).unwrap(); Box::into_raw(Box::new(builder)) as jlong } @@ -291,14 +298,21 @@ pub unsafe extern "system" fn Java_com_findora_JniApi_transactionBuilderAddOpera env: JNIEnv, _: JClass, builder: jlong, + td_addr: JString, keypair: jlong, am: JString, ) -> jlong { let builder = &*(builder as *mut TransactionBuilder); let keypair = &*(keypair as *mut XfrKeyPair); + let td_addr: String = env + .get_string(td_addr) + .expect("Couldn't get java string!") + .into(); + let addr = td_addr.strip_prefix("0x").unwrap_or(&td_addr); + let td_address = hex::decode(addr) .expect("addr format error!"); let builder = builder .clone() - .add_operation_claim_custom(keypair, parseU64(env, am)) + .add_operation_claim_custom(td_address,keypair, parseU64(env, am)) .unwrap(); Box::into_raw(Box::new(builder)) as jlong } diff --git a/src/components/wallet_mobile/src/ios/free.rs b/src/components/wallet_mobile/src/ios/free.rs index 5a440f939..0266a2fa8 100644 --- a/src/components/wallet_mobile/src/ios/free.rs +++ b/src/components/wallet_mobile/src/ios/free.rs @@ -8,7 +8,7 @@ pub unsafe extern "C" fn findora_ffi_xfr_public_key_free(ptr: *mut types::XfrPub if ptr.is_null() { return; } - Box::from_raw(ptr); + let _ = Box::from_raw(ptr); } #[no_mangle] @@ -18,5 +18,5 @@ pub unsafe extern "C" fn findora_ffi_fee_inputs_free(ptr: *mut FeeInputs) { if ptr.is_null() { return; } - Box::from_raw(ptr); + let _ = Box::from_raw(ptr); } diff --git a/src/components/wallet_mobile/src/ios/mod.rs b/src/components/wallet_mobile/src/ios/mod.rs index b7dceceb0..4212e5e0b 100644 --- a/src/components/wallet_mobile/src/ios/mod.rs +++ b/src/components/wallet_mobile/src/ios/mod.rs @@ -135,7 +135,7 @@ extern "C" fn findora_ffi_free_buffer(buf: ByteBuffer) { let s = unsafe { std::slice::from_raw_parts_mut(buf.data, len) }; let s = s.as_mut_ptr(); unsafe { - Box::from_raw(s); + let _ = Box::from_raw(s); } } diff --git a/src/components/wallet_mobile/src/ios/tx_builder.rs b/src/components/wallet_mobile/src/ios/tx_builder.rs index 67c651ea0..13049fb38 100644 --- a/src/components/wallet_mobile/src/ios/tx_builder.rs +++ b/src/components/wallet_mobile/src/ios/tx_builder.rs @@ -213,9 +213,13 @@ pub extern "C" fn findora_ffi_transaction_builder_add_operation_undelegate_parti #[no_mangle] pub extern "C" fn findora_ffi_transaction_builder_add_operation_claim( builder: &TransactionBuilder, + td_addr: *const c_char, keypair: &XfrKeyPair, ) -> *mut TransactionBuilder { - if let Ok(info) = builder.clone().add_operation_claim(keypair) { + let td_addr = c_char_to_string(td_addr); + let addr = td_addr.strip_prefix("0x").unwrap_or(&td_addr); + let td_address = hex::decode(addr).expect("addr format error!"); + if let Ok(info) = builder.clone().add_operation_claim(td_address,keypair) { Box::into_raw(Box::new(info)) } else { std::ptr::null_mut() @@ -225,11 +229,15 @@ pub extern "C" fn findora_ffi_transaction_builder_add_operation_claim( #[no_mangle] pub extern "C" fn findora_ffi_transaction_builder_add_operation_claim_custom( builder: &TransactionBuilder, + td_addr: *const c_char, keypair: &XfrKeyPair, am: *const c_char, ) -> *mut TransactionBuilder { let am = parse_u64(am); - if let Ok(info) = builder.clone().add_operation_claim_custom(keypair, am) { + let td_addr = c_char_to_string(td_addr); + let addr = td_addr.strip_prefix("0x").unwrap_or(&td_addr); + let td_address = hex::decode(addr).expect("addr format error!"); + if let Ok(info) = builder.clone().add_operation_claim_custom(td_address,keypair, am) { Box::into_raw(Box::new(info)) } else { std::ptr::null_mut()