Integración de Rust con el desarrollo de Android | Por Kofi Otto | Febrero de 2022


oxido es un lenguaje de programación de sistemas de propósito general que existe desde hace mucho tiempo.Como lenguaje de programación de sistemas, se puede utilizar para realizar tareas similares a las de un lenguaje, como C y C++ Pero la seguridad de la memoria es mayor. Esto hace que Rust sea útil para escribir programas o scripts en muchos sistemas operativos, incluido Android. Quizás se pregunte cómo es esto posible y si hay una manera fácil de hacerlo. Bueno, ¡de eso se trata este artículo!
Actualmente, no hay mucha información sobre cómo escribir código Rust para aplicaciones de Android.Google proporciona cierta información. aquí Pero es complicado de entender para los principiantes.El objetivo de este tutorial es proporcionar una guía simple pero efectiva para integrar el código Rust con el desarrollo de Android y eventualmente convertirse en Guía preferido. ¡No se requieren conocimientos previos de C o C++ o JNI!
usaremos estudio androidComencemos por configurarlo.
Complementos de óxido ⚙️
Primero, necesitamos el complemento Rust. Abra Android Studio. Se abrirá un cuadro de diálogo similar al que se muestra a continuación. Seleccione la pestaña Complementos, busque «Rust» e instale el complemento Rust oficial de JetBrains. Alternativamente, si ya tiene un proyecto abierto, haga clic en Archivo en la esquina superior izquierda de Android Studio y seleccione Configuración. Haz clic en Complementos.
El complemento Rust requiere que Rust esté instalado en su sistema.puedes seguir esto asociación Instale Rust en su sistema.

Crea una aplicación vacía 📱
Ahora vamos a crear una nueva aplicación vacía. Comience completando la configuración estándar del nuevo proyecto.

Nombremos nuestro proyecto Rust Application y hagamos clic en Finalizar.
Aparecerá una ventana similar a la imagen de abajo.

Súmate al proyecto de carga 💼
Ahora agreguemos un artículo de cargasiga el tutorial provisto aquíPara incrustar un proyecto de Rust, simplemente haga clic en Terminal en el estudio de Android y entrar cargo new rust_lib --lib
y luego presione Entrar.
C:\Users\USER1\AndroidStudioProjects\RustApplication>cargo new rust_lib --lib
Esto creará una nueva biblioteca para que podamos usarla en nuestra aplicación.Nombramos a la biblioteca como rust_lib
Anote la ubicación donde se creó la carpeta.
Para ver esta carpeta en Android Studio, vaya al panel Proyecto y seleccione Proyecto en lugar de Android en el menú desplegable.

Luego verás una nueva carpeta llamada rust_lib
Esta carpeta contiene un nuevo git
Por defecto el repositorio, un Cargo.toml
archivo y un src
la carpeta contiene lib.rs
Ahora vamos a modificar tipo de biblioteca acabamos de usar Cargo.toml
documento. Para el desarrollo de aplicaciones móviles, la biblioteca debe ser dinámica.
Agregue lo siguiente al contenido Cargo.toml
documento.
[lib]
name = "rust_lib"
crate-type = ["cdylib"]
Ver destacados aquí.
Agregar dependencias 🧶
Agreguemos las dependencias que crearán los archivos necesarios para que la vinculación de nuestro código de óxido a Android finalice sin problemas.
utilizar»*» para extraer la última versión de las dependencias.
flapigen
es la principal dependencia de compilación de nuestro código de óxido para generar el código adecuado para usarlo en nuestra aplicación de Android. flapigen
Use un archivo de interfaz, pero tener que modificar el archivo de interfaz cada vez que cambia su código puede volverse tedioso.donde es eso rifgen
viniendo. Hace que la creación de archivos de interfaz sea muy sencilla.
Se utilizan dependencias adicionales para el registro.
Crear archivos de compilación 📄
Como se mencionó anteriormente, flapigen y rifgen son dependencias de compilación y funcionan con build.rs
documento.Botón derecho del ratón rust_lib
carpeta, luego seleccione Nuevo > Archivo Rust.

nombra el archivo build.rs
.
Sigue el tutorial dado flapigen
y rifgen
nuestro build.rs
Debe ser similar a lo siguiente:
te estarás preguntando build.rs
. flapigen
Convierte el contenido del archivo de interfaz a java_glue
Archivos de óxido. Así que primero especificamos el archivo fuente del archivo de interfaz (in_src
) y luego el archivo de salida (java_glue.rs
).El directorio java_glue.rs
debe combinarse con OUT_DIR
Variables de entorno.Una vez hecho esto, utilice rifgen
Genere un archivo de interfaz que especifique nuestras preferencias en función del idioma al que agreguemos el proyecto de óxido.último parámetro Generator::new
Especifique el inicio de la carpeta que contiene nuestro código de óxido y generate_interface
La función obtiene la ruta del archivo de interfaz. ES DECIR in_scr
. Esta java_folder
Especifica dónde deben ir los archivos java creados.Llamar swig_gen.expand
Decir flapigen
Generar los archivos correspondientes. Preste atención a estos parámetros cuando los usemos en compilaciones de Gradle.
Finalmente, crea un archivo llamado java_glue.rs
en el interior rust_lib/src
carpeta y poner lo siguiente:
y añadir:
mod java_glue;
pub use crate::java_glue::*;
para ti lib.rs
documento. Hacer esto conectará su código de óxido con el código generado.
Agregue la cadena de herramientas y el enlazador de Android ⛓
Para compilar Rust para Android, necesitamos agregar la cadena de herramientas de Android a rustup
Para hacer esto, simplemente ejecute el siguiente comando en una terminal:
C:\Users\USER1\AndroidStudioProjects\RustApplication>rustup target add aarch64-linux-android armv7-linux-androideabi
Esto agrega la cadena de herramientas de óxido y la biblioteca estándar para las versiones de Android de 64 bits y 32 bits, respectivamente.Ahora, agreguemos enlazador del compiladordebe agregarse a rust_lib/.cargo/config.toml
documento.
Botón derecho del ratón rust_lib
carpeta, cree un nuevo directorio llamado .cargo
entonces en .cargo
directorio llamado config.toml
.
El enlazador apropiado viene con NDK de Android asi que deberia ser descargado Antes de continuar.
Agregue lo siguiente al archivo de configuración que creó.
reemplazar SDK de Android Use la ruta del SDK de Android (o la carpeta que contiene el paquete NDK).También, reemplace Versión con la versión de su sistema operativo. Por ejemplo, en mi computadora con Windows, la ruta completa es:
[target.aarch64-linux-android]
linker = "C:\\Users\\taimoor\\AppData\\Local\\Android\\Sdk\\ndk-bundle\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android21-clang++.cmd"
Aviso .cmd
Y finalmente la versión de Windows.
Automatice compilaciones con Gradle 🐘
Gradle se puede utilizar para automatizar cargo build
Siempre que queramos probar la aplicación. Esto hará que los cambios que hagamos en el lado de Rust se actualicen automáticamente en nuestra aplicación.
Tenga en cuenta que esto es nivel de aplicación o módulo Archivos Gradle en lugar de archivos Gradle a nivel de proyecto.añadir línea 20 a 27 y línea después de los 65 años.line 65 en adelante simplemente le indica a Gradle que ejecute la compilación de carga cuando ejecutamos la aplicación. Después de ejecutar el comando de compilación de carga, crearemos un archivo java y un archivo de biblioteca dinámica (.entonces) y péguelos en un directorio que Android pueda leer y usar en nuestro código Kotlin.
La aplicación ahora debería ejecutarse 😄.Si tiene problemas para ejecutarlo, deje un comentario a continuación o no dude en enviarme un correo electrónico [email protected]!
Sección adicional: Registro 📃
Implementemos rápidamente el registro para ayudar a depurar nuestro código Rust.en el interior lib.rs
archivo, agregue lo siguiente:
Usamos android_logger
crate se usa para generar registros y luego llamar log_panics::init()
Redirigir todos los pánicos al registro en lugar de imprimir al error estándar.propiedades de la nota #[generate_interface]
Esto le dice rifgen
Llamaremos a esta función desde Kotlin, por lo que debería agregar la llamada al método al archivo de la interfaz.
Carga bibliotecas desde Kotlin 📲
Ahora que tenemos configurado el lado de Rust, pasemos al lado de Kotlin. Ahora cargaremos la biblioteca desde el singleton:
Agregue varias importaciones a la clase de registros que creamos.Tenga en cuenta que aunque nombramos la función como initialise_logging
podemos usarlo como initialiseLogging
Esto se debe a que especificamos CamelCase durante la instalación. rifgen
.
Ejecute el programa para ver la información del código de Rust que se está registrando.