What is Shashlik?

What is Shashlik

The goal of Shashlik is to provide a way to run Android applications on a standard Linux desktop as easily and simply as possible.

Under the hood

The easiest way to run an Android app correctly is to simply run Android. It’s a linux base that we can nest inside our session. OpenGL and graphics are all rendered on the host ensuring fast performance.

Shashlik provides an incredibly stripped down Android base which boots directly into the loaded app, but with a running activity manager and daemons so that intents still work correctly.



First download and install “repo”. A tool that makes it easier to work with multiple git repositories at once.

$ mkdir ~/bin
$ PATH=~/bin:$PATH

Download the repo tool and make it executable

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

##Getting the code

Create a new directory, and start a repo sync with our manifest

mkdir shashlik
cd shashlik
repo init -u https://github.com/shashlik/shashlik-manifest
repo sync

Note: The code base is huge. As in, really huge.

Learn more about repo at https://source.android.com/source/using-repo.html


Source a script containing env vars and setup, and hit make

source build/envsetup.sh


Installation is currently a manual process as the state changes rapidly.
It’s fairly obvious from the debian files which files are needed where.

Shashlik Components


This contains an XML file of all repos to fetch to build an android image.
It contains a seriously stripped down Lollipop base plus Shashlik modifications and additional modules.


This runs in Android space and is responsible for a few things

* Drawing a custom bootsplash. We override the stock one with a version that shows the icon of the app to be launched

* Drawing the back buttons (normally done by Android’s SystemUI, but we don’t want all the overhead of that)

* Notification recieving and passing to the host (WIP)


This is the desktop side of integration layer. It provides small scripts to install APKs, extracting the icon and such into a desktop menu and copying the relevant files.

It also provides the startup script which launched the emulator installing the APK,

Qemu fork

As the name suggests this contains a fork of the android emulator from the SDK.
It is modified to show the window icon and title of the app we’re running, not look like an emulator.

The other repos

These come from a former approach which tried to target running Android at a lower level. They should be ignored.

Overall plans

Near Future

* Drop manual aapt parsing. Approach depends a bit on whether I stick with the prototype python, or switch it to a small Qt app.

* Drop adb. Shashlikd can communicate out to our host over HTTP. Client fetching from host is better than host pushing to client as we avoid startup races.

* Fix network.

* Release as user builds rather than userdebug. Self explanatory. Saves some Mbs.

* Predex?

* Continue cutting down on the manifest to be constantly smaller.

* Simple window resizing. Keep aspect ratio, just adjust the window scale.

* More integration with notification and things. We can

* Handle device rotation. Apps signal whether they are drawing horizontally to the WM. It’s “just” a case of forwarding that.

* Files… qemu has virtfs, android also has Fuse. Lots of options. We can also go with; Fake SD card, a fileProvider intent, or something else…dunno.

* Tidy up packaging. Maybe split manifests for Client and Host sides? Then packagers can build one easily, and I can fetch host isos easily.

Longer Future

We only need the VM because we need a kernel with binder.

If we can rewrite libbinder in userspace (it’s just a socket…how hard can it be?) then we can move the Shashlik world into simly being a container.

Graphics and devices can still work the same way proxying openGL through a socket between client and env base.


Removing a module

The main thing we’re doing in Shashlik at the moment is stripping Android down.

There are 3 ways to remove a module:

  • Remove it from the manifest. If possible do this, as it saves downloading and parsing the makefile
  • add LOCAL_MODULE_OVERRIDES into a different module. shashlikd does this to replace systemui for example
  • Remove it from the PRODUCT_PACKAGES list in the shashlik product in build.

Ideally we want our delta with Android to be as small as possible with regards to packages and frameworks.

Some modules are subjective; For example the Camera app seems like a useless thing to include.
However some apps (Dulux paint app for example) will use a camera intent to get a photo; that requires the app running.

Merging changes

Open a pull request, standard github procedure.

  • RaviChandarana

    Is there any chance we could see some screenshots? This seems like an excellent project!

    • leinir

      Screenshots will be forthcoming! For now, have a gander at the presentation video from Akademy over on the News page :) Thank you very much for the kind words!

  • http://ryeingoddard.com Goddard

    Awesome project…keep up the good work.

  • Neon Samurai

    Really looking forward to this. Will there be a port for the ubuntu phone, to run apps from the google play store on it?

  • cheekyngeeky

    This could be a game changer.

  • pepeliso

    great work!

  • https://www.youtube.com/user/TeleGamerymas/videos luis alejandro cv

    interesante pero se ve algo complicado esperare que se una algun repo mas popular

    • Jose Barakat

      Me suena bastante a la forma de funcionar de Wine. Interesante. Deberían hacer un PPA en Launchpad para facilitar la instalación de los paquetes.

  • arnaudober

    Will be the performances the same between Android device and app on Ubuntu Touch? (I hope at least, usable…)

  • Alex Elsayed

    Any chance of these instructions getting corrected to actually work? Up to the envsetup.sh step it seems to go just fine, but there’s just a cascade of errors if you try to actually build:

    – There’s no bootstrap.sh, so soong complains
    – If you copy the one from soong (to the toplevel), it yells about build/soong not being there
    – If you clone that into place, it demands build/blueprint
    – If you satisfy that, it yells about not having go prebuilts
    – If you grab those, it fails due to needing ninja prebuilts
    – If you do that, it complains about missing Android.bp
    – If you copy that from build/soong to the toplevel, it starts building…

    …and then explodes:

    FAILED: out/soong/.bootstrap/bin/minibp -t -m ./build/soong/build.ninja.in -b out/soong -d out/soong/.bootstrap/bootstrap.ninja.in.d -o out/soong/.bootstrap/bootstrap.ninja.in Android.bp
    error: Android.bp:170:1: “soong-java” depends on undefined module “blueprint”
    error: Android.bp:170:1: “soong-java” depends on undefined module “blueprint-pathtools”
    [41/43] minibp out/soong/.bootstrap/primary.ninja.in
    FAILED: out/soong/.bootstrap/bin/minibp –build-primary -t -m ./build/soong/build.ninja.in –timestamp out/soong/.bootstrap/primary.ninja.in.timestamp –timestampdep out/soong/.bootstrap/primary.ninja.in.timestamp.d -b out/soong -d out/soong/.bootstrap/primary.ninja.in.d -o out/soong/.bootstrap/primary.ninja.in Android.bp
    error: Android.bp:13:1: “soong_build” depends on undefined module “blueprint”
    error: Android.bp:13:1: “soong_build” depends on undefined module “blueprint-bootstrap”
    ninja: error: rebuilding ‘out/soong/build.ninja': subcommand failed
    build/core/soong.mk:80: recipe for target ‘run_soong’ failed
    make: *** [run_soong] Error 1

    At this point, I gave up.

    • Michael DeGuzis

      Same issue here. Luckily the .deb package resolves the dependencies fine here. There are only a few to worry about, some 32 bit packages. If interested, just run ‘ar -x package.deb’ on the Debian package. Untar the control.tar.gz file to check it out. Maybe at some point I’ll try this again an a Digitial Ocean droplet, but the download size is massive (obviously). It’s a shame that he doesn’t provide the debian file / archive anywhere. I don’t expect the dev to upload that massive orig.tar.gz, but at least the debian tarball would be nice to see how it’s built.

      • Alex Elsayed

        The problem isn’t with (system) dependencies – it’s that the Android buildsystem has changed significantly since whatever version these docs were written against, they’ve updated the repositories at least partially to deal with it, and they’ve completely failed to update the docs.

        So regardless of whether the .deb package resolves the dependencies, the actual _code_ does not build.

        In addition, I don’t think the debs were necessarily even built against the source that’s on github – I’m not finding any tags that even roughly correspond to the debs.

  • Michael DeGuzis

    Which one of the repositories contains the 9.3 version tag (the latest I saw in the static deb repo)? If I start building this natively on Debian/SteamOS for my SteamOS-Tools project, I want to be able to watch the repo, or source the latest version tag / release. Is this possible?

  • flutterbrony

    Awesome !
    Hope you still working on it ^^
    Did the sensors working with it ? (I only test on my desktop computer, but I’ll try on my Asus T100 ^^ If I can use it well, I’ll remove the dual boot with Android and Manjaro on it and only use Manjaro with sashlik on it ! ^^)

  • name1234

    You really force users of your website to use smooth scroll? What the hell is wrong with you?

  • geek42

    the android repo is too huge

  • Bodor Csaba

    so the repo is 26.6 Gigabytes. And the compilation fails instantly with the message “make: *** No rule to make target ‘prebuilts/build-tools/linux-x86/bin/ckati’, needed by ‘out/build-aosp_arm.ninja’. Stop.”

    In this stage, you should start this page with something like “this is our repo, but it does not compile, don’t waste your time and bandwidth”.

    It would be nice to see a fedora rpm release.

    • alysdexia

      It wouldn’t be nescient; you’d be.

      • Bodor Csaba

        wow you answer after 7 months to a constructive comment, and the answer is not even making sense :)

  • Bryan vine

    Trying to compile on Raspberry Pi 3 now…. probably won’t work.

  • MJ Skowronek

    So is this project still alive? I don’t see any progress or formal announcements since it’s initial launch. I’m very interested in seeing this project continue, because I use Linux as my primary desktop OS and it would be great if I could simply run Android Apps on my Linux tablet rather than having to dual boot to Android or run an emulator. For the record, I haven’t gotten Shashlik to work, nor have I had any success with ARChon on Chrome. I have had success with booting AndroidX86 and running GenyMotion through VirtualBox. With regard to Shashlik, it installs, it installs apps (FlappyBird was installed), but fails to load the application upon launch (though it does show the back, home, and tasks buttons. I’m running Xubuntu Xenial (16.04LTS). Thanks! (crossing fingers that the developers are still working on this)

    • alysdexia

      its, dolt

    • https://eliasojala.me Elias Ojala

      Genymotion is available for Linux.

  • Rogi Blatus

    The very start of the page might mention 26.5GB d/l! Important stuff.

    Hey, great idea for a project. I’m sure I can’t conceive of how involved this is / was, and hope that it is still going. I was not prepared for the large download, and the comments about not being able to start apps, below, are not encouraging. The step-by-step guide to installation seemed spot on though

    I do hope this project continues and succeeds, best of luck, I hope to look back soon. I’ve come up with lots of ideas about how useful this sort of native app environment could become.


    • http://kokizzu.com Kiswono Prayogo

      thank you for mentioning the size *__*)

  • Ole Johansen

    WE WANT MORE!!! :-)

  • RDzeko

    I’ve installed shashlik on my puppy linux, i’ve done a lot of change to it sources and even change the python script directly, but still no progress, the apk installed but unfortunately it can’t run, when i clicked the app nothing happened, i’ve done the same in bash typed the command and i’ve fail, did someone done the same, and if there’s it would be nice if you give me some sources, modules, libs, or anything to make this happen thanks

  • HeidiHoNeighbor

    Has this actually worked on anyone’s Linux box, ever?

  • Mohamed Bellalouna

    Anyone succeeded in installing on openssue leap 42.2 ?

  • Jamie Norvell

    I F@CK’n hate ubuntu !!!
    everything about this system is completely retarded totally inefficient & will NOT SUFFICE !!!
    please tell me how to rid myself of this hideous program ?

    Honestly I cannot stand another moment of such useless software its TORTURE !
    Seriously though a slab of slate & a piece of chalk is way better SOS PLEASE HELP !!!

    • Galambos Máté

      sudo dd if=/dev/zero of=/dev/sda bs=16M

      • jheliskh

        Maximum Trolling

        • Galambos Máté

          Well, this command does get rid of his Ubuntu installation, as he asked. And, if he’s got a piece of chalk, he’s all set.

    • infoquest media

      i like how linux founders want linux to be used, but they dont want to see any
      paid proprietairy software on it ?
      does that make any sense

  • Spariant4

    Do text-input apps function under shashlik, like the various android onscreen keyboards? Can inputs and gestures be recieved by the host system?

  • munchausen

    I’m interested in how this works under the hood. In particular, for the situation where the host and guest architectures are the same, could you use QEMU KVM and Virgil for 3D? Would this make things simpler?

  • Rasta Eyes

    Hi, I have a problem, shashlik don’t open any apk, the bottom buttons typicals of android see it, but the apk don’t charge, plz SOS thx

  • Ben Hur Nascimento

    You guys should create a shellscript for instalation…

  • David Gunter

    repo init [blah-blah-blah-whatever] –depth=1

    All downloads using repo tend to be huge. Trim the fat with that last part, you don’t need the whole git history.

  • Antonio Gomez

    How do I uninstall Shashlik completely form my PC?

  • Орлин Костов

    i tried 6-7 times and every time:
    error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
    error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
    error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
    fatal: The remote end hung up unexpectedly
    fatal: неочакван край на файл
    fatal: index-pack failed
    fatal: The remote end hung up unexpectedly
    fatal: неочакван край на файл
    fatal: The remote end hung up unexpectedly
    fatal: неочакван край на файл
    error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
    fatal: The remote end hung up unexpectedly
    fatal: index-pack failed
    fatal: index-pack failed
    fatal: неочакван край на файл
    fatal: index-pack failed
    error: Cannot fetch platform/packages/inputmethods/LatinIME
    Fetching project platform/frameworks/compile/libbcc
    error: Cannot fetch platform/system/extras
    error: Cannot fetch platform/prebuilts/sdk
    error: Cannot fetch platform/cts

  • lucas menezes

    i have this problem too

  • Some Dude

    Works until I get to this command.

    source build/envsetup.sh
    bash: build/envsetup.sh: No such file or directory

    make fails as well.

  • El Kabong

    Can we do a “next, accept, next, next… finish” ???

    • Gwen

      Man i hope it was that easy

  • youngidealist

    Probably a newb question but there is nothing I can find online for this. Where/How can I drop a file (like a database for an app to import settings and playlists) into the sdcard folder that’s in the android’s directory. I’m using shashlik on my Ubuntu 18.10 and it works ok as I installed FDroid and via FDroid, I installed NewPipe. Now I just want to push my NewPipe playlists from my phone onto the NewPipe app that’s now on my laptop. What is the path to the shashlik sdcard directory?

  • Paulo Roberto

    Is it works just like AVD emulator of Android Studio? I need something which replace the AVD emulator on Android Studio because It’s slow, frozen and it has erros. Is it looks like Genymotion?

  • Lorenzo Jimenez

    Can I install it in Windows 10 Linux subsystem?