Prolog
Auf den ersten Blick scheint es eine sehr einfache Aufgabe zu sein. Einige Leser könnten sogar in diesen bärtigen Zeiten auf alle Arten von 4pd klettern, ihren Touchscreen Samsung rooten, den Inhalt der Datei build.prop ändern und naiven Lamern ihr iPhone 15+ Max Pro zeigen. Wie sich herausstellte und wie so oft, ist jedoch nicht alles so einfach und es gibt hier Fallstricke. Der Artikel soll gewöhnlichen Arbeitern helfen, alle Unebenheiten und Löcher auf dem Weg zu ihrem Ziel zu vermeiden!
Haftungsausschluss
Ich werde Sie sofort warnen, dass ich solche Artikel gerne ausführlich schreibe, nicht aus Gründen des Volumens und der Mehrfachbuchstaben, sondern um ein maximales Eintauchen in das Problem und die Art und Weise seiner Lösung zu erreichen. Bitte beachten Sie, dass ich unter macOS arbeite , sodass alle Befehle im Terminal für dieses Betriebssystem ausgerichtet sind. Es sollte auch beachtet werden, dass ich all dies für API 30 verwende , dh für das Neueste zum Zeitpunkt dieses Schreibens. Wie das Internet sagt, begannen die Schwierigkeiten zu diesem Thema mit API 29 .
Warum wird das benötigt?
Ich gehe davon aus, dass Sie, lieber Leser, einen guten Grund dafür haben, sonst hätten Sie dies nicht getan. Es ist sehr wahrscheinlich, dass Sie wie ich eine programmatische Überprüfung für das Gerätemodell haben, von dem aus die Anwendung gestartet wird, wie hier . Auf diese Weise ist es übrigens möglich, das Ergebnis unserer Arbeit zu überprüfen. Die zweite und einfachere Möglichkeit, das Emulatormodell zu überprüfen, sind die Geräteeinstellungen im Abschnitt Geräteinformationen:
. .apk - . . , , , . . , .
build.prop
, build.prop, system/. , , :
adb root : adb root
. , : adbd cannot run as root in production builds
. - Google :
- Google , adb root
. : restarting adbd as root
. Google , adb root
.
, build.prop:
build.prop
build.prop . :
. .apk . , PIXEL 3A XL ( , ):
. adb push (, adb pull GUI).
: adb push build.prop system/
:
adb: error: failed to copy 'build.prop' to 'system/build.prop': remote couldn't create file: Read-only file system
! , . , . .
( ):
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
Pixel3XLAPI30 - , emulator -list-avds
-writable-system - .
-no-snapshot -nocache - , -.
( , ) :
PANIC: Missing emulator engine program for 'x86' CPU.
.bash-profile ( zsh .zshenv) macOS, . :
export ANDROIDHOME=~/Library/Android/sdk
ANDROIDHOME PATH:
export PATH=$ANDROIDHOME/emulator:$ANDROIDHOME/tools:$PATH
( source ~/.bash_profile
) ( source ~/.zshenv
). echo $PATH
PATH .
.
emulator -avd Pixel3XLAPI30 -writable-system -no-snapshot -nocache
.
-writable-system:
-writable-system make system & vendor image writable after 'adb remount'
adb remount
. adb root
, adb remount
.
adb remount
, . adb reboot. . . adb reboot
. , . . . adb remount
.
:
adb root
adb shell avbctl disable-verification
shell
exit
adb reboot
adb root
adb remount
! . build.prop : adb push build.prop system/
. adb reboot
… ...
build.prop
, ro.product.product.name ro.product.product.model , . , build.prop, : system, system_ext, vendor product. , . product. - !
- . …
, ( ). adb root
, adb unroot
. , , - .
, . RootBeer .
step-by-step. , !