script.py 4.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # coding:utf8
  2. import os
  3. import logging
  4. import xml.etree.ElementTree as ET
  5. ANDROID_NAMESPACE = 'http://schemas.android.com/apk/res/android'
  6. logger = logging.getLogger('script.py')
  7. def script(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  8. # replace_application_verify_rose_bug(extract_dir)
  9. fix_install_fail_bug(extract_dir)
  10. fix_android8_bug_rose(extract_dir)
  11. def fix_android8_bug_rose(decompile_dir):
  12. style_xml_path = os.path.join(decompile_dir, 'res', 'values', 'styles.xml')
  13. xml_tree = ET.parse(style_xml_path)
  14. xml_root = xml_tree.getroot()
  15. style_roots = xml_root.findall('./style')
  16. for style_root in style_roots:
  17. if style_root.get('name') == 'coolyun_splash_translucent':
  18. items = style_root.findall('./item')
  19. for item in items:
  20. print 'item name', item.get('name')
  21. print item.findtext('.')
  22. if item.get('name') == 'android:windowIsTranslucent':
  23. item.text = 'false'
  24. xml_tree.write(style_xml_path, encoding='utf-8', xml_declaration=True)
  25. break
  26. def fix_install_fail_bug(decompile_dir_path):
  27. namespace = '{http://schemas.android.com/apk/res/android}'
  28. ET.register_namespace('android', 'http://schemas.android.com/apk/res/android')
  29. manifest_path = os.path.join(decompile_dir_path, 'AndroidManifest.xml')
  30. xml_tree = ET.parse(manifest_path)
  31. xml_root = xml_tree.getroot()
  32. application_node = xml_root.find('./application')
  33. print application_node
  34. application_name = application_node.get(namespace + 'name')
  35. print application_name
  36. # 修改 extractNativeLib
  37. application_node.set(namespace + 'extractNativeLibs', 'true')
  38. xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
  39. def isNeedReplaceApplicationLine(line):
  40. return '.super Landroid/app/Application;' in line \
  41. or 'invoke-direct {p0}, Landroid/app/Application;-><init>()V' in line \
  42. or 'invoke-super {p0, p1}, Landroid/app/Application;->attachBaseContext(Landroid/content/Context;)V' in line \
  43. or 'invoke-super {p0, p1}, Landroid/app/Application;->onConfigurationChanged(Landroid/content/res/Configuration;)V' in line \
  44. or 'invoke-super {p0}, Landroid/app/Application;->onLowMemory()V' in line \
  45. or 'invoke-super {p0}, Landroid/app/Application;->onTerminate()V' in line \
  46. or 'invoke-super {p0, p1}, Landroid/app/Application;->onTrimMemory(I)V' in line \
  47. or 'invoke-super {p0}, Landroid/app/Application;->onCreate()V' in line
  48. def is_rose_replace_application(line):
  49. return '.super Lcom/coolyun/framework/CoolYunApplication;' in line \
  50. or 'invoke-direct {p0}, Lcom/coolyun/framework/CoolYunApplication;-><init>()V' in line \
  51. or 'invoke-super {p0, p1}, Lcom/coolyun/framework/CoolYunApplication;->attachBaseContext(Landroid/content/Context;)V' in line \
  52. or 'invoke-super {p0, p1}, Lcom/coolyun/framework/CoolYunApplication;->onConfigurationChanged(Landroid/content/res/Configuration;)V' in line \
  53. or 'invoke-super {p0}, Lcom/coolyun/framework/CoolYunApplication;->onLowMemory()V' in line \
  54. or 'invoke-super {p0}, Lcom/coolyun/framework/CoolYunApplication;->onTerminate()V' in line \
  55. or 'invoke-super {p0, p1}, Lcom/coolyun/framework/CoolYunApplication;->onTrimMemory(I)V' in line \
  56. or 'invoke-super {p0}, Lcom/coolyun/framework/CoolYunApplication;->onCreate()V' in line
  57. def replace_application_verify_rose_bug(decompile_dir):
  58. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  59. if r'com\shenghe\wzcq\coolpad' in dirpath and 'HTApplication.smali' in filenames:
  60. application_path = os.path.join(dirpath, "HTApplication.smali")
  61. print application_path
  62. with open(application_path, "r") as f:
  63. smali_str_arr = f.readlines()
  64. for line in smali_str_arr:
  65. if not is_rose_replace_application(line) and 'Lcom/coolyun/framework/CoolYunApplication' in line:
  66. index = smali_str_arr.index(line)
  67. smali_str_arr[index] = line.replace('Lcom/coolyun/framework/CoolYunApplication',
  68. 'Landroid/app/Application')
  69. if isNeedReplaceApplicationLine(line):
  70. index = smali_str_arr.index(line)
  71. smali_str_arr[index] = line.replace('Landroid/app/Application',
  72. 'Lcom/coolyun/framework/CoolYunApplication')
  73. with open(application_path, "w") as f:
  74. f.write(''.join(smali_str_arr))
  75. if __name__ == '__main__':
  76. script('', 'E:/script_test', {}, {}, {})