Android Rust NDK
一、集成Rust&NDK开发
创建 moudle [:encrypt] 将完成Rust&NDK
当前项目 build.gradle.kts 中引入插件
- id(“org.mozilla.rust-android-gradle.rust-android”) version “0.9.3” apply false
1
2
3
4
5
6
7// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
id("com.android.library") version "8.1.0" apply false
id("org.mozilla.rust-android-gradle.rust-android") version "0.9.3" apply false
}在 [:encrypt] 中构建rust结构
在当前moudle下执行命令
cargo new rust
目录结构如下
1
2
3
4
5
6
7
8
9
10
11
12encrypt
-libs
-rust
--src
--.gitignore
--Cargo.lock
--Cargo.toml
-src
-.gitignore
-build.gradle.kts
-consumer-rules.pro
-proguard-rules.pro配置Cargo.toml
1
2
3
4
5
6
7
8
9
10
11
12[package]
name = "brencrypt"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
jni = "0.18.0"
[lib]
crate_type = ["staticlib", "cdylib"]
在 [:encrypt] 中集成 mozilla.rust-android-gradle.
具体说明查看 Rust Android Gradle Plugin
- id(“org.mozilla.rust-android-gradle.rust-android”) version “0.9.3”
1
2
3
4
5plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("org.mozilla.rust-android-gradle.rust-android") version "0.9.3"
}CargoExtension配置
1
2
3
4
5
6
7
8extensions.configure(com.nishtahir.CargoExtension::class) {
module = "./rust" // Or whatever directory contains your Cargo.toml
libname = "brencrypt" // Or whatever matches Cargo.toml's [package] name.
targets = listOf("arm","x86","arm64") // See bellow for a longer list of options
profile = "release" // The Cargo release profile to build.
prebuiltToolchains = true
// targetIncludes = ['libnotlibname.so']
}
在项目下执行
gradlew.bat cargobuild
so文件转移
目前 Mozilla 插件还不支持AGP8.0 有不少问题, 没办法自动迁移so
手动转移到 [:encrypt] 中jniLibs中
1 | main |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
ValineDisqus