Android Emulator Container Scripts

Overview

Android Emulator Container Scripts

This is a set of minimal scripts to run the emulator in a container for various systems such as Docker, for external consumption. The scripts are compatible with both Python version 2 and 3.

*Note that this is still an experimental feature and we recommend installing this tool in a python virtual environment. Please file issues if you notice that anything is not working as expected.

Requirements

These demos are intended to be run on a linux OS. Your system must meet the following requirements:

  • A Python interpreter must be installed.

  • ADB must be available on the path. ADB comes as part of the Android SDK. Note that installing the command line tools is sufficient.

  • Docker must be installed. Make sure you can run it as non-root user

  • Docker-compose must be installed.

  • KVM must be available. You can get access to KVM by running on "bare metal", or on a (virtual) machine that provides nested virtualization. If you are planning to run this in the cloud (gce/azure/aws/etc..) you first must make sure you have access to KVM. Details on how to get access to KVM on the various cloud providers can be found here:

    • AWS provides bare metal instances that provide access to KVM.
    • Azure: Follow these instructions to enable nested virtualization.
    • GCE: Follow these instructions to enable nested virtualization.

Keep in mind that you will see reduced performance if you are making use of nested virtualization. The containers have been tested under Debian and Ubuntu running kernel 5.2.17.

NOTE: The images will not run in docker on mac or windows

Quick start with hosted containers.

We now host a set of containers in a public repository. You can find details about the containers here. You can now run these containers without building them. For example:

docker run \
  -e ADBKEY="$(cat ~/.android/adbkey)" \
  --device /dev/kvm \
  --publish 8554:8554/tcp \
  --publish 5555:5555/tcp  \
  us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2

This will pull down the container if it is not locally available and launch it. You can see that is starting:

After this you can connect to the device by configuring adb:

  adb connect localhost:5555

The device should now show up after a while as:

$ adb devices

List of devices attached
localhost:5555 device

If you wish to use this in a script you could do the following:

docker run -d \
  -e ADBKEY="$(cat ~/.android/adbkey)" \
  --device /dev/kvm \
  --publish 8554:8554/tcp \
  --publish 5555:5555/tcp  \
  us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
  adb connect localhost:5555
  adb wait-for-device

  # The device is now booting, or close to be booted

A more detailed script can be found in run-in-script-example.sh.

Install in a virtual environment

You can install the python package as follows:

source ./configure.sh

This will activate a virtual environment and make the executable emu-docker available. You can get detailed information about the usage by launching it as follows:

emu-docker -h

You will have to accept the license agreements before you can create docker containers.

Quick start, interactively creating and running a docker image

You can interactively select which version of android and emulator you wish to use by running:

emu-docker interactive --start

You will be asked to select a system image and an emulator version, after which a docker file will be created. The system image and emulator will be downloaded to the current directory if needed. The script will provide you with a command to see the logs as well as the command to stop the container.

If the local adb server detected the started container automatically, you have nothing to do to query it through adb. If that's not the case, you can now connect to the running device using adb:

adb connect localhost:5555

To check if adb has seen the container, you can use the:

adb devices

command and check if a device is detected.

Do not forget to stop the docker container once you are done!

Read the section on making the emulator available on the web to run the emulator using webrtc

Obtaining URLs for emulator/system image zip files

Issuing:

emu-docker list

will query the currently published Android SDK and output URLs for the zip files of:

  • Available and currently Docker-compatible system images
  • Currently published and advertised emulator binaries

For each system image, the API level, variant, ABI, and URL are displayed. For each emulator, the update channel (stable vs canary), version, host os, and URL are displayed.

Example output:

SYSIMG android 21 L x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-21_r05.zip
SYSIMG android 22 L x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-22_r06.zip
SYSIMG android 23 M x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-23_r10.zip
SYSIMG android 24 N x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-24_r08.zip
SYSIMG android 25 N x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-25_r01.zip
SYSIMG android 26 O x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-26_r01.zip
SYSIMG android 27 O x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-27_r01.zip
SYSIMG android 28 P x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-28_r04.zip
SYSIMG android 28 Q x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-Q_r04.zip
SYSIMG google_apis 21 L x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-21_r30.zip
SYSIMG google_apis 22 L x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-22_r24.zip
SYSIMG google_apis 23 M x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-23_r31.zip
SYSIMG google_apis 24 N x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-24_r25.zip
SYSIMG google_apis 25 N x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-25_r16.zip
SYSIMG google_apis 26 O x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-26_r13.zip
SYSIMG google_apis 28 P x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-28_r09.zip
SYSIMG google_apis 28 Q x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-Q_r04.zip
SYSIMG google_apis_playstore 28 P x86_64 https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-28_r08.p
SYSIMG google_apis_playstore 28 Q x86_64 https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-Q_r04.zp
EMU stable 29.0.11 windows https://dl.google.com/android/repository/emulator-windows-5598178.zip
EMU stable 29.0.11 macosx https://dl.google.com/android/repository/emulator-darwin-5598178.zip
EMU stable 29.0.11 linux https://dl.google.com/android/repository/emulator-linux-5598178.zip
EMU stable 28.0.25 windows https://dl.google.com/android/repository/emulator-windows-5395263.zip
EMU canary 29.0.12 windows https://dl.google.com/android/repository/emulator-windows-5613046.zip
EMU canary 29.0.12 macosx https://dl.google.com/android/repository/emulator-darwin-5613046.zip
EMU canary 29.0.12 linux https://dl.google.com/android/repository/emulator-linux-5613046.zip

One can then use tools like wget or a browser to download a desired emulator and system image. After the two are obtained, we can build a Docker image.

Given an emulator zip file and a system image zip file, we can build a directory that can be sent to docker build via the following invocation of emu-docker:

emu-docker create 
    
    
       [--dest docker-src-dir
(getcwd()/src by default)]

    
   

This places all the right elements to run a docker image, but does not build, run or publish yet. A Linux emulator zip file must be used.

Building the Docker image: Setting up the source dir

To build the Docker image corresponding to these emulators and system images:

docker build 
   

   

A Docker image ID will output; save this image ID.

Running the Docker image

We currently assume that KVM will be used with docker in order to provide CPU virtualization capabilities to the resulting Docker image.

We provide the following run script:

./run.sh 
    
    

    
   

It does the following:

">
docker run -e ADBKEY="$(cat ~/.android/adbkey)" \
--device /dev/kvm \
--publish 8554:8554/tcp \
--publish 5555:5555/tcp 
   

   
  • Sets up the ADB key, assuming one exists at ~/.android/adbkey
  • Uses --device /dev/kvm to have CPU acceleration
  • Starts the emulator in the docker image with its gRPC service, forwarding the host ports 8554/5555 to container ports 8554/5555 respectively.
  • The gRPC service is used to communicate with the running emulator inside the container.

Note: You can use a public adbkey by injecting the ADBKEY_PUB variable, i.e.: -e ADBKEY_PUB="$(cat ~/.android/adbkey.pub)"

You also have the option to mount a /data partition which the emulator will use if available. This enables you to use a tmpfs which can give increased performance, especially in the nested virtualization scenario.

For example:

">
docker run -e ADBKEY="$(cat ~/.android/adbkey)" \
--device /dev/kvm \
--mount type=tmpfs,destination=/data \
--publish 8554:8554/tcp \
--publish 5555:5555/tcp 
   

   

Running the Docker image with GPU acceleration

We currently only support hardware acceleration for NVIDIA. In order to make use of hardware acceleration you might have to install the NVIDIA docker extensions from here if you are running an older version of docker (<19.03). You must make sure you have a minimal X installation if you are using a cloud instance. For example Xvfb can be used. You must build the containers by passing in the --gpu flag:

emu-docker create stable Q --gpu

You can now launch the emulator with the run-with-gpu.sh script:

./run-with-gpu.sh 
    
    

    
   

The script is similar as to the one described above with the addition that it will:

  • Make all the available gpu's available (--gpu all)
  • Opens up xhost access for the container
  • Enable the domain socket under /tmp/.X11-unix to communicate with hosts X server

Hardware acceleration will significantly improve performance of applications that heavily rely on graphics. Note that even though we need a X11 server for gpu acceleration there will be no ui displayed.

Pushing images to a repository

You can push the created images to a repository by providing the --push and --repo and --tag parameters when creating an image. The --tag parameter is optional and is used to indicate the version of the created image. This will default to the build-id of the emulator, as system images are rarely updated.

We adopted the following naming scheme for images:

{api}-{sort}-{abi}

Where:

  • api is the api level
  • sort is one of: aosp, google, playstore
    • aosp: A basic android open source image
    • google: A system image that includes access to Google Play services.
    • playstore: A system image that includes the Google Play Store app and access to Google Play services, including a Google Play tab in the Extended controls dialog that provides a convenient button for updating Google Play services on the device.
  • abi indicates the underlying CPU architecture, which is one of: x86, x64, a32, a64. Note that arm images are not hardware accelerated and might not be fast enough.

For example: 29-playstore-x86:30.1.2 indicates a playstore enabled system image with Q running on 32-bit x86.

An example invocation for publishing all Q images to google cloud repo could be:

    emu-docker -v create --push --repo us.gcr.io/emulator-project/ stable "Q"

Images that have been pushed to a repository can be launched directly from the repository. For example:

    docker run --device /dev/kvm --publish 8554:8554/tcp --publish 5555:5555/tcp \
    us.gcr.io/emulator-project/29-playstore-x86:30.1.2

Communicating with the emulator in the container

adb

We forward the port 5555 for adb access to the emulator running inside the container. Adb might not automatically detect the device, so run:

adb connect localhost:5555

Your device should now show up as:

$ adb devices

List of devices attached:
localhost:5555 device

Make the emulator accessible on the web

This repository also contains an example that demonstrates how you can use docker to make the emulator accessible through the web. This is done by composing the following set of docker containers:

  • Envoy, an edge and service proxy: The proxy is responsible for the following:
    • Offer TLS (https) using a self signed certificate
    • Redirect traffic on port 80 (http) to port 443 (https)
    • Act as a gRPC proxy for the emulator.
    • Verifying tokens to permit access to the emulator gRPC endpoint.
    • Redirect other requests to the Nginx component which hosts a React application.
  • Nginx, a webserver hosting a compiled React App
  • Token Service a simple token service that hands out JWT tokens to grant access to the emulator.
  • The emulator with a gRPC endpoint and a WebRTC video bridge.

Important Notice!

In order to run this sample and be able to interact with the emulator you must keep the following in mind:

  • The demo has two methods to display the emulator.
    1. Create an image every second, which is displayed in the browser. This approach will always work, but gives poor performance.
    2. Use WebRTC to display the state of the emulator in real time. This will only work if you are able to create a peer to peer connection to the server hosting the emulator. This is usually not a problem when your server is publicly visible, or if you are running the emulator on your own intranet.

Requirements

  • You will need docker-compose.
  • You must have port 80 and 443 available. The docker containers will create an internal network and expose the http and https ports.
  • You will need to create an emulator docker image, as described in the documentation above.
  • Depending on your network you might need turn

Running the emulator on the web

In order to create the web containers you must have the following tools available:

  • NodeJS
  • Npm

Next you must create a container with the emulator & system image version you wish to use. For example:

. ./configure.sh && emu-docker create canary "P.*x64"

Running the create script

Once you have taken care of the steps above you can create the containers using the create_web_container.sh script:

$ ./create_web_container.sh -h
   usage: create_web_container.sh [-h] [-a] [-s] [-i] -p user1,pass1,user2,pass2,...

   optional arguments:
   -h        show this help message and exit.
   -a        expose adb. Requires ~/.android/adbkey.pub to be available at run.
   -s        start the container after creation.
   -p        list of username password pairs.  Defaults to: [jansene,hello]
   -i        install systemd service, with definition in /opt/emulator

For example:

./create_web_container.sh -p user1,passwd1,user2,passwd2,....

This will do the following:

  • Create a virtual environment
  • Configure the token service to give access to the passed in users.
  • Generate a public and private key pair, used to encrypt/decrypt JWT tokens
  • Create the set of containers to interact with the emulator.
  • Note that the systemd service has only been tested on debian/ubuntu.

You can now launch the container as follows:

docker-compose -f js/docker/docker-compose.yaml up

If you wish to make ADB available you can apply the overlay found in js/docker/development.yaml as follows:

docker-compose -f js/docker/docker-compose.yaml -f js/docker/development.yaml up

Point your browser to localhost. You will likely get a warning due to the usage of the self signed certificate. Once you accept the cert you should be able to login and start using the emulator.

Keep the following things in mind when you make the emulator accessible over adb:

  • Port 5555 will be exposed in the container.
  • The container must have access to the file: ~/.android/adbkey. This is the PRIVATE key used by adb. Without this you will not be able to access the device over adb.
  • The adb client you use to connect to the container must have access to the private key (~/.android/adbkey). This is usually the case if you are on the same machine.
  • You must run: adb connect ip-address-of-container:5555 before you can interact with the device. For example:
$ adb connect localhost:5555
$ adb shell getprop

Creating cloud instances

There is a sample cloud-init script that provides details on how you can configure an instance that will automatically launch and configure an emulator on creation. Details on how to do this can be found here.

Troubleshooting

We have a separate document related to dealing with issues.

Modifying the demo

Details on the design and how to modify the React application can be found here

Comments
  • Emulator is running but cannot connect to it

    Emulator is running but cannot connect to it

    I have successfully ran the emulator, from the logs, it looks like its booting up just fine. However when, I connect to it via adb connect :5555 and then type adb devices, I get the following: <IP Address>:5555 offline

    Furthermore, when accessing the emulator through the react website, I can only see a black screen that that does not change to anything no matter how long I wait, see attached screenshot: image

    Anyone know what could be the issue here?

    opened by NoelOmo 26
  • ARM images

    ARM images

    @pokowaka : I know that this doesn't really belong here, but I couldn't find any other place to ask for help.

    I'd like to run an ARM64 Android System image in the emulator on an ARM64 host. Since Emulator version 30.0.26 we can build the emulator for ARM64 hosts. I have such a host but the newest ARM64 image for android emulator that I could get my hands on is Nougat (API 25).

    I've tried building my own from AOSP, but it didn't start.

    Any hints are welcome!

    opened by copiltembel 25
  • GPU build stream produces dark screens when no pixels has changed

    GPU build stream produces dark screens when no pixels has changed

    When starting the container stack with GPU enabled the result is that the stream flickers a lot when no pixels are changing on the screen. If some animation is playing everything is running smoothly but as soon as there are no animations the screen either flickers or goes dark.

    To replicate this issue from a clean master branch I perform the following commands:

    source configure.sh
    emu-docker create stable Q --gpu
    ./create_web_container.sh -p user1,passwd1
    

    To actually start the container stack I run:

    xhost +SI:localuser:root
    
    docker network create envoymesh
    
    docker run --network=envoymesh --expose 8080 --expose 8001 --expose 8443 -p 80:8080 -p 443:8443 -p 8001:8001 -d emulator_envoy
    docker run --network=envoymesh --net-alias jwt_signer --expose 8080 -d emulator_jwt_signer
    docker run --network=envoymesh --net-alias nginx --expose 80 -d emulator_nginx
    docker run --gpus all \
    -e DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e "TOKEN=$(cat ~/.emulator_console_auth_token)" \
    -e "ADBKEY=$(cat ~/.android/adbkey)" \
    -e "EMULATOR_PARAMS=-gpu host ${PARAMS}" \
    --device /dev/kvm \
    --network=envoymesh \
    --net-alias emulator \
    --publish 8554:8554/tcp \
    --publish 5555:5555/tcp \
    emulator_emulator
    
    opened by danielmalmq 21
  • Unable to get video or images out of the box

    Unable to get video or images out of the box

    So I have got the containers and images all up and running, but am unable to see any video or images on the React site.

    I thought maybe this was due to the no-window flag used in launch-emulator.sh, but removing this flag ended up causing a Qt error, since it seems like not all the dependencies are installed in docker.

    Is the video/image feature supposed to just work out of the box, with -no-window param set?

    For reference, the error I am getting with Qt when running without -no-window is:

    emulator: INFO: QtLogger.cpp:66: Info: Could not load the Qt platform plugin "xcb" in "/android/sdk/emulator/lib64/qt/plugins" even though it was found. ((null):0, (null))
    emulator_1     | 
    emulator_1     | 
    emulator_1     | emulator: INFO: QtLogger.cpp:66: Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    emulator_1     | 
    emulator_1     | Available platform plugins are: xcb.
    

    which seems to be this error https://github.com/therecipe/qt/issues/775.

    Any insight is appreciated, thanks!

    opened by li-richard 19
  • WebRTC view shows connected with no video, then drops connection

    WebRTC view shows connected with no video, then drops connection

    image image

    As seen in the images, the live view is showing as connected but with no video, then disconnected with a black screen.

    Also attaching the full logs from

    docker logs cafc9ec1a59e | grep video

    logs.txt

    The logging just ends after failing to resolve the ICE connection.

    video: (p2p_transport_channel.cc:1228): Failed to resolve ICE candidate hostname 211c4778-6954-4597-9902-2f48be491241.local with error -2

    Does this error mean that a TURN server is necessary? I was under the impression that it would work without one since both machines are on the same network.

    opened by li-richard 17
  • Touch events are not handled properly

    Touch events are not handled properly

    Touch event handling wasn't implemented in /js/src/components/emulator/views/webrtc_view.js so I did it. I followed the protobuf specs and I think the code is correct and I also see the following logs from the emulator for a 3 finger multi-touch:

    emulator: INFO: LoggingInterceptor.cpp:71: 1582287029937053, rcvTime: 75, sndTime: 195, UNARY, rcv: 232, snd: 24, /android.emulation.control.EmulatorController/sendTouch(touches { x: 376 y: 385 } touches { x: 215 y: 431 identifier: 1 } touches { x: 87 y: 633 identifier: 2 }) -> [], OK
    emulator: INFO: LoggingInterceptor.cpp:71: 1582287029943074, rcvTime: 57, sndTime: 178, UNARY, rcv: 184, snd: 24, /android.emulation.control.EmulatorController/sendTouch(touches { x: 376 y: 385 } touches { x: 87 y: 633 identifier: 2 }) -> [], OK
    emulator: INFO: LoggingInterceptor.cpp:71: 1582287029946857, rcvTime: 53, sndTime: 175, UNARY, rcv: 136, snd: 24, /android.emulation.control.EmulatorController/sendTouch(touches { x: 376 y: 385 }) -> [], OK
    emulator: INFO: LoggingInterceptor.cpp:71: 1582287029947654, rcvTime: 26, sndTime: 188, UNARY, rcv: 48, snd: 24, /android.emulation.control.EmulatorController/sendTouch() -> [], OK
    
    

    ...but nothing happens on the emulator.

    I added multi-touch to my Pixel2 config.ini: hw.screen=multi-touch and I start the elulator with the following command in launch-emulator.sh:

    exec emulator/emulator @Pixel2 -no-audio -verbose -wipe-data \
      -ports 6554,6555 \
      -grpc 5556 -no-window -skip-adb-auth \
      -no-snapshot \
      -screen multi-touch \    <-- enable multi-touch support
      -no-boot-anim \
      -shell-serial file:/tmp/android-unknown/kernel.log \
      -logcat-output /tmp/android-unknown/logcat.log \
      -feature  AllowSnapshotMigration \
      -gpu swiftshader_indirect \
      {{extra}} ${EMULATOR_PARAMS} -qemu -append panic=1
    

    I still see these log lines after stating the mulator:

    emulator: Starting QEMU main loop
    ...
    emulator: goldfish_events.have-touch: false
    emulator: goldfish_events.have-multitouch: false
    

    If I access the emulator container and I monitor the event with adb: adb shell getevent -l I see the the following for a single touch:

    /dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000000f1            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    000001d7            
    /dev/input/event1: EV_SYN       SYN_REPORT           00000000
    

    ...and the following for a 2 finger multi-touch:

    /dev/input/event1: EV_ABS       ABS_MT_SLOT          00000000            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_X    00000155            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    000001a1            
    /dev/input/event1: EV_SYN       SYN_REPORT           00000000            
    /dev/input/event1: EV_ABS       ABS_MT_SLOT          00000001            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000000c4            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    00000152            
    /dev/input/event1: EV_SYN       SYN_REPORT           00000000            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000000c5            
    

    Can anyone help me what should I do to get this work? I would appreciate it a lot.

    used images: SYSIMG 29 Q google_apis x86 https://dl.google.com/android/repository/sys-img/google_apis/x86-29_r09.zip EMU stable 30.0.0 linux https://dl.google.com/android/repository/emulator-linux-6203977.zip

    opened by vcs222 9
  • Multi-touch support doesn't work properly

    Multi-touch support doesn't work properly

    When testing an android-emulator (6837279) with a mobile device multi-touch events seems to be not processed properly by the emulator.

    I am experiencing issues with not releasing multi-touches properly, and the emulator kept touch on hold, blocking consecutive touches (sometimes multi-touches get processed but seem like some touches are still not released).

    I tried to set force:0 for touchEnd events manually when releasing touches, but anyway it didn't fix the problem, sometimes these multi-touches are processed properly but in a while, some touches still kept on hold.

    Did you experience the same issues or multi-touches are not supported yet?

    opened by matoh 8
  • Invalid command-line parameter

    Invalid command-line parameter

    When I run: docker-compose -f js/docker/docker-compose-build.yaml up

    I get this error below, that causes the emulator to immediately exit and not run

    emulator_1 | * daemon started successfully emulator_1 | invalid command-line parameter: =======. emulator_1 | Hint: use '@foo' to launch a virtual device named 'foo'. emulator_1 | please use -help for more information docker_emulator_1 exited with code 1

    opened by Chineye-UTexas 8
  • kernel: [   32.960029] watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [ip:1924]

    kernel: [ 32.960029] watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [ip:1924]

    I'm trying to make scripts work on CentOS VM and I'm seeing soft lockups. Any hint is appreciated. KVM is enabled. Proxy is used and I can see env variables are correctly configured inside container, proxy is not localhost but an IP. I'm creating image and running container as:

    $ emu-docker create --no-metrics emulator-30.0.12.zip sys-img-google_apis-29-Q-x86_64.zip
    $ ./run.sh 427c93b52b2b -verbose
    

    Emulator stays in offline mode forever. Private/public keys are set and seems to be correctly passed in container.

    $ adb devices
    * daemon not running; starting now at tcp:5037
    * daemon started successfully
    List of devices attached
    emulator-5554	offline
    

    There are soft lockups in log. Whole log is container_soft_lockup.txt and below is only the first soft lockup:

    Last `soft lockup` error (click to expand)
    logcat: 07-20 14:20:43.680  1905  1926 I ServiceManager: Waiting for service 'package_native' on '/dev/binder'...
    logcat: 07-20 14:20:43.780  1905  1926 W ServiceManager: Service package_native didn't start. Returning NULL
    logcat: 07-20 14:20:43.780  1905  1926 E storaged: getService package_native failed
    logcat: 07-20 14:20:43.786  1905  1926 I storaged: storaged: Start
    logcat: 07-20 14:20:43.786  1905  1926 I ServiceManager: Waiting for service 'package_native' on '/dev/binder'...
    logcat: 07-20 14:20:43.886  1905  1926 I ServiceManager: Waiting for service 'package_native' on '/dev/binder'...
    logcat: 07-20 14:20:43.900  1814  1814 E IptablesRestoreController: Timed out waiting for response from iptables process 1929
    logcat: 07-20 14:20:43.986  1905  1926 I ServiceManager: Waiting for service 'package_native' on '/dev/binder'...
    logcat: 07-20 14:20:48.593  1905  1926 I chatty  : uid=0(root) /system/bin/storaged identical 46 lines
    logcat: 07-20 14:20:48.693  1905  1926 I ServiceManager: Waiting for service 'package_native' on '/dev/binder'...
    logcat: 07-20 14:20:48.793  1905  1926 W ServiceManager: Service package_native didn't start. Returning NULL
    logcat: 07-20 14:20:48.793  1905  1926 E storaged: getService package_native failed
    kernel: [   33.190031] watchdog: BUG: soft lockup - CPU#3 stuck for 22s! [ip:1938]
    kernel: [   33.192758] Modules linked in:
    kernel: [   33.194017] CPU: 3 PID: 1938 Comm: ip Not tainted 4.14.150+ #1
    kernel: [   33.196498] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.1-0-g0551a4be2c-prebuilt.qemu-project.org 04/01/2014
    kernel: [   33.201305] task: 00000000fb802cb6 task.stack: 000000007cabebdf
    kernel: [   33.203722] RIP: 0010:iowrite16+0xd/0x35
    kernel: [   33.205327] RSP: 0018:ffff9841001f3340 EFLAGS: 00010282 ORIG_RAX: ffffffffffffff10
    kernel: [   33.208414] RAX: 0000000000000002 RBX: ffff9003b984d000 RCX: 0000000000000001
    kernel: [   33.211272] RDX: 00000000ffffffff RSI: ffff984100145008 RDI: 0000000000000002
    kernel: [   33.214165] RBP: ffff9841001f3340 R08: 0000000000000003 R09: 0000000000000000
    kernel: [   33.217041] R10: ffff9003b7f05140 R11: ffff9841001f3448 R12: ffff9841001f33b0
    kernel: [   33.219893] R13: ffff9003ba1ad400 R14: ffff9841001f3301 R15: 0000000000000002
    kernel: [   33.222856] FS:  000070546a1db010(0000) GS:ffff9003bfd80000(0000) knlGS:0000000000000000
    kernel: [   33.226251] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    kernel: [   33.228813] CR2: 00007ffe8e8ec000 CR3: 00000001271c6000 CR4: 00000000000006a0
    kernel: [   33.232083] Call Trace:
    kernel: [   33.233275]  vp_notify+0x13/0x17
    kernel: [   33.234769]  virtqueue_kick+0x22/0x35
    kernel: [   33.236511]  virtnet_send_command+0xf3/0x165
    kernel: [   33.238459]  virtnet_set_rx_mode+0xac/0x361
    kernel: [   33.240387]  ? __this_cpu_preempt_check+0x13/0x15
    kernel: [   33.242535]  ? __local_bh_enable_ip+0x54/0x71
    kernel: [   33.244495]  ? local_bh_enable+0x15/0x17
    kernel: [   33.246160]  __dev_set_rx_mode+0x7c/0x81
    kernel: [   33.247773]  __dev_open+0xdf/0x14a
    kernel: [   33.249176]  __dev_change_flags+0xad/0x1ce
    kernel: [   33.250854]  dev_change_flags+0x22/0x57
    kernel: [   33.252435]  do_setlink+0x39a/0xc17
    kernel: [   33.253865]  rtnl_newlink+0x621/0x7e1
    kernel: [   33.255372]  ? rtnl_newlink+0x131/0x7e1
    kernel: [   33.256998]  ? selinux_capable+0x1e/0x20
    kernel: [   33.258606]  ? security_capable+0x3c/0x55
    kernel: [   33.260255]  ? ns_capable_common+0x2a/0x58
    kernel: [   33.261926]  ? ns_capable+0xe/0x10
    kernel: [   33.263316]  rtnetlink_rcv_msg+0x262/0x35b
    kernel: [   33.264983]  ? selinux_capable+0x1e/0x20
    kernel: [   33.266840]  ? security_capable+0x3c/0x55
    kernel: [   33.268484]  ? __rtnl_unlock+0x23/0x40
    kernel: [   33.270284]  ? netdev_run_todo+0x59/0x2d5
    kernel: [   33.272186]  ? ns_capable_common+0x2a/0x58
    kernel: [   33.274090]  ? ns_capable+0xe/0x10
    kernel: [   33.275664]  ? avc_has_perm+0x89/0x153
    kernel: [   33.277443]  ? preempt_count_add+0x68/0xb5
    kernel: [   33.279322]  ? rtnetlink_bind+0x29/0x29
    kernel: [   33.281119]  netlink_rcv_skb+0x7e/0xf7
    kernel: [   33.282853]  rtnetlink_rcv+0x10/0x12
    kernel: [   33.284505]  netlink_unicast+0x151/0x1c1
    kernel: [   33.286385]  netlink_sendmsg+0x357/0x39e
    kernel: [   33.288044]  sock_sendmsg+0x2d/0x3d
    kernel: [   33.289464]  ___sys_sendmsg+0x1be/0x25c
    kernel: [   33.291092]  ? mem_cgroup_event_ratelimit+0x39/0x9c
    kernel: [   33.293084]  ? debug_smp_processor_id+0x17/0x19
    kernel: [   33.294995]  ? __lru_cache_add+0x86/0x9d
    kernel: [   33.296605]  ? _raw_spin_unlock+0x15/0x29
    kernel: [   33.298430]  __sys_sendmsg+0x4d/0x8a
    kernel: [   33.299946]  SyS_sendmsg+0xd/0x17
    kernel: [   33.301537]  do_syscall_64+0x68/0x95
    kernel: [   33.303204]  entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    kernel: [   33.305512] RIP: 0033:0x705469db5a97
    kernel: [   33.307183] RSP: 002b:00007ffe8e8ebee8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    kernel: [   33.310612] RAX: ffffffffffffffda RBX: 00007ffe8e8f3fd0 RCX: 0000705469db5a97
    kernel: [   33.313785] RDX: 0000000000000000 RSI: 00007ffe8e8ebf08 RDI: 0000000000000003
    kernel: [   33.317044] RBP: 0000000000000000 R08: 0000000000008000 R09: 0000000000000000
    kernel: [   33.320267] R10: 0000705469d5aef0 R11: 0000000000000246 R12: 00007ffe8e8ebf60
    kernel: [   33.323501] R13: 00005629f6d760d8 R14: 0000000000000001 R15: 0000000000000000
    kernel: [   33.326757] Code: 00 01 00 72 08 0f b7 d6 89 f8 ee eb 0f 48 89 f7 48 c7 c6 b9 b1 ec a7 e8 c6 fe ff ff 5d c3 55 48 89 e5 48 81 fe 00 00 04 00 72 05 <66> 89 3e eb 21 48 81 fe 01 00 01 00 72 09 0f b7 d6 89 f8 66 ef 
    ^Cemulator: WARNING: Not saving state: RAM not mapped as shared
    emulator: Done with QEMU main loop
    emulator: User configuration saved to /android-home/Pixel2.avd/emulator-user.ini
    emulator: VERBOSE: AdbConnection.cpp:490: Adb transition disconnected -> disconnected
    2020/07/20 14:21:09 socat[93] W read(5, 0x55fd04770100, 8192): Connection reset by peer
    
    Only errors filtered (click to expand)
    logcat: 07-20 14:20:37.795  1787  1787 E fsverity_init: Failed to load /product/etc/security/fsverity/*.der
    logcat: 07-20 14:20:37.800  1788  1788 E /system/bin/mini-keyctl: Cannot find keyring id
    logcat: 07-20 14:20:37.805  1789  1789 E fsverity_init: Failed to restrict .fs-verity keyring
    logcat: 07-20 14:20:37.888  1790  1790 E apexd   : Failed to walk /product/apex : Can't open /product/apex for reading : No such file or directory
    logcat: 07-20 14:20:37.902  1790  1790 E apexd   : Failed to activate packages from /product/apex : Failed to scan /product/apex : Can't open /product/apex for reading : No such file or directory
    logcat: 07-20 14:20:38.292  1832  1832 E GoldfishGatekeeper: called goldfish_gatekeeper_open with gate keeper 0x7b805a409050 device 0x7b805a3b0000
    logcat: 07-20 14:20:38.531  1888  1888 E cutils  : Failed to read /data/.layout_version: No such file or directory
    logcat: 07-20 14:20:39.086  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::IDevicesFactory/default.
    logcat: 07-20 14:20:39.153  1824  1824 E EmulatedCamera_Factory: 2 cameras are being emulated. 2 of them are fake cameras.
    logcat: 07-20 14:20:39.153  1824  1824 E EmulatedCamera_HotplugThread: createFileIfNotExists: Could not create file '/data/misc/media/emulator.camera.hotplug.0', error: 'Permission denied' (13)
    logcat: 07-20 14:20:39.153  1824  1824 E EmulatedCamera_HotplugThread: createFileIfNotExists: Could not create file '/data/misc/media/emulator.camera.hotplug.1', error: 'Permission denied' (13)
    logcat: 07-20 14:20:39.153  1824  1824 E [email protected]: setUpVendorTags: Vendor tag operations not fully defined. Ignoring definitions.
    logcat: 07-20 14:20:39.153  1824  1824 E [email protected]: initialize: Vendor tag setup failed, will not be available.
    logcat: 07-20 14:20:39.154  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::IEffectsFactory/default.
    logcat: 07-20 14:20:39.178  1907  1907 E vndksupport: Could not load libstagefrighthw.so from default namespace: dlopen failed: library "libstagefrighthw.so" not found.
    logcat: 07-20 14:20:39.221  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::ISoundTriggerHw/default.
    logcat: 07-20 14:20:39.221  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::ISoundTriggerHw/default.
    logcat: 07-20 14:20:39.267  1822  1822 E SoundTriggerHalImpl: couldn't load sound trigger module sound_trigger.primary (No such file or directory)
    logcat: 07-20 14:20:39.267  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::IBluetoothAudioProvidersFactory/default.
    logcat: 07-20 14:20:39.267  1822  1822 E audiohalservice: Could not get passthrough implementation for [email protected]::IBluetoothAudioOffload/default.
    logcat: 07-20 14:20:39.432  1880  1880 E CameraProviderManager: DeviceInfo3: Converted ICameraDevice instance to nullptr
    logcat: 07-20 14:20:39.433  1880  1880 E CameraProviderManager: DeviceInfo3: Converted ICameraDevice instance to nullptr
    logcat: 07-20 14:20:39.452  1880  1880 E CameraHardwareInterface: initialize: openSession failed! No such file or directory (-2)
    logcat: 07-20 14:20:39.452  1880  1880 E CameraFlashlight: connectCameraDevice: initializing camera 1 failed
    logcat: 07-20 14:20:39.452  1880  1880 E CameraFlashlight: findFlashUnits: failed to check if camera 1 has a flash unit. No such file or directory (-2)
    logcat: 07-20 14:20:39.452  1880  1880 E CameraHardwareInterface: initialize: openSession failed! No such file or directory (-2)
    logcat: 07-20 14:20:39.452  1880  1880 E CameraFlashlight: connectCameraDevice: initializing camera 0 failed
    logcat: 07-20 14:20:39.453  1880  1880 E CameraFlashlight: findFlashUnits: failed to check if camera 0 has a flash unit. No such file or directory (-2)
    logcat: 07-20 14:20:39.877  1849  1849 E APM::Serializer: deserialize: Could not parse /odm/etc/audio_policy_configuration.xml document.
    logcat: 07-20 14:20:39.887  1849  1849 E APM::AudioPolicyEngine/Config: parse: Could not parse document /vendor/etc/audio_policy_engine_configuration.xml
    logcat: 07-20 14:20:39.887  1849  1849 E APM::AudioPolicyEngine/Config: parseLegacyVolumeFile: Could not parse document /odm/etc/audio_policy_configuration.xml
    logcat: 07-20 14:20:39.931  1892  1892 E MediaExtractorFactory: couldn't opendir(/system/lib64/extractors)
    logcat: 07-20 14:20:40.053  1852  1953 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
    logcat: 07-20 14:20:40.172  1984  2007 E BootAnimation: Could not add watch for /data/system
    logcat: 07-20 14:20:43.780  1905  1926 E storaged: getService package_native failed
    logcat: 07-20 14:20:43.900  1814  1814 E IptablesRestoreController: Timed out waiting for response from iptables process 1929
    logcat: 07-20 14:20:48.793  1905  1926 E storaged: getService package_native failed
    
    $ cat /etc/centos-release
    CentOS Linux release 7.8.2003 (Core)
    

    Thank you!

    /cc @pokowaka

    opened by dmarjanovic 8
  • Getting a black screen when using webrtc video

    Getting a black screen when using webrtc video

    First of all thanks for open sourcing this. Great work.

    I was able to set up the project and run it. But accessing video is not working, screenshotting works but as you mentioned it kills the performance. I am getting a black screen instead of video. No error/exception in browser console log or server log. Not sure what's going on. I am running on a GCE instance with public access.

    Screen Shot 2019-10-29 at 1 55 44 AM
    opened by prohilla 8
  • ReferenceError: $ is not defined

    ReferenceError: $ is not defined

    I'm guessing something with npm isn't compiling correctly? Any idea how to debug?

    ReferenceError: $ is not defined (anonymous function) node_modules/android-emulator-webrtc/emulator/index.js:131 128 | /* 2 / 129 | /**/ (function(module, exports, webpack_require) { 130 |

    131 | $; 132 | /* eslint-disable */ 133 | 134 | $; // source: emulator_controller.proto

    opened by joetoth 7
  • Bump express from 4.17.1 to 4.18.2 in /js

    Bump express from 4.17.1 to 4.18.2 in /js

    Bumps express from 4.17.1 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump qs from 6.5.2 to 6.5.3 in /js

    Bump qs from 6.5.2 to 6.5.3 in /js

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2 in /js

    Bump decode-uri-component from 0.2.0 to 0.2.2 in /js

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • error docker-emu

    error docker-emu

    logs when run docker-emu -h or other only docker-emu

    Traceback (most recent call last):
      File "/home/zidna/android-emulator-container-scripts/venv/bin/emu-docker", line 33, in <module>
        sys.exit(load_entry_point('emu-docker', 'console_scripts', 'emu-docker')())
      File "/home/zidna/android-emulator-container-scripts/venv/bin/emu-docker", line 25, in importlib_load_entry_point
        return next(matches).load()
      File "/home/zidna/android-emulator-container-scripts/venv/lib/python3.6/site-packages/importlib_metadata/__init__.py", line 194, in load
        module = import_module(match.group('module'))
      File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 678, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/home/zidna/android-emulator-container-scripts/emu/emu_docker.py", line 28, in <module>
        import emu.emu_downloads_menu as emu_downloads_menu
      File "/home/zidna/android-emulator-container-scripts/emu/emu_downloads_menu.py", line 25, in <module>
        import requests
      File "/home/zidna/android-emulator-container-scripts/venv/lib/python3.6/site-packages/requests-2.28.1-py3.6.egg/requests/__init__.py", line 43, in <module>
        import urllib3
      File "/home/zidna/android-emulator-container-scripts/venv/lib/python3.6/site-packages/urllib3-2.0.0a2-py3.6.egg/urllib3/__init__.py", line 5
        from __future__ import annotations
        ^
    SyntaxError: future feature annotations is not defined
    

    python version: Python 3.6.9 ubuntu 18lts

    opened by zhinea 0
  • How to change hardware profile?

    How to change hardware profile?

    I want to use to use this project with a tablet emulator, but I can't figure out how to change the hardware profile that is in use.

    In src/avd/Pixel2.avd/config.ini, I see:

    hw.device.hash2=MD5:bc5032b2a871da511332401af3ac6bb0

    I'm assuming that that md5 hash is what's specifying the particular hardware profile to use, but I haven't been able to determine what that is a hash of.

    opened by Quantamm 0
  • How to use emulator console (telnet)

    How to use emulator console (telnet)

    ADB connection is available but telnet connection is not available.

    In order to use Emulator console https://developer.android.com/studio/run/emulator-console, It seems like I need to use telnet connection to the emulator.

    Is there something I should do in order to use emulator console?

    opened by jihunim 0
Owner
Google
Google ❤️ Open Source
Google
Built and Tested with emulator

Built and Tested with emulator "Nexus 5". Libraries Used: Volley : For webservices GSON : For saving and retrieving data in shared preferences Picasso

null 0 Nov 2, 2021
SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreters directly on the Android device.

#Scripting Layer for Android (SL4A) SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreter

Damon Kohler 2.3k Dec 23, 2022
Starter-Android-Library - Starter Android Library is an Android Project with Modular Architecture.

Starter-Android-Library - Starter Android Library is an Android Project with Modular Architecture.

OpenBytes 1 Feb 18, 2022
****. Use the native and support library variants instead - https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html. An android library that makes it easy to add custom fonts to edittexts and textviews

Add to your project Add this line to your dependencies in build.gradle compile 'in.workarounds.typography:typography:0.0.8' Using the views There are

Workarounds 43 Nov 6, 2021
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 30.5k Dec 27, 2022
RxJava binding APIs for Android's UI widgets.

RxBinding RxJava binding APIs for Android UI widgets from the platform and support libraries. Download Platform bindings: implementation 'com.jakewhar

Jake Wharton 9.7k Jan 6, 2023
A gradle plugin for getting java lambda support in java 6, 7 and android

Gradle Retrolambda Plugin This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or

Evan Tatarka 5.3k Jan 5, 2023
A comprehensive tutorial for Android Data Binding

精通 Android Data Binding 更多干货可移步至个人主页 QQ 交流群:324112728 ,或者点击链接加入QQ群 官方虽然已经给出了教程 - Data Binding Guide (中文版 - Data Binding(数据绑定)用户指南) ,但是实践之后发现槽点实在太多,于是就

Fei Liang 2.6k Dec 6, 2022
A Job Queue specifically written for Android to easily schedule jobs (tasks) that run in the background, improving UX and application stability.

Development in this repository is stopped. Future development continues on https://github.com/yigit/android-priority-jobqueue ========================

Path Mobile Inc Pte. Ltd. 2.4k Dec 9, 2022
An android library for displaying fps from the choreographer and percentage of time with two or more frames dropped

DEPRECATED TinyDancer is deprecated. No more development will be taking place. Check out the Google Android developer documentation for UI performance

Friendly Robot 1.9k Jan 3, 2023
Memory safer implementation of android.os.Handler

Android Weak Handler Memory safer implementation of android.os.Handler Problem Original implementation of Handler always keeps hard reference to handl

Badoo Tech 1.5k Jan 5, 2023
Android Library to help you with your runtime Permissions.

PermissionHelper Android Library to help you with your runtime Permissions. Demo Android M Watch it in action. Pre M Watch it in action. Nexus 6 (M) N

Kosh Sergani 1.2k Dec 14, 2022
Android validation library which helps developer boil down the tedious work to three easy steps.

AwesomeValidation Introduction Implement validation for Android within only 3 steps. Developers should focus on their awesome code, and let the librar

Jing Li 1.1k Dec 17, 2022
📄The reliable, generic, fast and flexible logging framework for Android

logback-android v2.0.0 Overview logback-android brings the power of logback to Android. This library provides a highly configurable logging framework

Tony Trinh 1.1k Jan 8, 2023
Android framework for node.js applications

Introduction Anode is an embryonic framework for running node.js applications on Android. There are two main parts to this: a port of node.js to the A

Paddy Byers 586 Dec 9, 2022
It makes a preview from an url, grabbing all the information such as title, relevant texts and images. This a version for Android of my web link preview https://github.com/LeonardoCardoso/Link-Preview

LeoCardz Link Preview for Android It makes a preview from an url, grabbing all the information such as title, relevant texts and images. Visual Exampl

Leonardo Cardoso 420 Nov 19, 2022
AndroidPermissions 4.2 0.0 Java Android M was added to check Permission. but Permission check processing is so dirty.

Android Permissions Checker Android M was added to check Permission. but Permission check processing is so dirty. This Project is to be simple, Checki

Steve SeongUg Jung 340 Nov 11, 2022
A plug and play ;) android library for displaying a "rate this app" dialog

Easy Rating Dialog This lib provides a simple way to display an alert dialog for rating app. Default conditions to show: User opened the app more than

Fernando Martínez 111 Dec 30, 2022
Tool for Android app development

RateMeMaybe Asks the user if (s)he wants to open the Play Store to rate your application when certain requirements are met (see below). This can and s

Nicolai Spohrer 98 Dec 30, 2022