android-emulator-runner icon indicating copy to clipboard operation
android-emulator-runner copied to clipboard

Emulator Modification in /system/ for Debugging Purposes #

Open sdfgsdfgd opened this issue 2 years ago • 4 comments

We have a prod build that we would like to divert some connections to our backend server at yyy.com lets say, we want to divert requests from the backend to a ktor server on device (localhost), a diversion easily achievable via DNS server or something like that (maybe also requiring SSL termination, a custom CA cert, for which we'd need to create the cert inside /system/etc/security/cacerts/...

For this we would need a readable and modifiable /system/

This is very easily achievable on local emulator ! But it doesn't work with the Git Actions this repo provides. Is the problem with the avd manager ? I don't think so, it's achievable on local.

On Local:

  1. Start it with :

emulator -avd Pixel_3a_API_34_extension_level_7_arm64-v8a -writable-system

  1. Run

adb root && adb shell "remount" && adb shell "mount" | grep system

  1. Observe /system/ and /system/etc/security/cacerts are now visible and writable
adbd is already running as root
Successfully disabled verity
Remounted /system as RW
Remounted /vendor as RW
Remounted /product as RW
Remounted /system_dlkm as RW
Remounted /system_ext as RW
Remount succeeded
/dev/block/dm-1 on /system_dlkm type erofs (ro,seclabel,relatime,user_xattr,acl,cache_strategy=readaround)
/dev/block/dm-2 on /system_ext type ext4 (ro,seclabel,relatime)
overlay on /system type overlay (rw,seclabel,noatime,lowerdir=/system,upperdir=/mnt/scratch/overlay/system/upper,workdir=/mnt/scratch/overlay/system/work,userxattr,override_creds=off)
overlay on /system_dlkm type overlay (rw,seclabel,noatime,lowerdir=/system_dlkm,upperdir=/mnt/scratch/overlay/system_dlkm/upper,workdir=/mnt/scratch/overlay/system_dlkm/work,userxattr,override_creds=off)
overlay on /system_ext type overlay (rw,seclabel,noatime,lowerdir=/system_ext,upperdir=/mnt/scratch/overlay/system_ext/upper,workdir=/mnt/scratch/overlay/system_ext/work,userxattr,override_creds=off)

On Git Actions, android-emulator-runner:

name: ADB Commands Test

on: [push]

jobs:
  test:
    runs-on: macos-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'

      - name: Start emulator
        uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 30
          target: default
          arch: x86_64
          profile: Nexus 6
          emulator-options: "-writable-system"
          script: |
            adb root
            adb shell "remount"
            adb shell "mount" | grep system

      - name: Run ADB Commands
        run: |
          adb devices
          adb root
          adb shell "remount"
          adb shell "mount" | grep system

So the pipeline actually gets stuck in an infinite loop: https://github.com/kaanx022/pipeline_tests/actions/runs/7254111464/job/19762130870

Screenshot 2023-12-19 at 8 46 21 am

Remember the goal is just getting access to system/ .... redirecting prod version of our app's calls to domain.com with custom cert to our debugging server at that'll be running localhost (on device) by dns server installation on system, isn't it possible to replicate the emulator's behaviour on git action emulator ? why not ?

Originally posted by @sdfgsdfgd in https://github.com/ReactiveCircus/android-emulator-runner/discussions/359

sdfgsdfgd avatar Dec 18 '23 22:12 sdfgsdfgd

hope there's a solution for this usecase

The cat is out of the bag.

image

sdfgsdfgd avatar Dec 19 '23 06:12 sdfgsdfgd

no ? ok

sdfgsdfgd avatar Dec 20 '23 03:12 sdfgsdfgd

interesting that nobody knows the answer to this

kaanx022 avatar Dec 21 '23 03:12 kaanx022

Tried as well recently and still stuck in an infinite booting loop 😢

PS: even when specifying explicitly target: google_apis, which is normally the target emulator that supports mounting the system partition as root.

No one found a solution?

oliveeyay avatar May 27 '24 19:05 oliveeyay