AutoIT und ABD.exe for Android

  • Hallo an alle die schon erfahrener mit AutoIT sind als ich.

    Es geht um die Automatisierung von ADB, also die Verbindung von PC zum Androidhandy.

    Ich würde gern einige Aufgaben nicht mehr per Batchdatei lösen sondern lieber über eine GUI. DasGrundprinzip der Programmierung ist mir bekannt, und könnte auch mit VB umgesetzt werden, es soll aber mit AutoIT geschehen.

    Mir fehlen hier leider die Denkanstöße bei AutoIT, also wie ich die adb.exe starte ist klar. Nur dann kommt eben das Problem, ich müsste mehrfach auf den Process der ABD zugreifen können.

    Also auf der Commandline funktioniert das so:

    adb.exe push /data/local/tmp c:\adb\data\meineDatei.txt <- kopier eine Datei auf das Handy

    adb.exe pull /data/local/temp/meineDatei.txt c:\adb\data <- kopiert eine Datei auf den PC vom Handy

    adb.exe shell <- öffnett eine Shell für weitere Befehle oder gibt eine Fehlermeldung wenn kein Gerät verbunden oder USB-Debug off

    Jetzt geht es also darum, das ich nicht weiss wie ich das jetzt genau machen soll. Mit Run wohl kaum also eher mit ShellExecute, oder vielleicht doch anders?

    Ich würde mir am liebsten eine Funktion schreiben, die nur noch das jeweilige Shellkommando annimmt, dieses eben ausführt und einen Request zurück gibt.

    Dazu müsste aber sichergestellt werden, das erst die adb.exe (ggf. alten Prozess killen)läuft und solange gewartet wird bis ein Gerät auch connectet ist.

    in Batch geht das so

    Code
    @adb kill-server
    @adb start-server
    @adb wait-for-device

    wenn es connectet ist kann man die Shell Befehle ausführen so

    Code
    @adb shell su -c "id"  > %temp%\datei.txt

    Und da fehlt mir der Ansatz, also wie setze ich die Commandos ab, wie fange ich den wenn vorhandenen Request ab, und wie lege ich das dann in Varaiblen.

    Vielleicht hat einer mal was mit der ADB gemacht und kann mir einen Anstoss liefern, ich verlange keine fertigen Funktionen, das ist nicht nötig nur der Wink in die richtige Richtung, gern auch mit Codeschnipseln.


    Danke Euch für Eure Hilfe

  • Dafür brauchst du eigentlich "nur" folgende Befehle:

    [autoit]

    Run
    ProcessExists
    StdinWrite
    StdoutRead

    [/autoit]

    (Wobei du die letzten Befehle nur für die Shell brauchst, oder eben um die Rückgabe von ADB auszulesen.)

    Dieses Thema könnte dir auch helfen.

  • Kann man das nicht einfach so machen?

    Spoiler anzeigen
    [autoit]

    ; adb.exe muss im scriptordner liegen! (nur vor dem kompilieren)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite( _adbExecute("start-server") & @LF)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite( _adbExecute("wait-for-device") & @LF)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite( _adbExecute("shell su -c " id" > %temp%\datei.txt") & @LF)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite( _adbExecute("...") & @LF)

    [/autoit] [autoit][/autoit] [autoit]

    Func _adbExecute($sCommand)
    Local $sADB = @TempDir & "\adb.exe", $iPid, $sOutput = ""
    If Not FileExists($sADB) Then FileInstall("adb.exe", $sADB)
    $iPid = Run($sADB & " " & $sCommand, @ScriptDir, @SW_HIDE, 2 + 4)
    Do
    Sleep(20)
    $sOutput &= StdoutRead($iPid, False, False)
    Until @error
    Return $sOutput
    EndFunc ;==>_adbExecute

    [/autoit]

    LG
    Christoph :)

  • Danke für die recht guten Hinweise und Lösungsansätze, werde ich mir genauer ansehen.

    Naja das mit den beidem DLL hatte ich auch gedacht, nur leider habe ich weder bei "Google" noch bei Google selbst etwas zu den Dlls gefunden.