script.py 3.9 KB

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