123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880 |
- import time
- import traceback
- from flask import Flask, request
- import requests
- from PIL import ImageFile, Image
- import os
- import shutil
- import subprocess
- from zipfile import ZipFile
- ImageFile.SAFEBLOCK = 2048 * 2048
- app = Flask(__name__)
- app.base_project = "/apps/3ps/build_apk/PalioLiteDev"
- # app.base_project = "/Users/easysoft/Documents/PalioLite"
- app.temp_folder = "/apps/3ps/build_apk/BuildApkDev"
- # app.temp_folder = "/Users/easysoft/BuildApk"
- app.apk_folder = "/var/www/html/palio.io/dashboardv2/uploads"
- # app.apk_folder = "/Users/easysoft/"
- app.verbose = True
- app.ssl = (
- '/etc/ssl/star.newuniverse.io/star.newuniverse.io.crt', '/etc/ssl/star.newuniverse.io/STAR_newuniverse_io.key')
- # app.ssl =('/etc/ssl/STAR_palio_io/STAR_palio_io.crt', '/etc/ssl/STAR_palio_io/STAR_palio_io.pem')
- # app.ssl = None
- app.keytool = '/usr/bin/keytool'
- app.base_project_name = os.path.basename(app.base_project)
- def vprint(*data):
- if app.verbose:
- print(*data)
- def create_folder(package_id):
- path = os.path.join(app.temp_folder, package_id)
- if not os.path.exists(path):
- os.mkdir(path)
- else:
- shutil.rmtree(path)
- os.mkdir(path)
- vprint(path)
- path_dest = os.path.join(path, app.base_project_name)
- if not os.path.exists(path_dest):
- shutil.copytree(app.base_project, path_dest)
- code_path = "app/src/main/java/"
- orig_code = "com/example/qmeralitesamplecode"
- path_package_id = package_id.replace(".", "/")
- c_code_path = os.path.join(path_dest, code_path, path_package_id)
- orig_code_path = os.path.join(path_dest, code_path, orig_code)
- if not os.path.exists(c_code_path):
- shutil.copytree(orig_code_path, c_code_path)
- shutil.rmtree(orig_code_path)
- return path_dest, c_code_path
- def change_acc(c_code_path, acc, enable_sms):
- main_activity = os.path.join(c_code_path, "MAB.java")
- with open(main_activity, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("***REPLACE***WITH***YOUR***QMERA***ACCOUNT***", acc)
- if enable_sms == 1:
- replaced = replaced.replace("isEnabledSMS = false", "isEnabledSMS = true")
- with open(main_activity, "w") as f:
- f.write(replaced)
- def change_url(c_code_path, url):
- main_activity = os.path.join(c_code_path, "MAB.java")
- with open(main_activity, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("https://www.google.com", url)
- with open(main_activity, "w") as f:
- f.write(replaced)
- def change_name(path_dest, name, enable_sms):
- manifest = os.path.join(path_dest, "app/src/main/AndroidManifest.xml")
- string_res = os.path.join(path_dest, "app/src/main/res/values/strings.xml")
- with open(manifest, "r") as f:
- lines = f.readlines()
- # file_source = f.read()
- with open(manifest, "w") as f:
- for line in lines:
- if "NexilisLite" in line:
- line = line.replace("NexilisLite", name)
- if enable_sms == 0:
- if "SMS" not in line:
- f.write(line)
- else:
- f.write(line)
- with open(string_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis Sport", name)
- with open(string_res, "w") as f:
- f.write(replaced)
- def change_font(path_dest, font, package):
- if font == 1:
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- code_path = os.path.join(path_dest, code_path, path_package_id)
- res_path = "app/src/main/res/"
- res_path = os.path.join(path_dest, res_path)
- javas = [os.path.join(dp, f) for dp, dn, filenames in os.walk(code_path) for f in filenames]
- res = [os.path.join(dp, f) for dp, dn, filenames in os.walk(res_path) for f in filenames if "xml" in f]
- button_apps_code_path = os.path.join(path_dest, "palio-button-app/src/main/java")
- button_apps_res_path = os.path.join(path_dest, "palio-button-app/src/main/res-pba/")
- lib_javas = [os.path.join(dp, f) for dp, dn, filenames in os.walk(button_apps_code_path) for f in filenames]
- lib_res = [os.path.join(dp, f) for dp, dn, filenames in os.walk(button_apps_res_path) for f in filenames if
- "xml" in f]
- for j in javas:
- print(j)
- if "ForumFragment.java" in j:
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("pb_poppins", "roboto")
- with open(j, "w") as f:
- f.write(replaced)
- for j in res:
- print(j)
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("pb_poppins", "roboto")
- with open(j, "w") as f:
- f.write(replaced)
- for j in lib_javas:
- print(j)
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("pb_poppins", "roboto")
- with open(j, "w") as f:
- f.write(replaced)
- for j in lib_res:
- print(j)
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("pb_poppins", "roboto")
- with open(j, "w") as f:
- f.write(replaced)
- def change_package(path_dest, package, enable_location):
- build_gradle = os.path.join(path_dest, 'app/build.gradle')
- with open(build_gradle, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("com.example.qmeralitesamplecode", package)
- with open(build_gradle, "w") as f:
- f.write(replaced)
- proguard = os.path.join(path_dest, 'app/proguard-rules.pro')
- with open(proguard, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("com.example.qmeralitesamplecode", package)
- with open(proguard, "w") as f:
- f.write(replaced)
- manifest = os.path.join(path_dest, "app/src/main/AndroidManifest.xml")
- with open(manifest, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("com.example.qmeralitesamplecode", package)
- with open(manifest, "w") as f:
- f.write(replaced)
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- code_path = os.path.join(path_dest, code_path, path_package_id)
- res_path = "app/src/main/res/"
- res_path = os.path.join(path_dest, res_path)
- javas = [os.path.join(dp, f) for dp, dn, filenames in os.walk(code_path) for f in filenames]
- res = [os.path.join(dp, f) for dp, dn, filenames in os.walk(res_path) for f in filenames if "xml" in f]
- for j in javas:
- print(j)
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("com.example.qmeralitesamplecode", package)
- with open(j, "w") as f:
- f.write(replaced)
- for j in res:
- print(j)
- with open(j, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("com.example.qmeralitesamplecode", package)
- with open(j, "w") as f:
- f.write(replaced)
- queue_page = os.path.join(path_dest, code_path, "QueueBank.java")
- with open(queue_page, "r") as f:
- lines = f.readlines()
- with open(queue_page, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if enable_location == 0 and "LocationOn1" in line:
- counter = 9
- if enable_location == 0 and "LocationOn2" in line:
- counter = 17
- else:
- f.write(line)
- else:
- counter = counter - 1
- manifest = os.path.join(path_dest, "app/src/main/AndroidManifest.xml")
- with open(manifest, "r") as f:
- lines = f.readlines()
- with open(manifest, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if enable_location == 0 and "<!-- LocationOn/Off -->" in line:
- counter = 3
- else:
- f.write(line)
- else:
- counter = counter - 1
- if package.__contains__('digipos') or package.__contains__('digisales'):
- settings_gradle = os.path.join(path_dest, "settings.gradle")
- with open(settings_gradle, "r") as f:
- lines = f.readlines()
- with open(settings_gradle, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if "forallapps" in line:
- counter = 5
- else:
- f.write(line)
- else:
- counter = counter - 1
- mab_path = os.path.join(path_dest, code_path, "MAB.java")
- with open(mab_path, "r") as f:
- lines = f.readlines()
- with open(mab_path, "w") as f:
- counter1 = 0
- counter2 = 0
- for line in lines:
- if "fordigisales1" in line:
- counter1 = 132
- elif "fordigisales2" in line:
- counter2 = 27
- elif counter1 > 0:
- counter1 = counter1 - 1
- elif counter2 > 0:
- counter2 = counter2 - 1
- else:
- f.write(line)
- notif_center = os.path.join(path_dest, code_path, "notificationCenterTab/NotificationCenterFragment.java")
- with open(notif_center, "r") as f:
- lines = f.readlines()
- with open(notif_center, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if "fordigisales" in line:
- counter = 14
- else:
- f.write(line)
- else:
- counter = counter - 1
- else:
- settings_gradle = os.path.join(path_dest, "settings.gradle")
- with open(settings_gradle, "r") as f:
- lines = f.readlines()
- with open(settings_gradle, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if "fordigisales" in line:
- counter = 5
- else:
- f.write(line)
- else:
- counter = counter - 1
- colorValue = os.path.join(path_dest, "app/src/main/res/values/colors.xml")
- with open(colorValue, "r") as c:
- lines = c.readlines()
- with open(colorValue, "w") as c:
- for lineColor in lines:
- if "fordigisales" in lineColor:
- continue
- else:
- c.write(lineColor)
- if package == "com.nexilis.persija" or package == "io.newuniverse.GoToMalls" or package == "io.qmera.mylab":
- string_res = os.path.join(path_dest, "app/src/main/res/values/strings.xml")
- string_en_res = os.path.join(path_dest, "app/src/main/res/values-en/strings.xml")
- string_id_res = os.path.join(path_dest, "app/src/main/res/values-in/strings.xml")
- with open(string_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Qmera")
- with open(string_res, "w") as f:
- f.write(replaced)
- with open(string_en_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Qmera")
- with open(string_en_res, "w") as f:
- f.write(replaced)
- with open(string_id_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Qmera")
- with open(string_id_res, "w") as f:
- f.write(replaced)
- old_img_powered = "app/src/main/res/drawable/pb_powered_button.png"
- old_img_powered = os.path.join(path_dest, old_img_powered)
- old_new_img_powered = "app/src/main/res/drawable/pb_powered_button_temp.png"
- old_new_img_powered = os.path.join(path_dest, old_new_img_powered)
- shutil.move(old_img_powered, old_new_img_powered)
- img_powered = "app/src/main/res/drawable/pb_powered_button1.png"
- img_powered = os.path.join(path_dest, img_powered)
- new_img_powered = "app/src/main/res/drawable/pb_powered_button.png"
- new_img_powered = os.path.join(path_dest, new_img_powered)
- shutil.move(img_powered, new_img_powered)
- if package == "com.telkomsel.smb":
- string_res = os.path.join(path_dest, "app/src/main/res/values/strings.xml")
- string_en_res = os.path.join(path_dest, "app/src/main/res/values-en/strings.xml")
- string_id_res = os.path.join(path_dest, "app/src/main/res/values-in/strings.xml")
- with open(string_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Telkomsel")
- with open(string_res, "w") as f:
- f.write(replaced)
- with open(string_en_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Telkomsel")
- with open(string_en_res, "w") as f:
- f.write(replaced)
- with open(string_id_res, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("Nexilis", "Telkomsel")
- with open(string_id_res, "w") as f:
- f.write(replaced)
- old_img_powered = "app/src/main/res/drawable/pb_powered_button.png"
- old_img_powered = os.path.join(path_dest, old_img_powered)
- old_new_img_powered = "app/src/main/res/drawable/pb_powered_button_temp.png"
- old_new_img_powered = os.path.join(path_dest, old_new_img_powered)
- shutil.move(old_img_powered, old_new_img_powered)
- img_powered = "app/src/main/res/drawable/pb_powered_button2.png"
- img_powered = os.path.join(path_dest, img_powered)
- new_img_powered = "app/src/main/res/drawable/pb_powered_button.png"
- new_img_powered = os.path.join(path_dest, new_img_powered)
- shutil.move(img_powered, new_img_powered)
- def change_logo(path_dest, logo, logo_float=None):
- img_path = "app/src/main/res/drawable/ic_launcher.png"
- img_path = os.path.join(path_dest, img_path)
- img_notif = "app/src/main/res/drawable/pb_ball.png"
- img_notif = os.path.join(path_dest, img_notif)
- img_path_float = "app/src/main/res/drawable/pb_button.png"
- img_path_float = os.path.join(path_dest, img_path_float)
- if isinstance(logo, str):
- logo = requests.get('https://newuniverse.io/dashboardv2/uploads/logo/{}'.format(logo))
- with open(img_path, "wb") as f:
- f.write(logo.content)
- with open(img_path, "rb") as f:
- logo = Image.open(f)
- logo = logo.resize((512, 512))
- if logo_float:
- logo_float = requests.get('https://newuniverse.io/dashboardv2/uploads/logofloat/{}'.format(logo_float))
- with open(img_path_float, "wb") as f:
- f.write(logo_float.content)
- with open(img_path_float, "rb") as f:
- logo_float = Image.open(f)
- logo_float = logo_float.resize((150, 150))
- else:
- logo = Image.open(logo)
- logo = logo.resize((512, 512))
- if logo_float:
- logo_float = Image.open(logo_float)
- logo_float = logo_float.resize((150, 150))
- logo.save(img_path, "PNG")
- if logo_float:
- logo_float.save(img_path_float, "PNG")
- logo_float.save(img_notif, "PNG")
- def change_tab(path_dest, tabs, tab_icon, package, tab3_mode, tab_amount):
- default_tab_icon = ["tab{}.png".format(x) for x in tabs]
- for i, icon in enumerate(default_tab_icon):
- if not tab_icon[i]:
- continue
- img_path = "app/src/main/res/drawable"
- img_path = os.path.join(path_dest, img_path, icon)
- if isinstance(tab_icon[i], str):
- logo = requests.get('https://newuniverse.io/dashboardv2/uploads/tab_icon/{}'.format(tab_icon[i]))
- with open(img_path, "wb") as f:
- f.write(logo.content)
- with open(img_path, "rb") as f:
- logo = Image.open(f)
- logo = logo.resize((150, 150))
- logo.save(img_path, "PNG")
- else:
- logo = Image.open(tab_icon[i])
- logo = logo.resize((150, 150))
- logo.save(img_path, "PNG")
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- sobj_code_path = os.path.join(path_dest, code_path, path_package_id, "SObj.java")
- print(sobj_code_path)
- with open(sobj_code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("1,2,3,4", ",".join(tabs))
- with open(sobj_code_path, "w") as f:
- f.write(replaced)
- main_code_path = os.path.join(path_dest, code_path, path_package_id, "MAB.java")
- with open(main_code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace('tab3 = "0"', 'tab3 = "{}"'.format(tab3_mode))
- with open(main_code_path, "w") as f:
- f.write(replaced)
- prefs_code_path = os.path.join(path_dest, code_path, path_package_id, "util/PrefsUtil.java")
- with open(prefs_code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace('DEFAULT_TAB_AMOUNT = "4"', 'DEFAULT_TAB_AMOUNT = "{}"'.format(tab_amount))
- with open(prefs_code_path, "w") as f:
- f.write(replaced)
- def change_fb(path_dest, fb_order, package, fb_icon):
- fb_order_list = [int(x) for x in fb_order.split(",")]
- default_fb_icon = ["pb_button_chat.png", "pb_button_call.png", "pb_button_cc.png", "pb_button_stream.png",
- "nexilis_fb_04.png"]
- for x,i in enumerate(fb_order_list):
- if not fb_icon[x]:
- continue
- img_path = "app/src/main/res/drawable-nodpi"
- if i-1 in range(-len(default_fb_icon), len(default_fb_icon)):
- img_path = os.path.join(path_dest, img_path, default_fb_icon[i-1])
- if isinstance(fb_icon[x], str):
- logo = requests.get('https://newuniverse.io/dashboardv2/uploads/fb_icon/{}'.format(fb_icon[x]))
- with open(img_path, "wb") as f:
- f.write(logo.content)
- with open(img_path, "rb") as f:
- logo = Image.open(f)
- logo = logo.resize((150, 150))
- logo.save(img_path, "PNG")
- else:
- logo = Image.open(fb_icon[x])
- logo = logo.resize((150, 150))
- logo.save(img_path, "PNG")
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- main_code_path = os.path.join(path_dest, code_path, path_package_id, "MAB.java")
- with open(main_code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace('dockedPlacement = "1,2,3,4,5"', 'dockedPlacement = "{}"'.format(fb_order))
- with open(main_code_path, "w") as f:
- f.write(replaced)
- def change_background(path_dest, background):
- # if isinstance(background, str):
- # background = background.split(",")
- # for i,b in enumerate(background):
- # n = i+1
- # img_path = "app/src/main/res/drawable-nodpi/pb_lbackground_{}.png".format(n)
- # img_path = os.path.join(path_dest, img_path)
- # logo = requests.get('https://newuniverse.io/dashboardv2/uploads/background/{}'.format(b))
- # with open(img_path, "wb") as f:
- # f.write(logo.content)
- # with open(img_path, "rb") as f:
- # logo = Image.open(f)
- # logo = logo.resize((600, 1250))
- # logo.save(img_path, "PNG")
- # else:
- # img_path = "app/src/main/res/drawable-nodpi/pb_lbackground_1.png"
- # logo = Image.open(background)
- # logo = logo.resize((600, 1250))
- # logo.save(img_path, "PNG")
- pass
- def change_access(path_dest, access_model, package):
- access = ["CPAAS_MODE_FLOATING", "CPAAS_MODE_DOCKED", "CPAAS_MODE_BURGER"]
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- code_path = os.path.join(path_dest, code_path, path_package_id, "util", "PrefsUtil.java")
- print(code_path)
- with open(code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("= CPAAS_MODE_DOCKED", "= {}".format(access[access_model]))
- with open(code_path, "w") as f:
- f.write(replaced)
- def change_certificate(path_dest, key, keyfile, keytool):
- keyfile_name = "{}.keystore".format(key["alias"])
- keyfile_path = os.path.join(path_dest, keyfile_name)
- if keyfile:
- keyfile.save(keyfile_path)
- else:
- vprint("keytool run")
- os.chdir(path_dest)
- vprint("current working directory: ", os.getcwd())
- dname = "CN={}, OU={}, O={}, L={}, S={}, C={}".format(key["common_name"], key["organization_unit"],
- key["organization_name"], key["locality_name"],
- key["state_name"], key["country"])
- cmd = [keytool, "-genkey", "-v", "-keystore", keyfile_path, "-alias", key["alias"], "-keyalg", "RSA",
- "-keysize", "2048",
- "-validity", "10000", "-dname", dname, "-storepass", key["store_password"], "-keypass",
- key["key_password"]]
- vprint(cmd)
- subprocess.run(cmd)
- vprint("keytool end")
- build_gradle = os.path.join(path_dest, 'app/build.gradle')
- with open(build_gradle, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("allyourbase", key["store_password"])
- replaced = replaced.replace("arebelongto", key["key_password"])
- replaced = replaced.replace("key-qmeralite", key["alias"])
- with open(build_gradle, "w") as f:
- f.write(replaced)
- def change_huawei_file(path_dest, huawei_file, package_id):
- huaweifile_name = "agconnect-services.json"
- huaweifile_path = os.path.join(path_dest, "app/{}".format(huaweifile_name))
- if huawei_file:
- huawei_file.save(huaweifile_path)
- path_package_id = package_id.replace(".", "/")
- code_path = "app/src/main/java/"
- main_code_path = os.path.join(path_dest, code_path, path_package_id, "MAB.java")
- with open(main_code_path, "r") as f:
- file_source = f.read()
- replaced = file_source.replace('isHMSEnabled = false', 'isHMSEnabled = true')
- with open(main_code_path, "w") as f:
- f.write(replaced)
- def change_fms_file(path_dest, fms_enable):
- build_gradle = os.path.join(path_dest, 'app/build.gradle')
- with open(build_gradle, "r") as f:
- lines = f.readlines()
- with open(build_gradle, "w") as f:
- if fms_enable == 0:
- for line in lines:
- if "withfcm" in line:
- continue
- else:
- f.write(line)
- else:
- for line in lines:
- if "-nofcm" in line:
- continue
- else:
- f.write(line)
- def change_adblock_file(path_dest, package, use_adblock):
- if use_adblock == 0:
- build_gradle = os.path.join(path_dest, 'app/build.gradle')
- with open(build_gradle, "r") as f:
- lines = f.readlines()
- with open(build_gradle, "w") as f:
- for line in lines:
- if "removeAdblock" in line:
- continue
- else:
- f.write(line)
- path_package_id = package.replace(".", "/")
- code_path = "app/src/main/java/"
- code_path = os.path.join(path_dest, code_path, path_package_id)
- javas = [os.path.join(dp, f) for dp, dn, filenames in os.walk(code_path) for f in filenames]
- for j in javas:
- print(j)
- with open(j, "r") as f:
- lines = f.readlines()
- with open(j, "w") as f:
- counter = 0
- for line in lines:
- if counter == 0:
- if "removeAdblock" in line:
- continue
- elif "import org.adblockplus.libadblockplus.android" in line:
- continue
- elif "removeAdbMultiLine" in line:
- counter = 11
- elif "extends AdblockWebView" in line:
- replaced = line.replace("extends AdblockWebView", "extends WebView")
- f.write(replaced)
- else:
- f.write(line)
- else:
- counter = counter - 1
- def run_build(path_dest):
- gradlew = os.path.join(path_dest, "gradlew")
- error = ""
- ret = subprocess.run([gradlew, 'clean', 'assembleRelease'], capture_output=True)
- if ret.returncode == 0:
- ret = subprocess.run([gradlew, 'bundleRelease'], capture_output=True)
- if ret.returncode != 0:
- error = "{}\n".format(ret.stderr.decode())
- vprint(error)
- else:
- error = "{}\n".format(ret.stderr.decode())
- vprint(error)
- return ret.returncode, error
- def deliver_apk(path_dest, package_id, key, key_exists):
- apk_dir = os.path.join(path_dest, 'app/build/outputs/apk/release/app-release.apk')
- aab_dir = os.path.join(path_dest, 'app/build/outputs/bundle/release/app-release.aab')
- keystore_name = '{}.keystore'.format(key["alias"])
- keystore_dir = os.path.join(path_dest, keystore_name)
- timenow = time.time()
- apk_name = "{}{}.apk".format(package_id, timenow)
- aab_name = "{}{}.aab".format(package_id, timenow)
- zip_name = "{}{}.zip".format(package_id, timenow)
- new_apk_dir = os.path.join(app.apk_folder, apk_name)
- new_aab_dir = os.path.join(app.apk_folder, aab_name)
- new_dir = os.path.join(app.apk_folder, zip_name)
- vprint(apk_dir)
- shutil.move(apk_dir, new_apk_dir)
- try:
- shutil.move(aab_dir, new_aab_dir)
- with ZipFile(new_dir, 'w') as zip_file:
- zip_file.write(new_apk_dir, os.path.basename(new_apk_dir))
- zip_file.write(new_aab_dir, os.path.basename(new_aab_dir))
- if not key_exists:
- zip_file.write(keystore_dir, os.path.basename(keystore_dir))
- os.remove(new_apk_dir)
- os.remove(new_aab_dir)
- project_path = os.path.join(app.temp_folder, package_id)
- shutil.rmtree(project_path)
- return {"status": "0", "name": zip_name}
- except Exception as e:
- return {"status": "4", "message": "Deliver APK & AAB failed\n{}".format(e)}
- def change_version(path_dest, version_code, version_name):
- build_gradle = os.path.join(path_dest, 'app/build.gradle')
- with open(build_gradle, "r") as f:
- file_source = f.read()
- replaced = file_source.replace("versionCode 3", "versionCode {}".format(version_code))
- replaced = replaced.replace('versionName "3.0"', 'versionName "{}"'.format(version_name))
- with open(build_gradle, "w") as f:
- f.write(replaced)
- @app.route('/', methods=["GET", "POST"])
- def build_apk():
- vprint('==============================================================')
- if request.method == 'POST':
- logo = None
- logo_float = None
- app_name = "NexilisLite"
- package_id = "com.app.nexilis"
- acc = None
- url = None
- keystore = None
- huawei_file = None
- fms_enable = 1
- use_adblock = 0
- key_exists = False
- # tabs = ["1", "2", "3", "4"]
- fb_order = "1,2,3,4,5"
- tabs = []
- tab3_mode = "0"
- tab_amount = 6
- tab_icon = [None, None, None, None, None, None]
- fb_icon = [None, None, None, None, None]
- background = None
- version_code = "1"
- version_name = "1.0.0"
- font = 0
- enable_sms = 0
- enable_location = 0
- key = {"alias": "nexilislite", "store_password": "allyourbase", "key_password": "allyourbase",
- "common_name": "all", "organization_unit": "your",
- "organization_name": "base", "locality_name": "are", "state_name": "belong", "country": "to"}
- try:
- if 'logo' in request.files:
- logo = request.files['logo']
- vprint(type(logo))
- elif 'logo' in request.form:
- logo = request.form['logo']
- vprint(type(logo))
- if 'logofloat' in request.files:
- logo_float = request.files['logofloat']
- vprint(type(logo_float))
- elif 'logofloat' in request.form:
- logo_float = request.form['logofloat']
- vprint(type(logo_float))
- if 'app_name' in request.files:
- app_name = request.files['app_name']
- vprint(app_name)
- elif 'app_name' in request.form:
- app_name = request.form['app_name']
- vprint(app_name)
- if 'package_id' in request.files:
- package_id = request.files['package_id']
- vprint(package_id)
- elif 'package_id' in request.form:
- package_id = request.form['package_id']
- vprint(package_id)
- if 'acc' in request.files:
- acc = request.files['acc']
- vprint(acc)
- elif 'acc' in request.form:
- acc = request.form['acc']
- vprint(acc)
- if 'url' in request.files:
- url = request.files['url']
- vprint(url)
- elif 'url' in request.form:
- url = request.form['url']
- vprint(url)
- if 'keystore' in request.files:
- keystore = request.files['keystore']
- key_exists = True
- elif 'keystore' in request.form:
- keystore = request.form['keystore']
- key_exists = True
- if 'huawei_file' in request.files:
- huawei_file = request.files['huawei_file']
- elif 'huawei_file' in request.form:
- huawei_file = request.form['huawei_file']
- if 'fms_enable' in request.form:
- fms_enable = int(request.form['fms_enable'])
- if 'use_adblock' in request.form:
- use_adblock = int(request.form['use_adblock'])
- if 'alias' in request.form:
- if request.form['alias']:
- key["alias"] = request.form['alias']
- if 'store_password' in request.form:
- if request.form['store_password']:
- key["store_password"] = request.form['store_password']
- if 'key_password' in request.form:
- if request.form['key_password']:
- key["key_password"] = request.form['key_password']
- if keystore:
- if 'common_name' in request.form:
- if request.form['common_name']:
- key["common_name"] = request.form['common_name']
- if 'organization_unit' in request.form:
- if request.form['organization_unit']:
- key["organization_unit"] = request.form['organization_unit']
- if 'organization_name' in request.form:
- if request.form['organization_name']:
- key["organization_name"] = request.form['organization_name']
- if 'locality_name' in request.form:
- if request.form['locality_name']:
- key["locality_name"] = request.form['locality_name']
- if 'state_name' in request.form:
- if request.form['state_name']:
- key["state_name"] = request.form['state_name']
- if 'country' in request.form:
- if request.form['country']:
- key["country"] = request.form['country']
- tabs.append(request.form["tab1"])
- tabs.append(request.form["tab2"])
- if request.form['tab3']:
- tabs.append(request.form["tab3"])
- if request.form['tab4']:
- tabs.append(request.form["tab4"])
- if 'tab1_icon' in request.files:
- tab_icon[0] = request.files['tab1_icon']
- elif 'tab1_icon' in request.form:
- tab_icon[0] = request.form['tab1_icon']
- if 'tab2_icon' in request.files:
- tab_icon[1] = request.files['tab2_icon']
- elif 'tab2_icon' in request.form:
- tab_icon[1] = request.form['tab2_icon']
- if 'tab3_icon' in request.files:
- tab_icon[2] = request.files['tab3_icon']
- elif 'tab3_icon' in request.form:
- tab_icon[2] = request.form['tab3_icon']
- if 'tab4_icon' in request.files:
- tab_icon[3] = request.files['tab4_icon']
- elif 'tab4_icon' in request.form:
- tab_icon[3] = request.form['tab4_icon']
- if 'fb1_icon' in request.files:
- fb_icon[0] = request.files['fb1_icon']
- elif 'fb1_icon' in request.form:
- fb_icon[0] = request.form['fb1_icon']
- if 'fb2_icon' in request.files:
- fb_icon[1] = request.files['fb2_icon']
- elif 'fb2_icon' in request.form:
- fb_icon[1] = request.form['fb2_icon']
- if 'fb3_icon' in request.files:
- fb_icon[2] = request.files['fb3_icon']
- elif 'fb3_icon' in request.form:
- fb_icon[2] = request.form['fb3_icon']
- if 'fb4_icon' in request.files:
- fb_icon[3] = request.files['fb4_icon']
- elif 'fb4_icon' in request.form:
- fb_icon[3] = request.form['fb4_icon']
- if 'fb5_icon' in request.files:
- fb_icon[4] = request.files['fb5_icon']
- elif 'fb5_icon' in request.form:
- fb_icon[4] = request.form['fb5_icon']
- if 'fb_icon' in request.form:
- fb_icon = request.form['fb_icon'].split(",")
- if 'fb_order' in request.form:
- fb_order = request.form['fb_order']
- vprint("fb_icon: {}".format(fb_icon))
- access_model = int(request.form['access_model'])
- if 'tab3_mode' in request.form:
- tab3_mode = request.form['tab3_mode']
- if 'tab_amount' in request.form:
- tab_amount = int(request.form['tab_amount'])
- if 'font' in request.form:
- font = int(request.form['font'])
- if 'background' in request.files:
- background = request.files['background']
- elif 'background' in request.form:
- background = request.form['background']
- if 'version_code' in request.form:
- version_code = request.form['version_code']
- if 'version_name' in request.form:
- version_name = request.form['version_name']
- else:
- version_name = "1.0.{}".format(version_code)
- if 'enable_sms' in request.form:
- enable_sms = int(request.form['enable_sms'])
- if 'enable_location' in request.form:
- enable_location = int(request.form['enable_location'])
- except BaseException as e:
- vprint(traceback.format_exc())
- return {"status": "1", "message": "Parameter mismatch\n{}\n".format(str(e))}
- try:
- path_dest, c_code_path = create_folder(package_id)
- vprint("path_dest: " + path_dest)
- vprint("c_code_path: " + c_code_path)
- if acc:
- change_acc(c_code_path, acc, enable_sms)
- if url:
- change_url(c_code_path, url)
- change_name(path_dest, app_name, enable_sms)
- change_certificate(path_dest, key, keystore, app.keytool)
- change_package(path_dest, package_id, enable_location)
- change_version(path_dest, version_code, version_name)
- change_font(path_dest, font, package_id)
- if logo:
- change_logo(path_dest, logo, logo_float)
- if background:
- change_background(path_dest, background)
- change_fb(path_dest, fb_order, package_id, fb_icon)
- change_access(path_dest, access_model, package_id)
- change_tab(path_dest, tabs, tab_icon, package_id, tab3_mode, tab_amount)
- change_huawei_file(path_dest, huawei_file, package_id)
- change_fms_file(path_dest, fms_enable)
- change_adblock_file(path_dest, package_id, use_adblock)
- except BaseException as e:
- vprint(traceback.format_exc())
- return {"status": "2", "message": "Process failure\n{}\n".format(str(e))}
- os.chdir(path_dest)
- return_code, error = run_build(path_dest)
- if return_code == 0:
- return deliver_apk(path_dest, package_id, key, key_exists)
- return {"status": "3", "message": "Build failed\n{}".format(str(error))}
- else:
- if 'e' in request.args:
- return request.args['e']
- return "Hello World!"
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port=8092, debug=app.verbose, ssl_context=app.ssl)
|