Eigenes Script für Talk funktioniert nicht

D

Dr.MacHack

Neues Mitglied
4
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
 
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:
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?
 
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:
Dr.MacHack schrieb:
Achso, das bedeutet einfach das su weglassen und vor dem Start des Scripts einfach als einzelnen befehl im Terminal eingeben?

Das wäre das Einfachste, ja.

Dr.MacHack schrieb:
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?

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

Dr.MacHack schrieb:
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?

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.
 
Dr.MacHack schrieb:
Dieses Script dient dazu die Talk.apk, die GoogleServicesFramework.apk auszutauschen und die libtalk_jni.so zu kopieren.
Ausgetauscht ist das ja noch nicht, wenn du da die 2 am Ende noch drinlässt:

Dr.MacHack schrieb:
cp /sdcard/gtalk/Talk2.apk /system/app/Talk2.apk
cp /sdcard/gtalk/GoogleServicesFramework2.apk /system/app/GoogleServicesFramework2.apk


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
 
mizch schrieb:
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.

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.
 
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
 
exec su -c "busybox ash /sdcard/gtalk/"

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.
 
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.
 
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.
 
mizch schrieb:
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.

Ok, ich probier das mal aus und poste morgen ob ich damit Erfolg hatte :D
 
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:
 

Ähnliche Themen

A
Antworten
21
Aufrufe
1.379
androidbastler9
A
Meerjungfraumann
Antworten
47
Aufrufe
4.468
vonharold
vonharold
Zurück
Oben Unten