diff --git a/.changes/android-enhance-method-parse.md b/.changes/android-enhance-method-parse.md new file mode 100644 index 00000000000..0c53b4c56af --- /dev/null +++ b/.changes/android-enhance-method-parse.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Enhance parsing of annotated Android plugin methods to support private functions. diff --git a/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginHandle.kt b/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginHandle.kt index b3a48334f94..08f4a086251 100644 --- a/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginHandle.kt +++ b/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginHandle.kt @@ -12,10 +12,12 @@ import androidx.core.app.ActivityCompat import app.tauri.PermissionHelper import app.tauri.PermissionState import app.tauri.annotation.ActivityCallback -import app.tauri.annotation.PermissionCallback import app.tauri.annotation.Command +import app.tauri.annotation.PermissionCallback import app.tauri.annotation.TauriPlugin import java.lang.reflect.Method +import java.util.Arrays + class PluginHandle(private val manager: PluginManager, val name: String, val instance: Plugin, val config: JSObject) { private val commands: HashMap = HashMap() @@ -130,7 +132,13 @@ class PluginHandle(private val manager: PluginManager, val name: String, val ins } private fun indexMethods() { - val methods: Array = instance.javaClass.methods + val methods = mutableListOf() + var pluginCursor: Class<*> = instance.javaClass + while (pluginCursor.name != Any::class.java.name) { + methods.addAll(listOf(*pluginCursor.declaredMethods)) + pluginCursor = pluginCursor.superclass + } + for (method in methods) { if (method.isAnnotationPresent(Command::class.java)) { val command = method.getAnnotation(Command::class.java) ?: continue diff --git a/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginManager.kt b/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginManager.kt index af9797d8bf2..9f6ba12c6fb 100644 --- a/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginManager.kt +++ b/core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginManager.kt @@ -121,7 +121,7 @@ class PluginManager(val activity: AppCompatActivity) { plugins[pluginId]?.invoke(invoke) } } catch (e: Exception) { - invoke.reject(e.message) + invoke.reject(if (e.message?.isEmpty() != false) { e.toString() } else { e.message }) } }