visual studio microsoft español descargar community java jni rust jna

studio - ¿Cómo automatizar enlaces de Java para el código de Rust?



visual studio installer (3)

Finalmente, creé ese proyecto (enlace al repositorio de Github) para automatizar la creación de enlaces.

Quiero llamar al código de Rust desde Java / Android, y he encontrado 3 variantes para hacerlo:

  1. JNI
  2. JNA
  3. JNR FFI

JNI se ve lo suficientemente bueno y poderoso, pero tienes que escribir demasiado código a mano.

JNA , si no se tiene en cuenta que se cuelga en mi máquina , es necesario escribir a mano la descripción del tipo de datos Rust struct en Java, el mismo problema con JNR FFI .

Entonces me pregunto qué tan difícil será generar el código JNI para los traits y la struct con macros o un plugin de compilación. Este compilador debe coincidir con implementaciones de rasgos para struct concreto, y también struct

#[JNI] struct Foo { a: i32, } trait Boo { fn f(&self, b: f64) -> f64; } #[JNI] impl Boo for Foo { fn f(&self, b: f64) -> f64 { 0f64 } }

y cree clases Java para las clases struct y Java con funciones native , además de generar las funciones pub no_mangle que envuelven las funciones de los rasgos.


Para proporcionar #[jni] anotaciones que funcionen así, necesitarías usar un plugin de compilación. Sería una herramienta increíble, pero aún no existe, hasta donde yo sé.

Hay trozos y piezas de herramientas por ahí que podrían ser útiles, si desea crear un proyecto que lo haga.

Los complementos actualmente son inestables y no funcionan con óxido no nocturno; es probable que desee utilizar syntex , que proporciona una interfaz estable a los complementos del compilador. También puede escribir un plugin crudo (ver aquí la API para aquellos), pero la mayoría de las personas no podrán usarlo.

Hay queso cheddar oxidado , que genera archivos de encabezado c; podrías echarle un vistazo para ver cómo funciona. El autor de eso también parece estar trabajando en un marco más general de generación de enlaces, pero no sé si está activo. Es posible que pueda conectar la salida de Cheddar a algo como JNAerator, pero probablemente no creará las interfaces más bonitas del lado de Java.

También hay óxido-bindgen y corroen , que funcionan en la otra dirección; ellos traducen los encabezados c y el código c arbitrario al óxido, respectivamente. No sé si eso es realmente útil.

JNI-sys proporciona enlaces JNI de bajo nivel; rust-on-mobile es un pequeño proyecto que lo usa. También vea Primeros pasos con Rust y Java , una publicación de blog que muestra algunos rudimentos para enganchar las cosas.

Finalmente, está cbox , que te permite trabajar con torpeza con la propiedad y FFI.


Puede usar jnaerator para generar automáticamente sus asignaciones de estructura para JNA.

Alternativamente, si desea usar JNI (y compilar un código nativo más), debe ir con SWIG .