1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Eigenes Script für Talk funktioniert nicht

Dieses Thema im Forum "Samsung Galaxy S2 (I9100) Forum" wurde erstellt von Dr.MacHack, 27.11.2011.

  1. Dr.MacHack, 27.11.2011 #1
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Moin Leute.
    Ich hab mich mal hingesetzt und angefangen ein Script für Talk zu schreiben.
    Dieses Script dient dazu die Talk.apk, die GoogleServicesFramework.apk auszutauschen und die libtalk_jni.so zu kopieren.
    Denn ich möchte gerne auf meinem S2 Talk mit Videounterstützung und da ich meine Firmware oft flashe, wollte ich mir die kopiererei mit einem kleinem Script erleichtern.


    Mein Script sieht folgendermaßen aus (Im Ordner /sdcard/gtalk/ sind die modifizierten Talk Daten drin):
    Code:
    #!/system/bin/sh
    
    su
    
    ###############################################################
    # Originale Talk.apk in /system/app/ umbenennen in Talk.apk1  #
    ###############################################################
    
    mv /system/app/Talk.apk /system/app/Talk.apk1
    
    #####################################################################################################
    # Originale GoogleServicesFramework.apk in /system/app/ umbenennen in GoogleServicesFramework.apk1  #
    #####################################################################################################
    
    mv /system/app/GoogleServicesFramework.apk /system/app/GoogleServicesFramework.apk1
    
    ###################################################################################
    # Modifizierte Talk2.apk von /sdcard/Talk2.apk in /system/app/Talk2.apk kopieren  #
    ###################################################################################
    
    mv /sdcard/gtalk/Talk2.apk /system/app/Talk2.apk
    
    ######################################################################################
    # Modifizierte GoogleServicesFramework2.apk von /sdcard/GoogleServicesFramework2.apk #
    # in /system/app/GoogleServicesFramework2.apk kopieren                                 #
    ######################################################################################
    
    mv /sdcard/gtalk/GoogleServicesFramework2.apk /system/app/GoogleServicesFramework2.apk
    
    ###############################################################
    # libtalk_jni.so von /sdcard/gtalk/ in /system/lib/ kopieren  #
    ###############################################################
    
    mv /sdcard/gtalk/libtalk_jni.so /system/lib/libtalk_jni.so
    
    #############################################
    # Berechtigungen für libtalk_jni.so ändern  #
    #############################################
    
    chmod rw-r--r-- /system/lib/libtalk_jni.so 
    
    ###########
    # Reboot  #
    ###########
    
    reboot
    
    #####################################################################################
    
    So...dann öffne ich den Terminal Emulator und gebe ein:
    Code:
    # su
    # sh /sdcard/gtalk/gtalk.sh
    # 
    Doch es tut sich nix :mad2:
    Was hab ich falsch gemacht? Oder hab ich ieine wichtige Zeile vergessen, die da rein muss?
    Wenn das dann funktioniert, dann packe ich alles und stelle es hier zur Verfügung, damit ihr euch die "Arbeit" auch ersparen könnt :D
     
  2. mizch, 27.11.2011 #2
    mizch

    mizch Android-Guru

    Beiträge:
    2,310
    Erhaltene Danke:
    371
    Registriert seit:
    05.11.2010
    su in einem Script geht nicht. Das tauscht die laufende Shell gegen eine neue aus, und die weiß dann nichts mehr von der Umgebung der alten, also auch nicht vom Script. Du musst das Script also von einer Root-Shell aus starten. Alternativ geht es auch, wenn das Script sich selbst über su startet, etwa so:

    Code:
    if [ $(busybox id -u) -ne 0 ]; then
        echo "Acquiring root permission"
        exec su -c "busybox ash pfad_deines_scriptes"
        exit
    fi
    
    
    Das setzt voraus, dass bekannt ist, wo das Script untergebracht ist.
     
    Zuletzt bearbeitet: 27.11.2011
  3. Dr.MacHack, 27.11.2011 #3
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Achso, das bedeutet einfach das su weglassen und vor dem Start des Scripts einfach als einzelnen befehl im Terminal eingeben?

    Aber wo genau soll ich
    Code:
    if [ $(busybox id -u) -ne 0 ]; then     echo "Acquiring root permission"     exec su -c "busybox ash pfad_deines_scriptes"     exit fi
    eingeben? Einfach ganz oben anstatt des su reinklatschen?

    Und noch ne Frage: Irgendwas scheint mit dem chmod nicht zu stimmen...wenn ich mein Script so ausführe wie es gepostet hab, dann passiert ja nix. Wenn ich dann aber exit eingebe um das Terminal zu schließen, dann meckert der wegen chmod rum, vonwegen invalid iwas. Und dann startet der sofort neu (wegen dem reboot am Ende)
    Oder hat das nur was mit dem su zutun?
     
  4. Dr.MacHack, 27.11.2011 #4
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Hier noch ne überarbeitete, aber noch nicht getestet Version:
    Code:
    #!/system/bin/sh
    
    
    ###############################################################
    # Originale Talk.apk in /system/app/ umbenennen in Talk.apk1  #
    ###############################################################
    
    mv /system/app/Talk.apk /system/app/Talk.apk1
    
    #####################################################################################################
    # Originale GoogleServicesFramework.apk in /system/app/ umbenennen in GoogleServicesFramework.apk1  #
    #####################################################################################################
    
    mv /system/app/GoogleServicesFramework.apk /system/app/GoogleServicesFramework.apk1
    
    ###################################################################################
    # Modifizierte Talk2.apk von /sdcard/Talk2.apk in /system/app/Talk2.apk kopieren  #
    ###################################################################################
    
    cp /sdcard/gtalk/Talk2.apk /system/app/Talk2.apk
    
    ######################################################################################
    # Modifizierte GoogleServicesFramework2.apk von /sdcard/GoogleServicesFramework2.apk #
    # in /system/app/GoogleServicesFramework2.apk kopieren                                 #
    ######################################################################################
    
    cp /sdcard/gtalk/GoogleServicesFramework2.apk /system/app/GoogleServicesFramework2.apk
    
    ###############################################################
    # libtalk_jni.so von /sdcard/gtalk/ in /system/lib/ kopieren  #
    ###############################################################
    
    cp /sdcard/gtalk/libtalk_jni.so /system/lib/libtalk_jni.so
    
    #############################################
    # Berechtigungen für libtalk_jni.so ändern  #
    #############################################
    
    chmod -rw-r--r-- /system/lib/libtalk_jni.so 
    
    ###########
    # Reboot  #
    ###########
    
    reboot
    
    #####################################################################################
    
     
    Zuletzt bearbeitet: 27.11.2011
  5. mizch, 27.11.2011 #5
    mizch

    mizch Android-Guru

    Beiträge:
    2,310
    Erhaltene Danke:
    371
    Registriert seit:
    05.11.2010
    Das wäre das Einfachste, ja.

    Das kannst Du stattdessen machen. Stelle aber sicher, dass Du verstanden hast, was der Codeschnipsel macht.

    Ja. Das Script wird erst ausgeführt, nachdem Du die Shell verlassen hast, die der su aufgemacht hat.

    Die Syntax des chmod ist falsch. Permissions werden so nicht angegeben. Nimm chmod 0644.
     
  6. Tel, 27.11.2011 #6
    Tel

    Tel Fortgeschrittenes Mitglied

    Beiträge:
    384
    Erhaltene Danke:
    118
    Registriert seit:
    07.10.2011
    Ausgetauscht ist das ja noch nicht, wenn du da die 2 am Ende noch drinlässt:


    BTW: Wir haben auch ein Developer-Forum, wo du bei solchen Dingen wahrscheinlich noch mehr Beachtung finden dürftest:
    Android Developer auf Android-Hilfe.de
     
  7. Dr.MacHack, 27.11.2011 #7
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Hmm...leider hab ich das mit BusyBox noch nicht ganz verstanden. ich guck mir das noch weiter an, aber wenn du willst, kannst du es mir erklären :)
    Alles klar, ich probier das gleich mal mit chmod 0644.
     
  8. Dr.MacHack, 27.11.2011 #8
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Das funktioniert aber so :D Hab das noch nicht ausprobier die 2 wegzulassen, aber auch mit der 2 funktioniert die ganze geschichte.

    Sehr gut, danke für den Tipp :thumbsup:
     
  9. Dr.MacHack, 27.11.2011 #9
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Hab nun folgendes Script:
    Code:
    #!/system/bin/sh
    
    
    #############################
    # Root Rechte über Busybox  #
    #############################
    
    if [ $(busybox id -u) -ne 0 ]; then
        echo "Acquiring root permission"
        exec su -c "busybox ash /sdcard/gtalk/"
        exit
    fi
    
    ###############################################################
    # Originale Talk.apk in /system/app/ umbenennen in Talk.apk1  #
    ###############################################################
    
    mv /system/app/Talk.apk /system/app/Talk.apk1
    
    #####################################################################################################
    # Originale GoogleServicesFramework.apk in /system/app/ umbenennen in GoogleServicesFramework.apk1  #
    #####################################################################################################
    
    mv /system/app/GoogleServicesFramework.apk /system/app/GoogleServicesFramework.apk1
    
    ##################################################################################
    # Modifizierte Talk2.apk von /sdcard/Talk2.apk in /system/app/Talk2.apk kopieren  #
    ##################################################################################
    
    cp /sdcard/gtalk/Talk2.apk /system/app/Talk2.apk
    
    ######################################################################################
    # Modifizierte GoogleServicesFramework.apk von /sdcard/GoogleServicesFramework.apk   #
    # in /system/app/GoogleServicesFramework.apk kopieren                                 #
    ######################################################################################
    
    cp /sdcard/gtalk/GoogleServicesFramework2.apk /system/app/GoogleServicesFramework2.apk
    
    ###############################################################
    # libtalk_jni.so von /sdcard/gtalk/ in /system/lib/ kopieren  #
    ###############################################################
    
    cp /sdcard/gtalk/libtalk_jni.so /system/lib/libtalk_jni.so
    
    #############################################
    # Berechtigungen für libtalk_jni.so ändern  #
    #############################################
    
    chmod 0644 /system/lib/libtalk_jni.so 
    
    ###########
    # Reboot  #
    ###########
    
    reboot
    
    ##########################################################################################
    
    aber hier tut sich erst recht nix :(

    Bei der Eingabe im Terminal:
    Code:
    #
    # sh /sdcard/gtalk/gtalk.sh
    # Acquiring root permission
    #
    Und das wars. Nix hat sich verändert. SuperSuer hat mich auch um Root Rechte gefragt, die ich meinem Script auch gegeben hab, aber keine Dateien verändert, kein reboot, nix :(
    wahrscheinlich hab ich noch ieinen kleinen Fehler drin.

    Seid bitte nicht böse mit mir, bin im Scripten noch nicht so die Granate.
    Ich übe aber ab und zu mit meinem Ubuntu :D
     
  10. mizch, 27.11.2011 #10
    mizch

    mizch Android-Guru

    Beiträge:
    2,310
    Erhaltene Danke:
    371
    Registriert seit:
    05.11.2010
    Da fehlt der Name des Scripts (als letzter Teil des Pfades des Scripts). Ein Verzeichnis als Befehl zu geben, ist wenig sinnvoll.

    Und setze an der Anfang Deines Scripts (aber nach der #!-Zeile) ein „set -x” ein, dann siehst Du, was es tut.
     
  11. Dr.MacHack, 27.11.2011 #11
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Nun hab ich dieses Script:
    Code:
    #!/system/bin/sh
    set -x
    
    
    #############################
    # Root Rechte über Busybox  #
    #############################
    
    if [ $(busybox id -u) -ne 0 ]; then
        echo "Acquiring root permission"
        exec su -c "busybox ash /sdcard/gtalk/gtalk.sh"
        exit
    fi
    
    ###############################################################
    # Originale Talk.apk in /system/app/ umbenennen in Talk.apk1  #
    ###############################################################
    
    mv /system/app/Talk.apk /system/app/Talk.apk1
    
    #####################################################################################################
    # Originale GoogleServicesFramework.apk in /system/app/ umbenennen in GoogleServicesFramework.apk1  #
    #####################################################################################################
    
    mv /system/app/GoogleServicesFramework.apk /system/app/GoogleServicesFramework.apk1
    
    ##################################################################################
    # Modifizierte Talk2.apk von /sdcard/Talk2.apk in /system/app/Talk2.apk kopieren  #
    ##################################################################################
    
    cp /sdcard/gtalk/Talk2.apk /system/app/Talk2.apk
    
    ######################################################################################
    # Modifizierte GoogleServicesFramework.apk von /sdcard/GoogleServicesFramework.apk   #
    # in /system/app/GoogleServicesFramework.apk kopieren                                 #
    ######################################################################################
    
    cp /sdcard/gtalk/GoogleServicesFramework2.apk /system/app/GoogleServicesFramework2.apk
    
    ###############################################################
    # libtalk_jni.so von /sdcard/gtalk/ in /system/lib/ kopieren  #
    ###############################################################
    
    cp /sdcard/gtalk/libtalk_jni.so /system/lib/libtalk_jni.so
    
    #############################################
    # Berechtigungen für libtalk_jni.so ändern  #
    #############################################
    
    chmod 0644 /system/lib/libtalk_jni.so 
    
    ###########
    # Reboot  #
    ###########
    
    reboot
    
    ##########################################################################################
    
    und es funzt leider immer noch nicht. ich bekomme jetzt keine Fehlermeldung mehr und es rauschen auch blitzschnell Zeilen das Terminal runter, aber so schnell, dass ich nix erkennen kann und es tut sich überhauptnix :cursing: Der rebootet zwar, aber alle Dateien bleiben so wie sie waren.
     
  12. mizch, 27.11.2011 #12
    mizch

    mizch Android-Guru

    Beiträge:
    2,310
    Erhaltene Danke:
    371
    Registriert seit:
    05.11.2010
    Nimm den Reboot halt raus (ein „#” davor setzen), damit Du die Fehlermeldungen siehst. Außerdem starte das Skript zum Debuggen am besten aus einer Root-Shell, damit es den su-Wrapper nicht aufruft.
     
  13. Dr.MacHack, 27.11.2011 #13
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Ok, ich probier das mal aus und poste morgen ob ich damit Erfolg hatte :D
     
  14. Dr.MacHack, 28.11.2011 #14
    Dr.MacHack

    Dr.MacHack Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    2
    Registriert seit:
    25.08.2011
    Jep, hab den Fehler gefunden...der konnte nicht auf /system/ schreiben, also hab ich einfach noch ne Zeile eingefügt, dass /system als rw remounted wird und jetzt läufts tadellos :D
    Hab direkt auch ein Restore-Script geschrieben, mit dem man die Änderungen auch wieder rückgängig machen kann.

    Hab das Angebot hier: Google Talk 1.3 Update zur Verfügung gestellt.

    Danke für eure Hilfe!! :thumbsup:
     

Diese Seite empfehlen