script.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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, "requestLegacyExternalStorage")
  17. move_list = ["alibaba", "android", "asus", "bumptech", "bun", "google", "huawei", "morefun", "netease", "nikki",
  18. "nostra13", "onevcat", "papegames"]
  19. source_smali_classes = os.path.join(decompileDir, "smali_classes2")
  20. dist_smali_classes3 = create_mutil_smali(decompileDir)
  21. move_package(source_smali_classes, dist_smali_classes3, move_list)
  22. def script_last(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  23. return
  24. def move_package(s1, s3, list_package):
  25. for d in list_package:
  26. src = os.path.join(s1, d)
  27. if os.path.exists(src):
  28. dst = os.path.join(s3, d)
  29. distutils.dir_util.copy_tree(src, dst)
  30. distutils.dir_util.remove_tree(src)
  31. def create_mutil_smali(decompileDir):
  32. f_idx = 2
  33. while True:
  34. tmp = gw_file_system.get_full_path(os.path.join(decompileDir, 'smali_classes%d' % f_idx))
  35. tmp = tmp.replace('\\', '/')
  36. tmp = re.sub('/+', '/', tmp)
  37. if os.path.exists(tmp):
  38. files = os.listdir(tmp)
  39. if len(files) == 0:
  40. smali_classes2_dir = tmp
  41. break
  42. f_idx += 1
  43. else:
  44. smali_classes2_dir = tmp
  45. break
  46. # endwhile
  47. os.mkdir(smali_classes2_dir)
  48. return smali_classes2_dir
  49. def modify_manifest_application(decompileDir, key):
  50. ET.register_namespace('android', ANDROID_NS)
  51. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  52. root_node = ET.parse(xmlparse)
  53. root = root_node.getroot()
  54. name = '{' + ANDROID_NS + '}name'
  55. authorities = '{' + ANDROID_NS + '}' + key
  56. package_name = root.attrib.get('package')
  57. if package_name == None:
  58. return
  59. providers = root.findall('./application')
  60. if providers != None:
  61. for provider in providers:
  62. # 使用try 主要是为了 防止此属性不在时,导致的错误,而程序终止
  63. try:
  64. del provider.attrib[authorities]
  65. except:
  66. ""
  67. root_node.write(xmlparse, 'utf-8')
  68. def modify_manifest_service(decompileDir, key):
  69. ET.register_namespace('android', ANDROID_NS)
  70. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  71. root_node = ET.parse(xmlparse)
  72. root = root_node.getroot()
  73. name = '{' + ANDROID_NS + '}name'
  74. authorities = '{' + ANDROID_NS + '}' + key
  75. package_name = root.attrib.get('package')
  76. if package_name == None:
  77. return
  78. providers = root.findall('./application/service')
  79. if providers != None:
  80. for provider in providers:
  81. # 使用try 主要是为了 防止此属性不在时,导致的错误,而程序终止
  82. try:
  83. del provider.attrib[authorities]
  84. except:
  85. ""
  86. root_node.write(xmlparse, 'utf-8')
  87. if __name__ == '__main__':
  88. ""