Readit News logoReadit News
lfy_google commented on ARM Mac: Why I'm Worried About Virtualization   bmalehorn.com/arm-mac/... · Posted by u/bmalehorn
my123 · 6 years ago
Hello,

OpenGL is deprecated but still supported on Apple Silicon, even for arm64 apps.

lfy_google · 6 years ago
Nice, that's good news.
lfy_google commented on ARM Mac: Why I'm Worried About Virtualization   bmalehorn.com/arm-mac/... · Posted by u/bmalehorn
outworlder · 6 years ago
On the flip side, I guess ARM Macs will now allow the use of hypervisors for Android simulators, instead of a full hardware virtualization.

... thus making Android development better on Macs?

lfy_google · 6 years ago
Android Emulator developer here. In addition to what the other comments said about android emulation with hypervisors existing already for x86, we're also looking into the Hypervisor.framework API for Apple silicon.

It won't be a trivial task (hoping for pre-existing code to port over maybe?) but we have the other pieces like using Hypervisor.framework for x86 already, and being able to cross compile the other code for arm64, so that would be the only major task left.

On the subj. of better GPU support, it depends on what it's actually like using the drivers, but from previous experience with the GPUs and drivers shipped with macOS, there shouldn't be any special kind of trouble at least. We may have to use Metal if Apple also gets rid of opengl support on those new machines, but there are also existing translators for gles and vk to metal. The graphics hw itself, is actually the least of our worries due to how consistent the hardware is likely to be---we'd have to deal with a much fewer set of hw/driver quirks versus other host OS platforms.

lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
kaixi · 6 years ago
Sorry, I'm not an expert. What am I supposed to do with the emulator-symbols.zip?
lfy_google · 6 years ago
Replace your current emulator install; delete $ANDROID_SDK_ROOT/emulator then unzip it there so theres $ANDROID_SDK_ROOT/emulator again.

$ANDROID_SDK_ROOT, if not set, should be set to the SDK location in Android Studio > Preferences > Android SDK (SDK path will show up there).

Set it in your ~/.bash_profile too so it's there next time for running the emulator from the command line.

The AVD config.ini can be found in ~/.android/avd/nameofAvd.avd/config.ini .

lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
kaixi · 6 years ago
I need to add

hw.audioInput=no hw.audioOutput=no

to every AVD I create. Otherwise, the Android Emulator uses 100% CPU all the time, even when it's been idle for minutes.

I'm far from the only one having the problem, see https://stackoverflow.com/questions/37063267/high-cpu-usage-...

I'm on a Macbook Air 2014, Intel i5, 8GB of RAM, 500GB SSD. Hardware acceleration, etc. all enabled.

lfy_google · 6 years ago
And here's the promised emulator build (from aemubins gmail account that we use to distribute debug binaries like this):

    https://drive.google.com/open?id=1sXEQcoiNpe3Lj8yeaKLasTjqlGQwy4Oi
If you still don't get symbols from that it should be possible to build the emulator itself on macos:

install repo from depot_tools https://www.chromium.org/developers/how-tos/install-depot-to...

    pip install absl-py
    pip install urlfetch
    mkdir emu
    cd emu
    repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev --depth=1
    repo sync -qcj 4
    cd external/qemu
    python android/build/python/cmake.py

    # run
    objs/emulator -avd avdName -no-snapshot
Debugging:

    # when it spins:

    # method 1: go to activity monitor -> sample process, send over the result

    # method 2: lldb
    lldb
    process attach --pid <pid-of-qemu-system-<arch>>
    bt all #send it over

    # method 3: guest process taking CPU
    adb shell top

lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
benibela · 6 years ago
> userspace ARM translation

What does that mean? The x86 system image can run arm code? I will try that (might get confusing if there is an arm and x86 lib in the apk).

I have been using the image without google apis to save space, because my sdd is almost full

Does it reject invalid arm? I wrote my app in Pascal, and the FreePascal compiler often generates invalid assembly. Especially because I need to use the nightly build, because the last stable release does not support aarch64

lfy_google · 6 years ago
Yes, the x86 system image can run ARM code. Note that the speed will be much faster than running a full ARM emulated system image because only the guest userspace bits need to be translated from ARM to x86. System calls are still marshalled to x86 calls, so memory accesses are many many times faster because (there's no need to drop into emulating the MMU).

(Also AFAIK illegal instructions are still validated and trapped as SIGILL or SIGSEGV)

lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
kaixi · 6 years ago
I need to add

hw.audioInput=no hw.audioOutput=no

to every AVD I create. Otherwise, the Android Emulator uses 100% CPU all the time, even when it's been idle for minutes.

I'm far from the only one having the problem, see https://stackoverflow.com/questions/37063267/high-cpu-usage-...

I'm on a Macbook Air 2014, Intel i5, 8GB of RAM, 500GB SSD. Hardware acceleration, etc. all enabled.

lfy_google · 6 years ago
Interesting, sounds like a live loop in some audio thread somewhere. What's your audio setup and AVD config.ini? I might be able to reproduce on my Mac.
lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
CameronNemo · 6 years ago
Have you considered https://anbox.io ?
lfy_google · 6 years ago
Thanks, I've read about this before but just went over it again in more detail yesterday with a fresh look.

So this is basically the simulator situation, but with easier management of which libraries the guest userspace can dlopen and files to read()/write().

It's much like current Android-on-ChromeOS capabilities where containers are used to isolate where the "guest" userspace libraries are stored, so that it's not necessary to interop well with things like the host version of libc for example.

However, the problems come when considering the interface to the host kernel and hardware. Here are just two of the showstoppers:

1. Android expects to run on a particular range of kernel versions and configs each release. Fidelity is sacrificed to run with a wide range of Linux host kernel configurations. It's also easy for components on the host system such as SELinux to interfere with guest operation (and Android itself expects to use its own version of SELinux...so which one wins in the end?).

2. Further customization in the guest userspace needs to be made to account for needing to interop with a regular Linux system; e.g., input/network/display will be much more code that touches various parts of guest userspace and potentially hurts fidelity versus the VM abstraction where they are fake hardware and no customization of guest userspace is needed.

There are also isolation issues that involve more delicate dances, such as how to prevent runaway resource usage in the container from hogging the whole system (VMs merely waste the #vcpus + RAM dedicated to them; while that can be a lot compared to the host, it's explicitly controllable).

These problems sound less serious on the surface versus porting the Android framework directly to the host OS, but in the end it's basically the same level of essential complexity; containers just let you remove the incidental complexity of guest userspace libraries leaking into your /usr/lib and interop w/ your filesyste.

And once we try to run on non-Linux systems we're back at square one needing to port all userspace code to the host OS (Unless you're running Docker on macOS/Windows in which case you'd be creating a VM again, sacrificing all the benefits of containers versus VMs while keeping the complex customizations).

This is probably why Microsoft is pushing WSL2, ChromeOS skipped Android 10 support and is looking into ARCVM, and anbox is still running Android 7.1.1 (w/ plans to update but skipping releases in the meantime).

lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
airstrike · 6 years ago
If we're all throwing spaghetti at the wall here, what do I know, but maybe create an android-sdk OS that one may boot into and is heavily optimized for (speedy) android development?
lfy_google · 6 years ago
Yep, that basically sums up what we're looking into---a system image that still keeps up with the latest API levels and features introduced in the latest Android OS, but has minimal impact on resources.
lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
dingdongding · 6 years ago
Have you thought about streaming emulators from the cloud? I know it sounds crazy but if we can stream games, why not android emulator?
lfy_google · 6 years ago
Thanks for the interest! We've been exploring this in limited ways; for example, https://github.com/google/android-emulator-container-scripts contains a set of Python/Docker/JS scripts for setting up WebRTC streaming of emulators remotely. More to come soon.
lfy_google commented on Android Studio 4.0   android-developers.google... · Posted by u/raybb
rraghur · 6 years ago
is there hw virtualization on amd processors yet?
lfy_google · 6 years ago
Yes, you can use the new AMD Hypervisor or use Hyper-V/WHPX, depending on your needs:

https://developer.android.com/studio/run/emulator-accelerati...

(Edit: On Linux, KVM for AMD should work already; this advice is for Windows hosts only)

u/lfy_google

KarmaCake day97July 9, 2018View Original