From 6d2b39cb688ceda72fa1a85883017f53b7b38a00 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Sat, 26 Nov 2016 13:56:13 +0100 Subject: [PATCH 1/8] Drop kernel modules and shell from snap We have adb now available and kernel module support need to be solved differently. --- snapcraft.yaml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/snapcraft.yaml b/snapcraft.yaml index 4850d1d..bd76cee 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -14,8 +14,6 @@ apps: container-manager: command: bin/container-manager.sh daemon: simple - shell: - command: bin/container-shell.sh bridge: command: bin/anbox-bridge.sh start stop-command: bin/anbox-bridge.sh stop @@ -38,17 +36,6 @@ parts: - bin/anbox-bridge.sh - bin/anbox-wrapper.sh - bin/container-manager.sh - - bin/container-shell.sh - kernel-module-binder: - plugin: make - source: kernel/binder - snap: - - binder_linux.ko - kernel-module-ashmem: - plugin: make - source: kernel/ashmem - snap: - - ashmem_linux.ko lxc: source: git://github.com/morphis/lxc source-branch: snappy-support From ec2002c97186270cc4cc703b51cf0fd5fb757ab0 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:33:34 +0100 Subject: [PATCH 2/8] Start anboxd as part of class core Boot is too early for is now that we depend on some system services like the ActivityManager one. --- android/anboxd.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/anboxd.rc b/android/anboxd.rc index 985655a..4a77419 100644 --- a/android/anboxd.rc +++ b/android/anboxd.rc @@ -1,5 +1,5 @@ service anboxd /system/bin/anboxd - class boot + class core # We will ever only have a single network interface we need to care # about so we can add static setup for this one here. From 089e2daf226ed20525868a2763c93f24b09100a1 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:34:26 +0100 Subject: [PATCH 3/8] Add simple script to build and load relevant kernel modules --- scripts/load-kmods.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 scripts/load-kmods.sh diff --git a/scripts/load-kmods.sh b/scripts/load-kmods.sh new file mode 100755 index 0000000..12a98a9 --- /dev/null +++ b/scripts/load-kmods.sh @@ -0,0 +1,5 @@ +#!/bin/sh -ex +sudo rmmod binder_linux || true +sudo rmmod ashmem_linux || true +(cd kernel/binder ; make clean && make -j4 ; sudo insmod binder_linux.ko; sudo chmod 666 /dev/binder) +(cd kernel/ashmem ; make clean && make -j4 ; sudo insmod ashmem_linux.ko; sudo chmod 666 /dev/ashmem) From dde578674fd265ceb2046cd3b1c64f75df13a595 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:41:48 +0100 Subject: [PATCH 4/8] Drop extensive logging from anboxd service --- android/service/platform_service.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/android/service/platform_service.cpp b/android/service/platform_service.cpp index 8ab0013..321791b 100644 --- a/android/service/platform_service.cpp +++ b/android/service/platform_service.cpp @@ -50,10 +50,6 @@ anbox::PlatformApiStub::WindowStateUpdate::Window PlatformService::unpack_window auto task_id = data.readInt32(); auto stack_id = data.readInt32(); - ALOGI(" Window: package=%s frame={%d,%d,%d,%d} task=%d stack=%d", - package_name.string(), frame_left, frame_top, frame_right, frame_bottom, - task_id, stack_id); - return anbox::PlatformApiStub::WindowStateUpdate::Window{ -1, // Display id will be added by the caller has_surface, @@ -67,13 +63,10 @@ anbox::PlatformApiStub::WindowStateUpdate::Window PlatformService::unpack_window status_t PlatformService::update_window_state(const Parcel &data) { anbox::PlatformApiStub::WindowStateUpdate state; - ALOGI("Udated windows:"); const auto num_displays = data.readInt32(); for (auto n = 0; n < num_displays; n++) { const auto display_id = data.readInt32(); const auto num_windows = data.readInt32(); - ALOGI(" Display: id=%d", display_id); - for (auto m = 0; m < num_windows; m++) { auto window = unpack_window_state(data); window.display_id = display_id; @@ -81,7 +74,6 @@ status_t PlatformService::update_window_state(const Parcel &data) { } } - ALOGI("Removed windows:"); const auto num_removed_windows = data.readInt32(); for (auto n = 0; n < num_removed_windows; n++) { auto window = unpack_window_state(data); From 89869934b9af2e4fb5520f695081284cbf51d358 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:42:08 +0100 Subject: [PATCH 5/8] Drop unneeded include of utils header file --- src/anbox/rpc/message_processor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/anbox/rpc/message_processor.cpp b/src/anbox/rpc/message_processor.cpp index 6e0488e..c9134c6 100644 --- a/src/anbox/rpc/message_processor.cpp +++ b/src/anbox/rpc/message_processor.cpp @@ -20,7 +20,6 @@ #include "anbox/rpc/make_protobuf_object.h" #include "anbox/rpc/constants.h" #include "anbox/common/variable_length_array.h" -#include "anbox/utils.h" #include "anbox_rpc.pb.h" From c21cccd98a2676b39f802fcf984e64418649565d Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:43:50 +0100 Subject: [PATCH 6/8] Drop further unneeded log statements --- android/service/local_socket_connection.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/android/service/local_socket_connection.cpp b/android/service/local_socket_connection.cpp index c2ff040..f5d090a 100644 --- a/android/service/local_socket_connection.cpp +++ b/android/service/local_socket_connection.cpp @@ -54,15 +54,12 @@ LocalSocketConnection::~LocalSocketConnection() { ssize_t LocalSocketConnection::read_all(std::uint8_t *buffer, const size_t &size) { ssize_t bytes_read = ::recv(fd_, reinterpret_cast(buffer), size, 0); - ALOGI("Read %d bytes", bytes_read); return bytes_read; } void LocalSocketConnection::send(char const* data, size_t length) { size_t bytes_written{0}; - ALOGI("Writing %d bytes", length); - while(bytes_written < length) { ssize_t const result = ::send(fd_, data + bytes_written, From 972260b76c2af4551bd15620fc863851bb0b5262 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 28 Nov 2016 07:55:50 +0100 Subject: [PATCH 7/8] Don't throw exception for socket failure as we already bring down the connection --- src/anbox/network/socket_connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anbox/network/socket_connection.cpp b/src/anbox/network/socket_connection.cpp index e7b50f7..e36f56b 100644 --- a/src/anbox/network/socket_connection.cpp +++ b/src/anbox/network/socket_connection.cpp @@ -72,7 +72,7 @@ void SocketConnection::on_read_size(const boost::system::error_code& error, std: if (connections_) connections_->remove(id()); - BOOST_THROW_EXCEPTION(std::runtime_error(error.message())); + return; } std::vector data(bytes_read); From e75940711b54f3eac6aa960fd5251bcb5b6a3be0 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Tue, 29 Nov 2016 06:18:01 +0100 Subject: [PATCH 8/8] Always start new applications on the freeform stack --- android/service/android_api_skeleton.cpp | 8 ++++++-- src/anbox/bridge/android_api_stub.cpp | 3 ++- src/anbox/cmds/launch.cpp | 4 ++-- src/anbox/dbus/skeleton/application_manager.cpp | 4 ---- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/android/service/android_api_skeleton.cpp b/android/service/android_api_skeleton.cpp index f692721..63d2f6b 100644 --- a/android/service/android_api_skeleton.cpp +++ b/android/service/android_api_skeleton.cpp @@ -83,12 +83,16 @@ void AndroidApiSkeleton::launch_application(anbox::protobuf::bridge::LaunchAppli (void) response; std::string intent = request->package_name(); - intent += "/"; - intent += request->activity(); + if (request->has_activity()) { + intent += "/"; + intent += request->activity(); + } std::vector argv = { "/system/bin/am", "start", + // Launch any applications always in freeform stack + "--stack", "2", intent, }; diff --git a/src/anbox/bridge/android_api_stub.cpp b/src/anbox/bridge/android_api_stub.cpp index 92c4370..a4a9f46 100644 --- a/src/anbox/bridge/android_api_stub.cpp +++ b/src/anbox/bridge/android_api_stub.cpp @@ -92,7 +92,8 @@ void AndroidApiStub::launch(const std::string &package, const std::string &activ auto c = std::make_shared>(); protobuf::bridge::LaunchApplication message; message.set_package_name(package); - message.set_activity(activity); + if (activity.length() > 0) + message.set_activity(activity); { std::lock_guard lock(mutex_); diff --git a/src/anbox/cmds/launch.cpp b/src/anbox/cmds/launch.cpp index 90483ba..809926e 100644 --- a/src/anbox/cmds/launch.cpp +++ b/src/anbox/cmds/launch.cpp @@ -30,8 +30,8 @@ anbox::cmds::Launch::Launch() flag(cli::make_flag(cli::Name{"package"}, cli::Description{"Package the application is part of"}, package_)); flag(cli::make_flag(cli::Name{"activity"}, cli::Description{"Activity of the application to start"}, activity_)); action([this](const cli::Command::Context&) { - if (package_.empty() || activity_.empty()) - BOOST_THROW_EXCEPTION(std::runtime_error("No package or activity specified")); + if (package_.empty() && activity_.empty()) + BOOST_THROW_EXCEPTION(std::runtime_error("Package or activity name not specified")); auto bus = std::make_shared(core::dbus::WellKnownBus::session); bus->install_executor(core::dbus::asio::make_executor(bus)); diff --git a/src/anbox/dbus/skeleton/application_manager.cpp b/src/anbox/dbus/skeleton/application_manager.cpp index a5ae6f9..04f0d26 100644 --- a/src/anbox/dbus/skeleton/application_manager.cpp +++ b/src/anbox/dbus/skeleton/application_manager.cpp @@ -35,8 +35,6 @@ ApplicationManager::ApplicationManager(const core::dbus::Bus::Ptr &bus, auto reader = msg->reader(); reader >> path; - DEBUG("path %s", path); - core::dbus::Message::Ptr reply; try { @@ -52,8 +50,6 @@ ApplicationManager::ApplicationManager(const core::dbus::Bus::Ptr &bus, err.what()); } - DEBUG("Sending reply"); - bus_->send(reply); });