Sample app adding two ints
diff --git a/app/Android.bp b/app/Android.bp
new file mode 100644
index 0000000..641904e
--- /dev/null
+++ b/app/Android.bp
@@ -0,0 +1,49 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+aidl_interface {
+ name: "kvm_app_aidl",
+ unstable: true,
+ srcs: [
+ "foo/IFoo.aidl",
+ ],
+}
+
+cc_defaults {
+ name: "kvm_app_defaults",
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "libutils",
+ ],
+ static_libs: [
+ "kvm_app_aidl-cpp",
+ ]
+}
+
+cc_binary {
+ name: "kvm_app_client",
+ defaults: ["kvm_app_defaults"],
+ srcs: [
+ "client.cpp",
+ ],
+}
+
+cc_binary {
+ name: "kvm_app_server",
+ defaults: ["kvm_app_defaults"],
+ srcs: [
+ "server.cpp",
+ ],
+}
diff --git a/app/client.cpp b/app/client.cpp
new file mode 100644
index 0000000..aea86b2
--- /dev/null
+++ b/app/client.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <cstdlib>
+
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
+#include <binder/TextOutput.h>
+#include <foo/BpFoo.h>
+#include <utils/Log.h>
+#include <utils/RefBase.h>
+
+using namespace android;
+
+int main(void) {
+ int sum;
+ sp<IServiceManager> sm = android::defaultServiceManager();
+ sp<IBinder> binder = sm->getService(String16("foo.IFoo"));
+ // TODO: Assert that binder is not 0.
+ sp<foo::IFoo> demo = interface_cast<foo::IFoo>(binder);
+ std::cout << "ADD 1 + 2" << std::endl;
+ binder::Status status = demo->add(1, 2, &sum);
+ std::cout << "=> " << sum << std::endl;
+ return 0;
+}
diff --git a/app/foo/IFoo.aidl b/app/foo/IFoo.aidl
new file mode 100644
index 0000000..cea4c1b
--- /dev/null
+++ b/app/foo/IFoo.aidl
@@ -0,0 +1,5 @@
+package foo;
+
+interface IFoo {
+ int add(int a, int b);
+}
diff --git a/app/server.cpp b/app/server.cpp
new file mode 100644
index 0000000..0dae0d5
--- /dev/null
+++ b/app/server.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
+#include <binder/TextOutput.h>
+#include <foo/BnFoo.h>
+#include <stdlib.h>
+#include <utils/Log.h>
+#include <utils/RefBase.h>
+
+using namespace android;
+
+class Demo : public foo::BnFoo {
+ virtual binder::Status add(int32_t a, int32_t b, int32_t* _aidl_return) {
+ std::cout << "adding " << a << " + " << b << std::endl;
+ *_aidl_return = a + b;
+ std::cout << "returning " << *_aidl_return << std::endl;
+ return binder::Status::ok();
+ }
+};
+
+int main(void) {
+ defaultServiceManager()->addService(String16("foo.IFoo"), new Demo());
+ ProcessState::self()->startThreadPool();
+ IPCThreadState::self()->joinThreadPool();
+ return 0;
+}