script.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # coding:utf8
  2. __author__ = 'Snow'
  3. import os
  4. import logging
  5. import xml.dom.minidom
  6. import re
  7. import shutil
  8. import glob
  9. import distutils.dir_util
  10. import gw_file_system
  11. from xml.etree import ElementTree as ET
  12. ANDROID_NS = 'http://schemas.android.com/apk/res/android'
  13. def script(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  14. sdk_id = channelSdkInfo['id']
  15. if sdk_id == "512":
  16. modify_manifest_application(decompileDir, "zygotePreloadName")
  17. modify_manifest_service(decompileDir, "useAppZygote")
  18. def script_last(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  19. logging.info('------------channelSdkInfo:' + str(channelSdkInfo))
  20. # smali_classes4
  21. s1 = os.path.join(decompileDir, "smali", "androidx")
  22. smali_classes2_dir = create_mutil_smali(decompileDir)
  23. s3 = smali_classes2_dir
  24. list_package = ["room", "savedstate", "slidingpanelayout", "swiperefreshlayout", "transition", "vectordrawable",
  25. "versionedparcelable", "viewpager", "work", "a", "activity", "appcompat", "asynclayoutinflater",
  26. "b", "browser", "c", "cardview", "coordinatorlayout", "core", "customview"]
  27. if not os.path.exists(s3):
  28. distutils.dir_util.mkpath(s3)
  29. move_package(s1, s3, list_package)
  30. def move_package(s1, s3, list_package):
  31. for d in list_package:
  32. src = os.path.join(s1, d)
  33. if os.path.exists(src):
  34. dst = os.path.join(s3, d)
  35. distutils.dir_util.copy_tree(src, dst)
  36. distutils.dir_util.remove_tree(src)
  37. def create_mutil_smali(decompileDir):
  38. f_idx = 2
  39. while True:
  40. tmp = gw_file_system.get_full_path(os.path.join(decompileDir, 'smali_classes%d' % f_idx))
  41. tmp = tmp.replace('\\', '/')
  42. tmp = re.sub('/+', '/', tmp)
  43. if os.path.exists(tmp):
  44. files = os.listdir(tmp)
  45. if len(files) == 0:
  46. smali_classes2_dir = tmp
  47. break
  48. f_idx += 1
  49. else:
  50. smali_classes2_dir = tmp
  51. break
  52. # endwhile
  53. os.mkdir(smali_classes2_dir)
  54. return smali_classes2_dir
  55. def modify_manifest_application(decompileDir, key):
  56. ET.register_namespace('android', ANDROID_NS)
  57. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  58. root_node = ET.parse(xmlparse)
  59. root = root_node.getroot()
  60. name = '{' + ANDROID_NS + '}name'
  61. authorities = '{' + ANDROID_NS + '}' + key
  62. package_name = root.attrib.get('package')
  63. if package_name == None:
  64. return
  65. providers = root.findall('./application')
  66. if providers != None:
  67. for provider in providers:
  68. # 使用try 主要是为了 防止此属性不在时,导致的错误,而程序终止
  69. try:
  70. del provider.attrib[authorities]
  71. except:
  72. ""
  73. root_node.write(xmlparse, 'utf-8')
  74. def modify_manifest_service(decompileDir, key):
  75. ET.register_namespace('android', ANDROID_NS)
  76. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  77. root_node = ET.parse(xmlparse)
  78. root = root_node.getroot()
  79. name = '{' + ANDROID_NS + '}name'
  80. authorities = '{' + ANDROID_NS + '}' + key
  81. package_name = root.attrib.get('package')
  82. if package_name == None:
  83. return
  84. providers = root.findall('./application/service')
  85. if providers != None:
  86. for provider in providers:
  87. # 使用try 主要是为了 防止此属性不在时,导致的错误,而程序终止
  88. try:
  89. del provider.attrib[authorities]
  90. except:
  91. ""
  92. root_node.write(xmlparse, 'utf-8')
  93. if __name__ == '__main__':
  94. ""