Merge branch 'master' into basic-touch
This commit is contained in:
commit
205be644d6
6 changed files with 115 additions and 6 deletions
|
|
@ -75,7 +75,7 @@ $ anbox-installer
|
||||||
|
|
||||||
This will guide you through the installation process.
|
This will guide you through the installation process.
|
||||||
|
|
||||||
**NOTE:** Anbox is currently in a **pre-alpha development state**. Don't expect a
|
**NOTE:** Anbox is currently in a **alpha development state**. Don't expect a
|
||||||
fully working system for a production system with all features you need. You will
|
fully working system for a production system with all features you need. You will
|
||||||
for sure see bugs and crashes. If you do so, please don't hestitate and report them!
|
for sure see bugs and crashes. If you do so, please don't hestitate and report them!
|
||||||
|
|
||||||
|
|
|
||||||
106
docs/install.md
Normal file
106
docs/install.md
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
# Install Anbox
|
||||||
|
|
||||||
|
To install Anbox your system need to support [snaps](https://snapcraft.io). We
|
||||||
|
do not officially support any other distribution method of Anbox at the moment
|
||||||
|
but there are community made packages for various distributions (e.g. Arch Linux).
|
||||||
|
However please keep in mind that the Anbox project can give not support them
|
||||||
|
and its solely in the responsibility of the community packager to keep up with
|
||||||
|
upstream development and update the packaging to any new changes. Please feel
|
||||||
|
free to report still any bugs you encounter as they may not be related to the
|
||||||
|
packaging.
|
||||||
|
|
||||||
|
If you don't know about snaps yet head over to [snapcraft.io](https://snapcraft.io/)
|
||||||
|
to get an introduction of what snaps are, how to install support for them on your
|
||||||
|
distribution and how to use them.
|
||||||
|
|
||||||
|
The installation of Anbox consists of two steps.
|
||||||
|
|
||||||
|
1. Install necessary kernel modules
|
||||||
|
2. Install the Anbox snap
|
||||||
|
|
||||||
|
In order to support the mandatory kernel subsystems ashmem and binder for the
|
||||||
|
Android container you have to install two
|
||||||
|
[DKMS](https://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support)
|
||||||
|
based kernel modules. The source for the kernel modules is maintained by the
|
||||||
|
Anbox project [here](https://github.com/anbox/anbox/tree/master/kernel).
|
||||||
|
|
||||||
|
At the moment we only have packages prepared for Ubuntu in a PPA on Launchpad.
|
||||||
|
If you want to help to get the packages in your favorite distribution please
|
||||||
|
come and talk to us or submit a PR with the distribution specific packaging.
|
||||||
|
|
||||||
|
The second step will install the Anbox snap from the store and will give you
|
||||||
|
everything you need to run the full Anbox experience.
|
||||||
|
|
||||||
|
## Install necessary kernel modules
|
||||||
|
|
||||||
|
In order to add the PPA to your Ubuntu system please run the following commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo add-apt-repository ppa:morphis/anbox-support
|
||||||
|
$ sudo apt update
|
||||||
|
$ sudo apt install anbox-modules-dkms
|
||||||
|
```
|
||||||
|
|
||||||
|
These will add the PPA to your system and install the `anbox-modules-dkms`
|
||||||
|
package which contains the ashmem and binder kernel modules. They will be
|
||||||
|
automatically rebuild everytime the kernel packages on your system update.
|
||||||
|
|
||||||
|
After you installed the `anbox-modules-dkms` package you have to manually
|
||||||
|
load the kernel modules. The next time your system starts they will be
|
||||||
|
automatically loaded.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo modprobe ashmem_linux
|
||||||
|
$ sudo modprobe binder_linux
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you should have two new nodes in your systems `/dev` directory:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ls -1 /dev/{ashmem,binder}
|
||||||
|
/dev/ashmem
|
||||||
|
/dev/binder
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install the Anbox snap
|
||||||
|
|
||||||
|
Installing the Anbox snap is very simple:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ snap install --devmode --beta anbox
|
||||||
|
```
|
||||||
|
|
||||||
|
If you didn't logged into the Ubuntu Store yet, the `snap` command will
|
||||||
|
ask you to use `sudo snap ...` in order to install the snap:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo snap install --devmode --beta anbox
|
||||||
|
```
|
||||||
|
|
||||||
|
At the moment we require the use of `--devmode` as the Anbox snap is not
|
||||||
|
yet fully confined. Work has started with the upstream `snapd` project to
|
||||||
|
get support for full confinement.
|
||||||
|
|
||||||
|
As a side effect of using `--devmode` the snap will not automatically update.
|
||||||
|
In order to update to a newer version you can run:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ snap refresh --beta --devmode anbox
|
||||||
|
```
|
||||||
|
|
||||||
|
Information about the currently available versions of the snap is available
|
||||||
|
via:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ snap info anbox
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available snap channels
|
||||||
|
|
||||||
|
Currently we only use the beta and edge channels for the Anbox snap. The edge
|
||||||
|
channel tracks the latest development is always synced with the state of the
|
||||||
|
master branch on github. The beta channel is updated less frequently to provide
|
||||||
|
a more stable and bug free experience.
|
||||||
|
|
||||||
|
Once proper confinement for the Anbox snap exists we will also start using the
|
||||||
|
candidate and stable channels.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python2
|
||||||
|
|
||||||
# Copyright 2015 The Android Open Source Project
|
# Copyright 2015 The Android Open Source Project
|
||||||
#
|
#
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@ void Channel::send_message(const std::uint8_t &type,
|
||||||
google::protobuf::MessageLite const &message) {
|
google::protobuf::MessageLite const &message) {
|
||||||
const size_t size = message.ByteSize();
|
const size_t size = message.ByteSize();
|
||||||
const unsigned char header_bytes[header_size] = {
|
const unsigned char header_bytes[header_size] = {
|
||||||
|
static_cast<unsigned char>((size >>16) & 0xff),
|
||||||
static_cast<unsigned char>((size >> 8) & 0xff),
|
static_cast<unsigned char>((size >> 8) & 0xff),
|
||||||
static_cast<unsigned char>((size >> 0) & 0xff), type,
|
static_cast<unsigned char>((size >> 0) & 0xff), type,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
namespace anbox {
|
namespace anbox {
|
||||||
namespace rpc {
|
namespace rpc {
|
||||||
static constexpr const long header_size{3};
|
static constexpr const long header_size{4};
|
||||||
static constexpr unsigned int const serialization_buffer_size{2048};
|
static constexpr unsigned int const serialization_buffer_size{2048};
|
||||||
|
|
||||||
enum MessageType {
|
enum MessageType {
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,10 @@ bool MessageProcessor::process_data(const std::vector<std::uint8_t> &data) {
|
||||||
|
|
||||||
while (buffer_.size() > 0) {
|
while (buffer_.size() > 0) {
|
||||||
const auto high = buffer_[0];
|
const auto high = buffer_[0];
|
||||||
const auto low = buffer_[1];
|
const auto medium = buffer_[1];
|
||||||
size_t const message_size = (high << 8) + low;
|
const auto low = buffer_[2];
|
||||||
const auto message_type = buffer_[2];
|
size_t const message_size = (high << 16) + (medium << 8) + low;
|
||||||
|
const auto message_type = buffer_[3];
|
||||||
|
|
||||||
// If we don't have yet all bytes for a new message return and wait
|
// If we don't have yet all bytes for a new message return and wait
|
||||||
// until we have all.
|
// until we have all.
|
||||||
|
|
@ -101,6 +102,7 @@ void MessageProcessor::send_response(::google::protobuf::uint32 id,
|
||||||
|
|
||||||
const size_t size = send_response_buffer.size();
|
const size_t size = send_response_buffer.size();
|
||||||
const unsigned char header_bytes[header_size] = {
|
const unsigned char header_bytes[header_size] = {
|
||||||
|
static_cast<unsigned char>((size >> 16) & 0xff),
|
||||||
static_cast<unsigned char>((size >> 8) & 0xff),
|
static_cast<unsigned char>((size >> 8) & 0xff),
|
||||||
static_cast<unsigned char>((size >> 0) & 0xff), MessageType::response,
|
static_cast<unsigned char>((size >> 0) & 0xff), MessageType::response,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue