首页 > 其他分享 >Rust交叉编译为Android库

Rust交叉编译为Android库

时间:2023-08-03 17:58:51浏览次数:41  
标签:NDK llvm target 编译 linux Android android Rust

Rust目前在互联网上资料较少,经过几天的折腾,终于在 Windows10 和 Github Actions (Ubuntu) 上构建出了 armv7 和 armv8 的 .so文件。



Windows

由于Android NDK 的 CMD脚本问题,故无法使用新版的 Rustc,所以需要确保你的版本 小于等于 1.68.2 (2023-03-27)。(截至1.71.0 (2023-07-12)还未解决此问题)

配置环境

一般有两种方法

方法一:
  • ~/.cargo/config.toml文件写入如下内容:

注意结尾为 clang++,如果是linux系统则将.cmd换为.sh

[target.aarch64-linux-android]
ar = "E:\\Android_NDK\\android-ndk-r25c\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\llvm-ar"
linker = "E:\\Android_NDK\\android-ndk-r25c\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android21-clang++.cmd"

[target.armv7-linux-androideabi]
ar = "E:\\Android_NDK\\android-ndk-r25c\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\llvm-ar"
linker = "E:\\Android_NDK\\android-ndk-r25c\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\armv7a-linux-androideabi21-clang++.cmd"

方法二:

使用环境变量CC AR

Rust文档中说明 环境变量优先级大于config.toml, 具体并未测试,如冲突,请先将config.toml移除。

Linux:
export ANDROID_NDK=NDK目录

export CC=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++
export AR=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar

# 一般配置 CC, AR 即可,如出现问题再将以下3条加上:
export TARGET_CC=$CC
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$CC
export CARGO_TARGET_AARCH64_LINUX_ANDROID_AR=$AR

Rust 交叉工具链安装

rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi

# 查看已安装 结尾带(Installed)
rustup target list

最后在项目根目录下执行

cargo build --target aarch64-linux-android --release
cargo build --target armv7-linux-androideabi --release

生成的.so文件位于以下目录

./target/aarch64-linux-android/release
./target/armv7-linux-androideabi/release

标签:NDK,llvm,target,编译,linux,Android,android,Rust
From: https://www.cnblogs.com/jing332/p/17604034.html

相关文章

  • 如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
    背景知识:在理论上,任何.NET程序集(.dll文件或.exe文件)都可以被反编译。C#是一种托管语言,其代码编译成中间语言(IL)或称为CIL(CommonIntermediateLanguage),然后在.NET运行时中执行。反编译工具可以将IL代码还原回C#源代码,使得原本的C#代码可以被查看和修改。 最......
  • Android中的颜色设置
    1、在android中经常看到设置的颜色为八位的十六进制的颜色值,例如:publicstaticfinalclasscolor{publicstaticfinalintlightblue=0x7f040000......
  • 解释型语言和编译型语言
    解释型语言是一种在程序运行时逐行解释并执行的语言解释型语言的代码不需要编译成独立的可执行文件,而是直接在运行时被解释器逐行执行常见的解释型语言有Python、JavaScript、Ruby、Perl、PHP、Shell脚本等。这些语言通常具有较好的跨平台特性,因为它们的源代码可以在不同系统......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......
  • 采用ComposeUI实现Android插件化
    什么是ComposeJetpackCompose是谷歌官方推荐的AndroidUI实现方式,避免了Android传统View在绘制、编写、性能等方面的种种缺点,具体使用方法请参考官方文档。Compose与插件化想必大家都接触过或者了解过插件化开发,没接触过的小伙伴们要补补课啦。在以往插件化开发过程中,清单文件中要......
  • Pycharm配置less编译生成的css文件到指定目录
    一、当前演示项目目录二、标记less文件夹为资源目录不标记其实也不影响三、打开FileWatchers(文件监视器)在主菜单中选择"File"(文件)>"Settings"(设置)(Windows/Linux)或"PyCharm"(Windows)/"Preferences"(Mac)或者使用快捷键"Ctrl+Alt+S"(Windows/Linux)或&qu......
  • Android学习笔记(三十):弹出信息-Toast和告警
    Android提供两个常用的消息弹出框,Toast和Alert。ToastToast是一种短暂的提示框,并不需要用户交互,也不会将focus移过来,因此可以适合大多数的场景,向用户进行信息提示。在之前的学习中,已经多次使用到Toast了。创建一个Toast很简单,使用静态方法makeText(Contextcontext,CharSequencet......
  • Google官方出品的Android App反编绎工具-Enjarify
    enjarify是由Google官方新出品的基于Python3开发,类似dex2jar的一个将Dalvik字节码转换成相对应的Java字节码开源工具,官方宣称有比dex2jar更优秀的兼容性,准确性及更高的效率。IntroductionEnjarifyisatoolfortranslatingDalvikbytecodetoequivalentJavabytecode.Thisal......
  • Android常用的工具类
    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java。目前包括HttpUtils、DownloadManagerPro、ShellUtils、PackageUtils、PreferencesUtils、JSONUtils、FileUtils、ResourceUtils、StringUtils、ParcelUtils、RandomUtils、ArrayUtils、Imag......
  • 深入浅出RxJava (四:在Android中使用响应式编程)
    [url=http://blog.danlew.net/2014/10/08/grokking-rxjava-part-4/]原文链接[/url]在第1,2,3篇中,我大概介绍了RxJava是怎么使用的。下面我会介绍如何在Android中使用RxJava.RxAndroidRxAndroid是RxJava的一个针对Android平台的扩展。它包含了一些能够简化And......