main2.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import flask
  2. from flask import Flask, request
  3. import requests
  4. from PIL import ImageFile, Image
  5. import os
  6. import shutil
  7. import subprocess
  8. ImageFile.SAFEBLOCK = 2048*2048
  9. app = Flask(__name__)
  10. app.base_project = "/apps/3ps/build_apk/PalioBrowserGen"
  11. app.base_project_name = os.path.basename(app.base_project)
  12. app.temp_folder = "/apps/3ps/build_apk/BuildApk"
  13. app.verbose = True
  14. def vprint(*data):
  15. if app.verbose:
  16. print(*data)
  17. def create_folder(package_id):
  18. path = os.path.join(app.temp_folder, package_id)
  19. if not os.path.exists(path):
  20. os.mkdir(path)
  21. else:
  22. shutil.rmtree(path)
  23. os.mkdir(path)
  24. vprint(path)
  25. path_dest = os.path.join(path,app.base_project_name)
  26. if not os.path.exists(path_dest):
  27. shutil.copytree(app.base_project, path_dest)
  28. code_path = "app/src/main/java/"
  29. orig_code = "io/palio/browser"
  30. path_package_id = package_id.replace(".","/")
  31. c_code_path = os.path.join(path_dest, code_path, path_package_id)
  32. orig_code_path = os.path.join(path_dest, code_path, orig_code)
  33. if not os.path.exists(c_code_path):
  34. shutil.copytree(orig_code_path,c_code_path)
  35. shutil.rmtree(orig_code_path)
  36. return path_dest, c_code_path
  37. def change_url(c_code_path, url):
  38. main_activity = os.path.join(c_code_path, "MainActivity.java")
  39. with open(main_activity, "r") as f:
  40. file_source = f.read()
  41. replaced = file_source.replace("https://www.google.com",url)
  42. with open(main_activity, "w") as f:
  43. f.write(replaced)
  44. def change_name(path_dest, name):
  45. manifest = os.path.join(path_dest, "app/src/main/AndroidManifest.xml")
  46. with open(manifest, "r") as f:
  47. file_source = f.read()
  48. replaced = file_source.replace("Palio Brow", name)
  49. with open(manifest, "w") as f:
  50. f.write(replaced)
  51. def change_package(path_dest, package):
  52. build_gradle = os.path.join(path_dest, 'app/build.gradle')
  53. with open(build_gradle, "r") as f:
  54. file_source = f.read()
  55. replaced = file_source.replace("io.palio.browser", package)
  56. with open(build_gradle, "w") as f:
  57. f.write(replaced)
  58. manifest = os.path.join(path_dest, "app/src/main/AndroidManifest.xml")
  59. with open(manifest, "r") as f:
  60. file_source = f.read()
  61. replaced = file_source.replace("io.palio.browser", package)
  62. with open(manifest, "w") as f:
  63. f.write(replaced)
  64. path_package_id = package.replace(".", "/")
  65. code_path = "app/src/main/java/"
  66. code_path = os.path.join(path_dest,code_path,path_package_id)
  67. javas = [os.path.join(dp, f) for dp, dn, filenames in os.walk(code_path) for f in filenames]
  68. for j in javas:
  69. with open(j, "r") as f:
  70. file_source = f.read()
  71. replaced = file_source.replace("io.palio.browser", package)
  72. with open(j, "w") as f:
  73. f.write(replaced)
  74. def change_logo(path_dest, logo):
  75. img_path = "app/src/main/res/drawable/pb_palio_ball.png"
  76. img_path = os.path.join(path_dest, img_path)
  77. if isinstance(logo,str):
  78. logo = requests.get('https://qmera.io/dashboardv2/uploads/logo/{}'.format(logo))
  79. with open(img_path, "wb") as f:
  80. f.write(logo.content)
  81. with open(img_path, "rb") as f:
  82. logo = Image.open(f)
  83. logo = logo.resize((150, 150))
  84. logo.save(img_path, "PNG")
  85. else:
  86. logo = Image.open(logo)
  87. logo = logo.resize((150,150))
  88. logo.save(img_path,"PNG")
  89. def run_build(path_dest):
  90. gradlew = os.path.join(path_dest,"gradlew")
  91. ret = subprocess.run([gradlew, 'assembleRelease'])
  92. return ret.returncode
  93. def deliver_apk(path_dest):
  94. apk_dir = os.path.join(path_dest,'app/build/outputs/apk/release')
  95. vprint(apk_dir)
  96. try:
  97. return flask.send_from_directory(apk_dir,'app-release.apk')
  98. except Exception as e:
  99. return str(e)
  100. @app.route('/', methods=["GET","POST"])
  101. def build_apk():
  102. if request.method == 'POST':
  103. logo = None
  104. app_name = None
  105. package_id = None
  106. home_url = None
  107. if 'logo' in request.files:
  108. logo = request.files['logo']
  109. vprint(type(logo))
  110. elif 'logo' in request.form:
  111. logo = request.form['logo']
  112. vprint(type(logo))
  113. if 'app_name' in request.files:
  114. app_name = request.files['app_name']
  115. vprint(app_name)
  116. elif 'app_name' in request.form:
  117. app_name = request.form['app_name']
  118. vprint(app_name)
  119. if 'package_id' in request.files:
  120. package_id = request.files['package_id']
  121. vprint(package_id)
  122. elif 'package_id' in request.form:
  123. package_id = request.form['package_id']
  124. vprint(package_id)
  125. if 'url' in request.files:
  126. home_url = request.files['url']
  127. vprint(home_url)
  128. elif 'url' in request.form:
  129. home_url = request.form['url']
  130. vprint(home_url)
  131. if package_id is None:
  132. package_id = 'com.app.qmera'
  133. path_dest, c_code_path = create_folder(package_id)
  134. vprint("path_dest: " + path_dest)
  135. vprint("c_code_path: "+c_code_path)
  136. change_url(c_code_path, home_url)
  137. change_name(path_dest, app_name)
  138. change_package(path_dest,package_id)
  139. if logo:
  140. change_logo(path_dest,logo)
  141. os.chdir(path_dest)
  142. return_code = run_build(path_dest)
  143. if(return_code == 0):
  144. return deliver_apk(path_dest)
  145. return "h"
  146. else:
  147. if 'e' in request.args:
  148. return request.args['e']
  149. return "Hello World!"
  150. if __name__ == '__main__':
  151. app.run(host='0.0.0.0', port=8090, debug=app.verbose, ssl_context=('/etc/ssl/STAR_qmera_io/qmera_io.crt', '/etc/ssl/STAR_qmera_io/qmera.key'))