Execute commands on waydroid shell with pipes
This commit is contained in:
parent
0feb86ceef
commit
d72bf018d1
3 changed files with 71 additions and 23 deletions
4
main.py
4
main.py
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import argparse
|
||||
from logging import Logger
|
||||
from stuffs.android_id import Android_id
|
||||
from stuffs.android_id import AndroidId
|
||||
from stuffs.gapps import Gapps
|
||||
from stuffs.hidestatusbar import HideStatusBar
|
||||
from stuffs.houdini import Houdini
|
||||
|
|
@ -76,7 +76,7 @@ def main():
|
|||
|
||||
google_id_parser=subparsers.add_parser('google',
|
||||
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
|
||||
|
||||
arg_template = {
|
||||
|
|
|
|||
|
|
@ -1,23 +1,21 @@
|
|||
import os
|
||||
import sys
|
||||
from tools import container
|
||||
from tools.helper import run
|
||||
from tools.helper import shell
|
||||
from tools.logger import Logger
|
||||
|
||||
|
||||
class Android_id:
|
||||
class AndroidId:
|
||||
def get_id(self):
|
||||
|
||||
if container.is_running():
|
||||
queryout = run([
|
||||
'waydroid','shell',
|
||||
'sqlite3',
|
||||
'/data/data/com.google.android.gsf/databases/gservices.db',
|
||||
"select * from main where name = \"android_id\";"
|
||||
])
|
||||
try:
|
||||
queryout = shell(
|
||||
arg="sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \"select * from main where name = 'android_id';\"",
|
||||
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"
|
||||
)
|
||||
except:
|
||||
return
|
||||
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
|
||||
print(queryout.stdout.decode().replace("android_id|", "").strip())
|
||||
print(queryout.replace("android_id|", "").strip())
|
||||
print(" ^----- Open https://google.com/android/uncertified/?pli=1")
|
||||
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 tqdm import tqdm
|
||||
import hashlib
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def get_download_dir():
|
||||
download_loc = ""
|
||||
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:
|
||||
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):
|
||||
os.makedirs(download_loc)
|
||||
return download_loc
|
||||
|
|
@ -23,21 +29,65 @@ def get_download_dir():
|
|||
def get_data_dir():
|
||||
return os.path.join('/', "home", os.environ.get("SUDO_USER", os.environ["USER"]), ".local", "share", "waydroid", "data")
|
||||
|
||||
def run(args, env=None, ignore=""):
|
||||
result = subprocess.run(args=args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
# execute on host
|
||||
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())
|
||||
if result.stderr:
|
||||
error = result.stderr.decode("utf-8")
|
||||
if re.match(ignore, error):
|
||||
if ignore and re.match(ignore, error):
|
||||
return result
|
||||
Logger.error(error)
|
||||
raise subprocess.CalledProcessError(
|
||||
returncode = result.returncode,
|
||||
cmd = result.args,
|
||||
stderr = result.stderr
|
||||
returncode=result.returncode,
|
||||
cmd=result.args,
|
||||
stderr=result.stderr
|
||||
)
|
||||
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):
|
||||
md5 = ""
|
||||
response = requests.get(url, stream=True)
|
||||
|
|
|
|||
Loading…
Reference in a new issue