Android中使用Rust構建so庫

一:前言

   之前android調用so庫的時候都是jni調用
   jni調用需要自己寫Native和頭文件及Android.mk

   我們可以直接采用jna調用
   github鏈接:https://github.com/java-native-access/jna
   會比jni簡單很多

二,具體

  1,安裝rust
      curl https://sh.rustup.rs -sSf | sh

  2,安裝 Android targets
      rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android

  3,Config ~/.cargo/config
       
      [target.aarch64-linux-android]
      ar = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android-ar"
      linker = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android22-clang.cmd"

      [target.armv7-linux-androideabi]
      ar = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ar"
      linker = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi22-clang.cmd"

      [target.i686-linux-android]
      ar = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android-ar"
      linker = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android22-clang.cmd"


      [target.x86_64-linux-android]
      ar = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android-ar"
      linker = "/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android22-clang.cmd"

  4,創(chuàng)建rust工程并編寫jna的調用代碼(lib.rs文件)

      use std::os::raw::c_char;

      #[no_mangle]
      pub unsafe extern "C" fn get_str(str: *const c_char) -> *const c_char{
              str
      }
  
  5,工程下Cargo.toml文件增加下面代碼
      [lib]
      name = "NativePluginRust"
      crate-type = ["dylib"]

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

 6,直接進行build生成對應的so
      cargo build --target armv7-linux-androideabi --release

      target目錄下生成對應cpu架構的 libNativePluginRust.so

 7,android端
      1,gradle引用jna依賴

      2,調用
      static {
              System.loadLibrary("NativePluginRust");

      }

      public interface CStr extends Library {
              String get_str(String str);
       }

      private void getStr(){
               final CStr cStr = (CStr) Native.loadLibrary("NativePluginRust", CStr.class);
               String str = cStr.get_str("開始調用了");
               System.out.println("str: " + str);

      }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容