script.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import logging
  4. def script_pre(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  5. public_xml = os.path.join(extract_dir, "res/values/public.xml")
  6. handle_public_xml(public_xml, "ratio")
  7. handle_public_xml(public_xml, "graph")
  8. handle_public_xml(public_xml, "graph_wrap")
  9. def script_last(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  10. print "script last snow"
  11. # 修复酷派新sdk 3.0接口方法名改变登录后闪退bug
  12. is_version_3_sdk = fix_coolpad_version_3_method_name_change_bug(extract_dir)
  13. print u'is_version_3_sdk: ', is_version_3_sdk
  14. if is_version_3_sdk:
  15. fix_coolpad_version_3_login_fail_bug(extract_dir)
  16. def handle_public_xml(public_xml_path, remove_node):
  17. if not os.path.exists(public_xml_path):
  18. logging.info('public_xml is null: ' + public_xml_path)
  19. return
  20. new_lines = []
  21. with open(public_xml_path, 'r+') as f:
  22. for line in f.readlines():
  23. # l = line.strip()
  24. if line.find(remove_node) > -1:
  25. continue
  26. new_lines.append(line)
  27. f.seek(0)
  28. f.truncate()
  29. f.writelines(new_lines)
  30. return
  31. def fix_coolpad_version_3_method_name_change_bug(decompile_dir):
  32. is_version_3_sdk = False
  33. is_new_sdk_and_version_lt_version_3 = False
  34. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  35. if ur'com\yulong\sdk\promoter' in dirpath and u'OnGameAuthListener.smali' in filenames:
  36. auth_listener_path = os.path.join(dirpath, u'OnGameAuthListener.smali')
  37. with open(auth_listener_path, u'r') as f:
  38. smali_str_arr = f.read()
  39. if u'onSuccess' in smali_str_arr:
  40. is_version_3_sdk = True
  41. if u'onResult' in smali_str_arr:
  42. is_new_sdk_and_version_lt_version_3 = True
  43. break
  44. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  45. if ur'com\yulong\sdk\promoter' in dirpath and u'PromoterGameAuthApi$1.smali' in filenames:
  46. smali_path = os.path.join(dirpath, u'PromoterGameAuthApi$1.smali')
  47. print smali_path
  48. with open(smali_path, u'r') as f:
  49. smali_str_arr = f.readlines()
  50. index_str = ur'onSuccess'
  51. if is_new_sdk_and_version_lt_version_3:
  52. index_str = ur'onSuccess'
  53. elif is_version_3_sdk:
  54. index_str = ur'onResult'
  55. for line in smali_str_arr:
  56. if index_str in line:
  57. print line
  58. index = smali_str_arr.index(line)
  59. if is_new_sdk_and_version_lt_version_3:
  60. smali_str_arr[index] = line.replace(index_str, u'onResult')
  61. elif is_version_3_sdk:
  62. smali_str_arr[index] = line.replace(index_str, u'onSuccess')
  63. print smali_str_arr[index]
  64. break
  65. with open(smali_path, u'w') as f:
  66. f.write(u''.join(smali_str_arr))
  67. break
  68. return is_version_3_sdk
  69. def fix_coolpad_version_3_login_fail_bug(decompile_dir_path):
  70. insert_str_list = [
  71. u'\n\t.locals 0\n\n',
  72. u'\treturn-void\n\n']
  73. for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
  74. if ur'com\yulong\account\auth' in dirpath and u'AuthCodeApiImpl.smali' in filenames:
  75. smali_path = os.path.join(dirpath, u'AuthCodeApiImpl.smali')
  76. with open(smali_path, u'r') as f:
  77. smali_str_arr = f.readlines()
  78. index_str = u'.method private returnAuthError(Lcom/yulong/account/common/info/ErrorInfo;)V'
  79. end_method_str = u'.end method'
  80. insert_str = u''.join(insert_str_list)
  81. on_create_index = 0
  82. insert_index = 0
  83. for line in smali_str_arr:
  84. if index_str in line:
  85. on_create_index = smali_str_arr.index(line)
  86. print u'on_create_index', on_create_index, line
  87. break
  88. for index, value in enumerate(smali_str_arr):
  89. if index > on_create_index and end_method_str in value:
  90. insert_index = index
  91. print u'insert_index', index
  92. break
  93. print on_create_index, insert_index
  94. del smali_str_arr[on_create_index + 1:insert_index]
  95. smali_str_arr.insert(on_create_index + 1, insert_str)
  96. with open(smali_path, u'w') as f:
  97. f.write(u''.join(smali_str_arr))
  98. break