So pushen Sie Gapps über ADB auf ein gerootetes Gerät

Ich habe ein Samsung t355c. Ein China-Modell des normalen Tablets, das keine Gapps hat und, soweit ich es verstehe, einen gesperrten Bootloader hat. Es gibt keine benutzerdefinierte Wiederherstellung dafür. Läuft 5.0.1

Ich habe es geschafft, es mit Kingo zu rooten und habe viele Möglichkeiten ausprobiert, Google-Apps hineinzuschieben. Habe es vorerst gemauert ... Original-ROM erneut heruntergeladen.

Die Frage ist. Nachdem ich ihn repariert und erneut gerootet habe, verwende ich adb mit dem Root. Wie kann ich Gapps pushen?

Eine Methode kann sein: Extrahieren Sie die GApps-Zip-Datei und trennen Sie die Dateien, die in die Systempartition kopiert werden sollen. Kopieren Sie sie dann einzeln an die vorgesehene Stelle. Um den Speicherort zu erfahren, suchen Sie ein Skript mit Anweisungen zur Wiederherstellung. Sie würden auf die Idee kommen. Starten Sie neu und sehen Sie, was passiert.
Vergessen Sie nicht, die Berechtigungen anzupassen (auch in diesem Skript enthalten). Außerdem müssen Sie /systemden Lese-/Schreibzugriff erneut einhängen und nach dem Pushen der Apps den schreibgeschützten Modus wieder aktivieren.
Ich habe link2sd verwendet, um sie in das System umzuwandeln. Nach einigen Fehlern habe ich mich bei Google angemeldet, habe Google Mail, kann aber keine Verbindung zum Playstore herstellen. @Izzy. Welche Berechtigungen muss ich ändern?
Wie @Firelord bereits betonte, .zipenthält das ein Skript: META-INF/com/google/android/updater-scriptenthält die Schritte, die eine benutzerdefinierte Wiederherstellung normalerweise ausführen würde. Verwenden Sie das als Richtlinie – obwohl Sie die Befehle "konvertieren" müssen.

Antworten (2)

Ich habe das nicht wirklich versucht, aber ein möglicher Ansatz wäre, den Schritten zu folgen, die eine benutzerdefinierte Wiederherstellung beim Installieren ("Flashen") der .zipDatei ausführen würde - die in (nach dem Extrahieren des Archivs) zu finden ist META-INF/com/google/android/updater-script. Für das Kitkat GApps-Archiv sieht dies so aus:

ui_print("Dateien werden installiert...");
run_program("/sbin/busybox", "mount", "/system");
show_progress(1, 15);
delete("/system/app/Provision.apk","/system/app/QuickSearchBox.apk","/system/app/priv-app/SetupWizard.apk","/system/app/priv-app/Velvet .apk","/system/app/Vending.apk","/system/app
package_extract_dir("system", "/system");
set_perm(0, 0, 0755, "/system/addon.d/70-gapps.sh");
package_extract_dir("optional", "/tmp");
package_extract_file("install-optional.sh", "/tmp/install-optional.sh");
set_perm(0, 0, 0777, "/tmp/install-optional.sh");
run_program("/tmp/install-optional.sh", "");
show_progress(1, 15);
ui_print("Metadaten bereinigen und setzen...");
set_metadata_recursive("/system/addon.d", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r: system_file:s0");
set_metadata_recursive("/system/app", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file: s0");
set_metadata_recursive("/system/priv-app", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r: system_file:s0");
set_metadata_recursive("/system/etc/permissions", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r: system_file:s0");
set_metadata_recursive("/system/etc/preferred-apps", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u: Objekt_r:Systemdatei:s0");
set_metadata("/system/etc/g.prop", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0" );
set_metadata_recursive("/system/framework", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file: s0");
set_metadata_recursive("/system/lib", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file: s0");
set_metadata_recursive("/system/usr/srec/en-US", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", " u:object_r:system_file:s0");
set_metadata_recursive("/system/vendor/pittpatt", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r: system_file:s0");
run_program("/sbin/busybox", "umount", "/system");
ui_print("Installation abgeschlossen!");

Wir können natürlich die Kommentare/Debug-Ausgabe überspringen und landen damit im Wesentlichen bei diesen Schritten. Ich nehme an, Sie haben den Inhalt der Datei irgendwo auf Ihrem Gerät entpackt .zipund sitzen zunächst in einer Shell (Terminal oder adb shell) mit Root-Berechtigungen ( ):su

  1. mount -o remount,rw /system(Zeile 2)
  2. wenn die in Zeile 4 aufgelisteten Dateien existieren: rm -f <file>für jede von ihnen
  3. Kopieren Sie den gesamten Inhalt des .zipDateiverzeichnisses system/nach /system(Zeile 5)
  4. chmod 0755 /system/addon.d/70-gapps.sh(Zeile 6)
  5. (Wenden Sie die vorherigen 2 Schritte in den Zeilen 7-9 an.)
  6. sh /tmp/install-optional.sh(Zeile 10)

Jetzt wird es etwas schwieriger (für Anfänger) die set_metadata_recursiveBefehle zu interpretieren. Ich erkläre das in der ersten (Zeile 13):

/system/addon.dmuss im Besitz von uid 0 und gid 0 sein, Dateiberechtigungen sollten 0755 sein (dmode ist Verzeichnismodus, fmode Dateimodus), SELinux-Attribute sind u:object_r:system_file:s0. Sie haben vielleicht bemerkt, dass ich zwei Spalten übersprungen habe: Ich habe keine Ahnung, wofür das "capabilities", 0x0steht, also kann ich es nicht erklären (falls es jemand weiß, kommentieren Sie es bitte). Also machen wir das:

chown -R root:root /system/addon.d   # -R is recursive, root is user/group id 0
chmod -R 755 /system/addon.d         # as dmode and fmode are the same, we can do that
# at this place missing: SELinux properties. I've never dealt with those

Wenn wie in Zeile 14 fmode und dmode unterschiedlich sind, müssen Sie sich auch darum kümmern. Wenden Sie dmode wie oben an und folgen Sie ihm durch ein find <dir> -type f -print0 | xargs chmod <mode>, ersetzen Sie es <dir>durch das erste Argument von set_metadata_recursive, und <mode>durch den entsprechenden fmode.

/systemAbschließend wieder read-only mounten : mount -o remount,ro /system– oder einfach rebooten (muss sowieso), was auch dafür sorgt.

Ich habe das SELinux-Zeug wegen fehlender Kenntnisse übersprungen. Es wird höchstwahrscheinlich ohne funktionieren – könnte aber für zusätzliche Sicherheit gut sein :)

Einige GApps werden gapps-remove.txtauch mit einer Datei geliefert. Man kann es mit den Dateien vergleichen, die man in /system hat oder kopieren will. Das kann ihnen helfen zu wissen, was ihnen möglicherweise fehlt.

SElinux-Labels setzen Sie mit dem Befehl „chcon“ und Sie können das Ergebnis mit „ls -laZ“ überprüfen.

Für: set_metadata_recursive("/system/addon.d", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u: Objekt_r:Systemdatei:s0");

es wird sein: chcon "u:object_r:system_file:s0" /system/addon.d

Sie können dies überprüfen, indem Sie Folgendes ausgeben: ls -laZ /system/addon.d

Quelle für die Verwendung von "chcon": https://books.google.pl/books?id=AKbNBgAAQBAJ&pg=PA101&lpg=PA101&dq=%22u:object_r:system_file:s0%22&source=bl&ots=MbpesnKLkI&sig=ACfU3U2sJc-vYndDkUOk1Tru42hrcuPyUQ&hl=pl&sa=pl&sa=pl&xved =2ahUKEwjqwqKiwZDnAhWiAxAIHZH8AGAQ6AEwAXoECAkQAQ#v=onepage&q=%22u%3Aobject_r%3Asystem_file%3As0%22&f=false