87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
"""
|
||
同步 rebuilt_app 到 Ubuntu,执行 scripts/ubuntu_gps_pipeline.sh(编译 + 可选 adb 安装/拉原版 APK)。
|
||
环境变量: FL_SSH_PASS;或 fl_ssh_pass.txt(单行)
|
||
"""
|
||
import os
|
||
import subprocess
|
||
import sys
|
||
|
||
import paramiko
|
||
|
||
from _gps_ssh_auth import ssh_password
|
||
|
||
HOST = "192.168.2.179"
|
||
USER = "eric"
|
||
GPS_ROOT = os.path.dirname(os.path.abspath(__file__))
|
||
REBUILT = os.path.join(GPS_ROOT, "rebuilt_app")
|
||
TGZ = os.path.join(GPS_ROOT, "rebuilt_sync.tgz")
|
||
REMOTE_TGZ = "/home/eric/rebuilt_sync.tgz"
|
||
REMOTE_PROJ = "/home/eric/codex_apk_recovery/rebuilt_app"
|
||
|
||
_JADX_EXPORT = ""
|
||
if os.environ.get("FL_GPS_JADX", "").strip().lower() in ("1", "true", "yes", "on"):
|
||
_JADX_EXPORT = "export GPS_JADX_REFERENCE=1\n"
|
||
|
||
REMOTE = f"""set -e
|
||
{_JADX_EXPORT}cd /tmp
|
||
rm -rf rebuilt_app
|
||
tar xzf {REMOTE_TGZ}
|
||
rm -rf {REMOTE_PROJ}
|
||
mv rebuilt_app {REMOTE_PROJ}
|
||
chmod +x {REMOTE_PROJ}/gradlew
|
||
chmod +x {REMOTE_PROJ}/scripts/ubuntu_gps_pipeline.sh
|
||
chmod +x {REMOTE_PROJ}/scripts/adb_device_autosetup.sh
|
||
bash {REMOTE_PROJ}/scripts/ubuntu_gps_pipeline.sh
|
||
"""
|
||
|
||
|
||
def main():
|
||
if hasattr(sys.stdout, "reconfigure"):
|
||
try:
|
||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||
except Exception:
|
||
pass
|
||
password = ssh_password(GPS_ROOT)
|
||
if not password:
|
||
print("Set FL_SSH_PASS or create fl_ssh_pass.txt in", GPS_ROOT, file=sys.stderr)
|
||
sys.exit(2)
|
||
if not os.path.isdir(REBUILT):
|
||
print("Missing rebuilt_app", file=sys.stderr)
|
||
sys.exit(2)
|
||
subprocess.run(
|
||
[
|
||
"tar",
|
||
"-czf",
|
||
TGZ,
|
||
"--exclude=rebuilt_app/.gradle",
|
||
"--exclude=rebuilt_app/app/build",
|
||
"--exclude=rebuilt_app/build",
|
||
"--exclude=rebuilt_app/fl_xposed/build",
|
||
"rebuilt_app",
|
||
],
|
||
cwd=GPS_ROOT,
|
||
check=True,
|
||
)
|
||
t = paramiko.Transport((HOST, 22))
|
||
t.connect(username=USER, password=password)
|
||
sftp = paramiko.SFTPClient.from_transport(t)
|
||
sftp.put(TGZ, REMOTE_TGZ)
|
||
sftp.close()
|
||
client = paramiko.SSHClient()
|
||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||
client.connect(HOST, username=USER, password=password, timeout=45)
|
||
stdin, stdout, stderr = client.exec_command(REMOTE, get_pty=True, timeout=900)
|
||
for line in stdout:
|
||
sys.stdout.write(line)
|
||
err = stderr.read().decode()
|
||
if err:
|
||
sys.stderr.write(err)
|
||
code = stdout.channel.recv_exit_status()
|
||
client.close()
|
||
t.close()
|
||
sys.exit(code)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|