Add executeAppFunction API

The method would return a sealed class ExecuteAppFunctionResponse to
represent either success or failure result instead of throwing an
exception. The reasons are

* The chance that executeAppFunction would end up with an error is
  higher than "normal" functions as this is part of the communication
  protocol between app and agent
* We would like to encourage agent developers to handle the error cases
  whenever it is possible. And making it to return a result-like API can
  achieve this

Relnote: Add executeAppFunction API
Bug: 394018622
Test: ./gradlew :appfunctions:appfunctions-runtime:connectedAndroidTest

Change-Id: I1eefb1f85b48c44d5508aea572fc0b84916d0874
diff --git a/appfunctions/appfunctions-runtime/build.gradle b/appfunctions/appfunctions-runtime/build.gradle
index 7246365..47c43fc 100644
--- a/appfunctions/appfunctions-runtime/build.gradle
+++ b/appfunctions/appfunctions-runtime/build.gradle
@@ -33,11 +33,12 @@
     api(libs.kotlinStdlib)
 
     // Internal dependencies
+    implementation("androidx.appsearch:appsearch:1.1.0-alpha07")
+    implementation("androidx.appsearch:appsearch-platform-storage:1.1.0-alpha07")
     implementation(libs.kotlinCoroutinesAndroid)
     implementation("androidx.annotation:annotation:1.9.0-rc01")
     implementation project(":appfunctions:appfunctions-common")
     implementation(libs.kotlinCoroutinesAndroid)
-
     // Compile only dependencies
     compileOnly(project(":appfunctions:appfunctions-stubs"))
 
@@ -49,6 +50,7 @@
     testImplementation(libs.truth)
     testImplementation(libs.mockitoCore4)
 
+    androidTestCompileOnly(project(":appfunctions:appfunctions-stubs"))
     androidTestImplementation("androidx.appsearch:appsearch:1.1.0-alpha07")
     androidTestImplementation("androidx.appsearch:appsearch-platform-storage:1.1.0-alpha07")
     androidTestImplementation(libs.testCore)