diff --git a/build.gradle b/build.gradle index 3882b4d..ca204de 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { Properties versionProperties = new Properties() versionProperties.load(new FileInputStream("$project.rootDir/version.properties")) - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.6.0' ext.agp_version = '4.0.1' ext.plugin_version = versionProperties.getProperty("version") diff --git a/samples/app/build.gradle b/samples/app/build.gradle index 8c30046..5f75838 100644 --- a/samples/app/build.gradle +++ b/samples/app/build.gradle @@ -1,7 +1,12 @@ buildscript { - ext.agp_version = '7.0.0' + //ext.agp_version = '7.0.0' + //ext.agp_version = '4.0.1' + ext.agp_version = '7.1.1' repositories { google() + //maven { + // url 'file://C:\\Users\\josel\\work\\qaxh3_dev\\fhe-windows\\rust-android-gradle\\plugin\\build\\libs' + //} maven { url "https://plugins.gradle.org/m2/" } @@ -16,13 +21,13 @@ apply plugin: 'com.android.application' apply plugin: 'org.mozilla.rust-android-gradle.rust-android' android { - compileSdkVersion 27 - ndkVersion "23.1.7779620" + compileSdkVersion 31 + ndkVersion "25.2.9519653" defaultConfig { applicationId "com.nishtahir.androidrust" minSdkVersion 21 - targetSdkVersion 27 + targetSdkVersion 31 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -37,8 +42,12 @@ android { cargo { module = "../rust" - targets = ["x86_64", "arm64"] + targets = ["x86_64", "arm64", "arm"] libname = "rust" + pythonCommand = "python" + cargoCommand = System.properties['user.home'] + "\\.cargo\\bin\\cargo.exe" + rustcCommand = System.properties['user.home'] + "\\.cargo\\bin\\rustc.exe" + rustupChannel = "stable" } repositories { @@ -52,6 +61,7 @@ dependencies { }) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'net.java.dev.jna:jna:4.4.0@aar' testImplementation 'junit:junit:4.12' } diff --git a/samples/app/src/main/java/com/nishtahir/androidrust/MainActivity.java b/samples/app/src/main/java/com/nishtahir/androidrust/MainActivity.java index 5730bd2..9b88dac 100644 --- a/samples/app/src/main/java/com/nishtahir/androidrust/MainActivity.java +++ b/samples/app/src/main/java/com/nishtahir/androidrust/MainActivity.java @@ -5,6 +5,9 @@ import android.util.Log; import android.widget.TextView; +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Callback; public class MainActivity extends AppCompatActivity implements JNICallback { private static final String TAG = "MainActivity"; @@ -16,6 +19,12 @@ public class MainActivity extends AppCompatActivity implements JNICallback { TextView textView; + private final Callback viaJNA = new Callback() { + public void callback(String string) { + Log.i("rust","From JNA: " + string); + textView.setText("From JNA: " + string); + } + }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -23,6 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { textView = (TextView) findViewById(R.id.sample_text); invokeCallbackViaJNI(this); + LibService.instance.invokeCallbackViaJNA(viaJNA); } /** @@ -33,6 +43,15 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void callback(String string) { + Log.i("rust","From JNI: " + string); textView.append("From JNI: " + string + "\n"); } + } + +interface LibService extends Library { + public static final String JNALib = "rust"; + public static final LibService instance = Native.loadLibrary(JNALib, LibService.class); + + void invokeCallbackViaJNA(Callback callback); +} \ No newline at end of file diff --git a/samples/rust/src/lib.rs b/samples/rust/src/lib.rs index 868bbe4..fae167f 100644 --- a/samples/rust/src/lib.rs +++ b/samples/rust/src/lib.rs @@ -11,7 +11,7 @@ pub type Callback = unsafe extern "C" fn(*const c_char) -> (); #[no_mangle] #[allow(non_snake_case)] pub extern "C" fn invokeCallbackViaJNA(callback: Callback) { - let s = CString::new("Hello from Rust").unwrap(); + let s = CString::new("Hello from Rust JNA").unwrap(); unsafe { callback(s.as_ptr()); } } @@ -22,7 +22,7 @@ pub extern "C" fn Java_com_nishtahir_androidrust_MainActivity_invokeCallbackViaJ _class: JClass, callback: JObject ) { - let s = String::from("Hello from Rust"); + let s = String::from("Hello from Rust JNI"); let response = env.new_string(&s) .expect("Couldn't create java string!"); env.call_method(callback, "callback", "(Ljava/lang/String;)V",