Execute commands on waydroid shell with pipes

pull/70/head
Rikka 2 years ago committed by Rikka
parent 0feb86ceef
commit d72bf018d1
No known key found for this signature in database
GPG Key ID: CD36B07FA9F7D2AA

@ -2,7 +2,7 @@
import argparse import argparse
from logging import Logger from logging import Logger
from stuffs.android_id import Android_id from stuffs.android_id import AndroidId
from stuffs.gapps import Gapps from stuffs.gapps import Gapps
from stuffs.hidestatusbar import HideStatusBar from stuffs.hidestatusbar import HideStatusBar
from stuffs.houdini import Houdini from stuffs.houdini import Houdini
@ -76,7 +76,7 @@ def main():
google_id_parser=subparsers.add_parser('google', google_id_parser=subparsers.add_parser('google',
help='grab device id for unblocking Google Apps') help='grab device id for unblocking Google Apps')
google_id_parser.set_defaults(func=Android_id().get_id) google_id_parser.set_defaults(func=AndroidId().get_id)
# create the parser for the "a" command # create the parser for the "a" command
arg_template = { arg_template = {

@ -1,23 +1,21 @@
import os
import sys
from tools import container from tools import container
from tools.helper import run from tools.helper import shell
from tools.logger import Logger from tools.logger import Logger
class Android_id: class AndroidId:
def get_id(self): def get_id(self):
if container.is_running(): if container.is_running():
queryout = run([ try:
'waydroid','shell', queryout = shell(
'sqlite3', arg="sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \"select * from main where name = 'android_id';\"",
'/data/data/com.google.android.gsf/databases/gservices.db', env="ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n"
"select * from main where name = \"android_id\";" )
]) except:
return
else: else:
Logger.error("Cannot access gservices.db, make sure gapps is installed and waydroid was started at least once after installation and make sure waydroid is running !") Logger.error("WayDroid isn't running !")
return return
print(queryout.stdout.decode().replace("android_id|", "").strip()) print(queryout.replace("android_id|", "").strip())
print(" ^----- Open https://google.com/android/uncertified/?pli=1") print(" ^----- Open https://google.com/android/uncertified/?pli=1")
print(" Login with your google id then submit the form with id shown above") print(" Login with your google id then submit the form with id shown above")

@ -8,13 +8,19 @@ import requests
from tools.logger import Logger from tools.logger import Logger
from tqdm import tqdm from tqdm import tqdm
import hashlib import hashlib
from typing import Optional
def get_download_dir(): def get_download_dir():
download_loc = "" download_loc = ""
if os.environ.get("XDG_CACHE_HOME", None) is None: if os.environ.get("XDG_CACHE_HOME", None) is None:
download_loc = os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".cache", "waydroid-script", "downloads") download_loc = os.path.join('/', "home", os.environ.get(
"SUDO_USER", os.environ["USER"]), ".cache", "waydroid-script", "downloads"
)
else: else:
download_loc = os.path.join(os.environ["XDG_CACHE_HOME"], "waydroid-script", "downloads") download_loc = os.path.join(
os.environ["XDG_CACHE_HOME"], "waydroid-script", "downloads"
)
if not os.path.exists(download_loc): if not os.path.exists(download_loc):
os.makedirs(download_loc) os.makedirs(download_loc)
return download_loc return download_loc
@ -23,21 +29,65 @@ def get_download_dir():
def get_data_dir(): def get_data_dir():
return os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".local", "share", "waydroid", "data") return os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".local", "share", "waydroid", "data")
def run(args, env=None, ignore=""): # execute on host
result = subprocess.run(args=args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE) def run(args: list, env: Optional[str] = None, ignore: Optional[str] = None):
result = subprocess.run(
args=args,
env=env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# print(result.stdout.decode()) # print(result.stdout.decode())
if result.stderr: if result.stderr:
error = result.stderr.decode("utf-8") error = result.stderr.decode("utf-8")
if re.match(ignore, error): if ignore and re.match(ignore, error):
return result return result
Logger.error(error) Logger.error(error)
raise subprocess.CalledProcessError( raise subprocess.CalledProcessError(
returncode = result.returncode, returncode=result.returncode,
cmd = result.args, cmd=result.args,
stderr = result.stderr stderr=result.stderr
) )
return result return result
# execute on waydroid shell
def shell(arg: str, env: Optional[str] = None):
a = subprocess.Popen(
args=["sudo", "waydroid", "shell"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
subprocess.Popen(
args=["echo", "export BOOTCLASSPATH=/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/core-icu4j.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/framework-atb-backward-compatibility.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.wifi/javalib/framework-wifi.jar:/apex/com.android.tethering/javalib/framework-tethering.jar"],
stdout=a.stdin,
stdin=subprocess.PIPE
).communicate()
if env:
subprocess.Popen(
args=["echo", env],
stdout=a.stdin,
stdin=subprocess.PIPE
).communicate()
subprocess.Popen(
args=["echo", arg],
stdout=a.stdin,
stdin=subprocess.PIPE
).communicate()
a.stdin.close()
if a.stderr.read():
Logger.error(a.stderr.read().decode('utf-8'))
raise subprocess.CalledProcessError(
returncode=a.returncode,
cmd=a.args,
stderr=a.stderr
)
return a.stdout.read().decode("utf-8")
def download_file(url, f_name): def download_file(url, f_name):
md5 = "" md5 = ""
response = requests.get(url, stream=True) response = requests.get(url, stream=True)

Loading…
Cancel
Save