Browse Source

Merge branch 'feature'

# Conflicts:
#	.gitignore
#Suyghur 3 years ago
parent
commit
a82713be21
100 changed files with 693 additions and 0 deletions
  1. 14 0
      .gitignore
  2. 221 0
      ReplaceJar&Res.py
  3. BIN
      android_sdk/jmsdk/library_jmsdk/src/main/assets/A3AEECD8.dex
  4. 142 0
      common_utils.py
  5. 122 0
      config_utils.py
  6. BIN
      currentSdk/jm_sdk_20200430.jar
  7. BIN
      currentSdk/jm_sdk_nopay_20200430.jar
  8. BIN
      currentSdk/res/drawable-hdpi/jm_account.png
  9. BIN
      currentSdk/res/drawable-hdpi/jm_account_4.png
  10. BIN
      currentSdk/res/drawable-hdpi/jm_agree.png
  11. BIN
      currentSdk/res/drawable-hdpi/jm_agree_4.png
  12. BIN
      currentSdk/res/drawable-hdpi/jm_agree_on.png
  13. BIN
      currentSdk/res/drawable-hdpi/jm_agree_on_4.png
  14. BIN
      currentSdk/res/drawable-hdpi/jm_auto_logo.png
  15. BIN
      currentSdk/res/drawable-hdpi/jm_back.png
  16. BIN
      currentSdk/res/drawable-hdpi/jm_button_account_4.png
  17. BIN
      currentSdk/res/drawable-hdpi/jm_button_email_5.png
  18. BIN
      currentSdk/res/drawable-hdpi/jm_button_phone_4.png
  19. BIN
      currentSdk/res/drawable-hdpi/jm_cancel.png
  20. BIN
      currentSdk/res/drawable-hdpi/jm_check6.png
  21. BIN
      currentSdk/res/drawable-hdpi/jm_close.png
  22. BIN
      currentSdk/res/drawable-hdpi/jm_close6.png
  23. BIN
      currentSdk/res/drawable-hdpi/jm_code.png
  24. BIN
      currentSdk/res/drawable-hdpi/jm_code_4.png
  25. BIN
      currentSdk/res/drawable-hdpi/jm_cut.png
  26. BIN
      currentSdk/res/drawable-hdpi/jm_email_5.png
  27. BIN
      currentSdk/res/drawable-hdpi/jm_eye_close.png
  28. BIN
      currentSdk/res/drawable-hdpi/jm_eye_close_4.png
  29. BIN
      currentSdk/res/drawable-hdpi/jm_eye_open.png
  30. BIN
      currentSdk/res/drawable-hdpi/jm_eye_open_4.png
  31. BIN
      currentSdk/res/drawable-hdpi/jm_float.png
  32. BIN
      currentSdk/res/drawable-hdpi/jm_float_3.png
  33. BIN
      currentSdk/res/drawable-hdpi/jm_float_4.png
  34. BIN
      currentSdk/res/drawable-hdpi/jm_float_gift.png
  35. BIN
      currentSdk/res/drawable-hdpi/jm_float_gift_4.png
  36. BIN
      currentSdk/res/drawable-hdpi/jm_float_gift_red.png
  37. BIN
      currentSdk/res/drawable-hdpi/jm_float_move.png
  38. BIN
      currentSdk/res/drawable-hdpi/jm_float_move_3.png
  39. BIN
      currentSdk/res/drawable-hdpi/jm_float_move_new.png
  40. BIN
      currentSdk/res/drawable-hdpi/jm_float_move_red.png
  41. BIN
      currentSdk/res/drawable-hdpi/jm_float_new.png
  42. BIN
      currentSdk/res/drawable-hdpi/jm_float_on.png
  43. BIN
      currentSdk/res/drawable-hdpi/jm_float_on_3.png
  44. BIN
      currentSdk/res/drawable-hdpi/jm_float_on_4.png
  45. BIN
      currentSdk/res/drawable-hdpi/jm_float_on_new.png
  46. BIN
      currentSdk/res/drawable-hdpi/jm_float_on_red.png
  47. BIN
      currentSdk/res/drawable-hdpi/jm_float_red.png
  48. BIN
      currentSdk/res/drawable-hdpi/jm_float_service.png
  49. BIN
      currentSdk/res/drawable-hdpi/jm_float_service_4.png
  50. BIN
      currentSdk/res/drawable-hdpi/jm_float_service_red.png
  51. BIN
      currentSdk/res/drawable-hdpi/jm_float_user.png
  52. BIN
      currentSdk/res/drawable-hdpi/jm_float_user_4.png
  53. BIN
      currentSdk/res/drawable-hdpi/jm_float_user_red.png
  54. BIN
      currentSdk/res/drawable-hdpi/jm_gift.png
  55. BIN
      currentSdk/res/drawable-hdpi/jm_interval.png
  56. BIN
      currentSdk/res/drawable-hdpi/jm_interval_red.png
  57. BIN
      currentSdk/res/drawable-hdpi/jm_iphone.png
  58. BIN
      currentSdk/res/drawable-hdpi/jm_kefu.png
  59. BIN
      currentSdk/res/drawable-hdpi/jm_kefu6.png
  60. BIN
      currentSdk/res/drawable-hdpi/jm_kefu_4.png
  61. BIN
      currentSdk/res/drawable-hdpi/jm_kefu_new.png
  62. BIN
      currentSdk/res/drawable-hdpi/jm_login_bg.png
  63. BIN
      currentSdk/res/drawable-hdpi/jm_logo.png
  64. BIN
      currentSdk/res/drawable-hdpi/jm_logo_3.png
  65. BIN
      currentSdk/res/drawable-hdpi/jm_logo_4.png
  66. BIN
      currentSdk/res/drawable-hdpi/jm_logo_new.png
  67. BIN
      currentSdk/res/drawable-hdpi/jm_password.png
  68. BIN
      currentSdk/res/drawable-hdpi/jm_password_4.png
  69. BIN
      currentSdk/res/drawable-hdpi/jm_phone.png
  70. BIN
      currentSdk/res/drawable-hdpi/jm_phone_4.png
  71. BIN
      currentSdk/res/drawable-hdpi/jm_protocol6.png
  72. BIN
      currentSdk/res/drawable-hdpi/jm_pwd.png
  73. BIN
      currentSdk/res/drawable-hdpi/jm_toast.png
  74. BIN
      currentSdk/res/drawable-hdpi/jm_unckeck6.png
  75. BIN
      currentSdk/res/drawable-hdpi/jm_urpulldown.png
  76. BIN
      currentSdk/res/drawable-hdpi/jm_urpulldown_new.png
  77. BIN
      currentSdk/res/drawable-hdpi/jm_urpullup_new.png
  78. BIN
      currentSdk/res/drawable-hdpi/jm_user.png
  79. BIN
      currentSdk/res/drawable-hdpi/jm_userl.png
  80. BIN
      currentSdk/res/drawable-hdpi/jmloading_red.gif
  81. 9 0
      currentSdk/res/drawable/jm_agree_button_4.xml
  82. 9 0
      currentSdk/res/drawable/jm_agree_button_6.xml
  83. 5 0
      currentSdk/res/drawable/jm_auto_login_bg_4.xml
  84. 33 0
      currentSdk/res/drawable/jm_backlogin_btn.xml
  85. 21 0
      currentSdk/res/drawable/jm_blues_codebtn_style.xml
  86. 21 0
      currentSdk/res/drawable/jm_blues_codebtn_style_new.xml
  87. 5 0
      currentSdk/res/drawable/jm_button_cancel_4.xml
  88. 5 0
      currentSdk/res/drawable/jm_button_getcode_4.xml
  89. 5 0
      currentSdk/res/drawable/jm_button_getcode_6.xml
  90. 5 0
      currentSdk/res/drawable/jm_button_login_4.xml
  91. 5 0
      currentSdk/res/drawable/jm_button_nextstep_6.xml
  92. 5 0
      currentSdk/res/drawable/jm_button_register_4.xml
  93. 5 0
      currentSdk/res/drawable/jm_button_setpass_4.xml
  94. 33 0
      currentSdk/res/drawable/jm_cut_btn.xml
  95. 5 0
      currentSdk/res/drawable/jm_dialog_ios_bg.xml
  96. 5 0
      currentSdk/res/drawable/jm_exit_dialog_bg.xml
  97. 4 0
      currentSdk/res/drawable/jm_green_codebtn_style.xml
  98. 4 0
      currentSdk/res/drawable/jm_green_light_codebtn_style.xml
  99. 5 0
      currentSdk/res/drawable/jm_input_bg.xml
  100. 5 0
      currentSdk/res/drawable/jm_input_layout_bg_4.xml

+ 14 - 0
.gitignore

@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 # ---> Python
 # Byte-compiled / optimized / DLL files
 __pycache__/
@@ -58,3 +59,16 @@ docs/_build/
 # PyBuilder
 target/
 
+/game
+/gen
+/target
+/test
+/test.py
+/.idea
+*/__pycache__
+.DS_Store
+__pycache__
+/python
+/android_sdk
+/apks
+.svn

+ 221 - 0
ReplaceJar&Res.py

@@ -0,0 +1,221 @@
+#! /usr/bin/python
+# -*- coding: UTF-8 -*-
+
+# coding: utf-8
+
+import os,sys
+import random
+import string
+import re
+import time
+import json
+import shutil
+import hashlib
+import time
+import argparse
+import file_utils
+
+import sys
+
+script_path = os.path.split(os.path.realpath(sys.argv[0]))[0]
+currentSdkpath = script_path + '/currentSdk'
+sdkpath = script_path + '/sdk'
+
+
+ignore_path_text = [".a", ".storyboard", ".py",".framework",".DS_Store",".xcuserstate",".jpg",".png"]
+
+ignore_sdk = ['yfsdk']
+
+keyFile = 'zooKeys.json'
+
+
+
+
+def replaceJarNameInFile(full_path, new_text, old_text, tag):
+    with open(full_path, "r") as fileObj:
+        all_text = fileObj.read()
+        fileObj.close()
+    if old_text:
+        oldjar = "%s_%s.jar" % (tag, old_text)
+        newjar = "%s_%s.jar" % (tag, new_text)
+        all_text = all_text.replace(oldjar, newjar)
+        print ("\t替换: %s -> %s" % (oldjar, newjar))
+        with open(full_path, "w") as fileObj:
+            fileObj.write(all_text)
+            fileObj.close()
+    else:
+        print ('cant not find old text')
+
+
+
+def getoldJarDate(full_path):
+    with open(full_path, "r") as fileObj:
+        all_text = fileObj.read()
+        fileObj.close()
+        # 提取jar包日期
+    old_text = (re.findall(r'jm_sdk_([^.jar]+)', all_text)[0])
+    return old_text
+
+def getoldNopayJarDate(full_path):
+    with open(full_path, "r") as fileObj:
+        all_text = fileObj.read()
+        fileObj.close()
+        # 提取jar包日期
+    if all_text.find("jm_sdk_nopay") > -1:
+        old_text = (re.findall(r'jm_sdk_nopay_([^.jar]+)', all_text)[0])
+        return old_text
+    return ""
+
+def replaceNopayJar():
+    global  sdkpath
+    global  currentSdkpath
+    print ('start replace jar ...')
+    print (sdkpath)
+    jarName = ''
+    for parent, folders, files in os.walk(currentSdkpath):
+        for file in files:
+            if file.find(".jar") > -1 and file.find("nopay") > -1:
+                jarName = file
+                print('jarName -->'+ jarName)
+    fullJarPath = os.path.join(currentSdkpath,jarName)
+    newDate = (re.findall(r'jm_sdk_nopay_([^.jar]+)', jarName)[0])
+
+    #修改config字段 及替换Jar包
+    list = os.listdir(sdkpath)
+    for l in list:
+        if l in ignore_sdk:
+            continue
+        full_l_path = os.path.join(sdkpath,l)
+        full_lib_path = os.path.join(full_l_path,'libs')
+        if os.path.isdir(full_l_path):
+            configPath = os.path.join(full_l_path,'libs/config.json')
+            configPath = os.path.normcase(configPath)
+            if os.path.exists(configPath):
+                print(configPath)
+                oldDate = getoldNopayJarDate(configPath)
+                if oldDate == "":
+                    continue
+                # 修改config字段
+                replaceJarNameInFile(configPath,newDate,oldDate,"jm_sdk_nopay")
+                oldJarPath = '%s/jm_sdk_nopay_%s.jar' % (full_lib_path,oldDate)
+                #删除旧文件
+                if os.path.exists(oldJarPath):
+                    print ('delete ---> %s' % oldJarPath)
+                    try:
+                        os.remove(os.path.normcase(oldJarPath))
+                    except Exception as e:
+                        print (e)
+                    else:
+                        print("File is deleted successfully")
+                newJarPath = '%s/jm_sdk_nopay_%s.jar' % (full_lib_path,newDate)
+                print('复制: %s ---> %s' % (fullJarPath,newJarPath))
+                shutil.copyfile(fullJarPath, newJarPath)  # 复制文件
+
+                print('-------------------------')
+
+    print ("\nfinished replace jar")
+
+
+
+######修改config字段 及替换Jar包
+def replaceJar():
+    global  sdkpath
+    global  currentSdkpath
+    print ('start replace jar ...')
+    print (sdkpath)
+    jarName = ''
+    for parent, folders, files in os.walk(currentSdkpath):
+        for file in files:
+            if file.find(".jar") > -1 and file.find("nopay") < 1:
+                jarName = file
+                print('jarName -->'+ jarName)
+    fullJarPath = os.path.join(currentSdkpath,jarName)
+    newDate = (re.findall(r'jm_sdk_([^.jar]+)', jarName)[0])
+
+    #修改config字段 及替换Jar包
+    list = os.listdir(sdkpath)
+    for l in list:
+        if l in ignore_sdk:
+            continue
+        full_l_path = os.path.join(sdkpath,l)
+        full_lib_path = os.path.join(full_l_path,'libs')
+        if os.path.isdir(full_l_path):
+            configPath = os.path.join(full_l_path,'libs/config.json')
+            configPath = os.path.normcase(configPath)
+            if os.path.exists(configPath):
+                print(configPath)
+                oldDate = getoldJarDate(configPath)
+                # 修改config字段
+                replaceJarNameInFile(configPath,newDate,oldDate,"jm_sdk")
+                oldJarPath = '%s/jm_sdk_%s.jar' % (full_lib_path,oldDate)
+                #删除旧文件
+                if os.path.exists(oldJarPath):
+                    print ('delete ---> %s' % oldJarPath)
+                    try:
+                        os.remove(os.path.normcase(oldJarPath))
+                    except Exception as e:
+                        print (e)
+                    else:
+                        print("File is deleted successfully")
+                newJarPath = '%s/jm_sdk_%s.jar' % (full_lib_path,newDate)
+                print('复制: %s ---> %s' % (fullJarPath,newJarPath))
+                shutil.copyfile(fullJarPath, newJarPath)  # 复制文件
+
+                print('-------------------------')
+
+    print ("\nfinished replace jar")
+
+
+######替换Res
+def replaceRes():
+    global  sdkpath
+    global  currentSdkpath
+    print ('start replace jar ...')
+    resPath = os.path.join(currentSdkpath,"res")
+    #print (resPath)
+    list = os.listdir(sdkpath)
+    for l in list:
+        if l.find("jm") > -1:
+            des_res_path = os.path.join(sdkpath,l,"res")
+            print (des_res_path)
+            file_utils.copy_dir(resPath, des_res_path)
+
+    #修改config字段 及替换Jar包
+    # for l in list:
+    #     full_l_path = os.path.join(sdkpath,l)
+    #     full_lib_path = os.path.join(full_l_path,'libs')
+    #     if os.path.isdir(full_l_path):
+    #         configPath = os.path.join(full_l_path,'libs/config.json')
+    #         configPath = os.path.normcase(configPath)
+    #         if os.path.exists(configPath):
+    #             print(configPath)
+    #             oldDate = getoldJarDate(configPath)
+    #             # 修改config字段
+    #             replaceJarNameInFile(configPath,newDate,oldDate)
+    #             oldJarPath = '%s/jm_sdk_%s.jar' % (full_lib_path,oldDate)
+    #             #删除旧文件
+    #             if os.path.exists(oldJarPath):
+    #                 print ('delete ---> %s' % oldJarPath)
+    #                 try:
+    #                     os.remove(os.path.normcase(oldJarPath))
+    #                 except Exception as e:
+    #                     print (e)
+    #                 else:
+    #                     print("File is deleted successfully")
+    #             newJarPath = '%s/jm_sdk_%s.jar' % (full_lib_path,newDate)
+    #             print('复制: %s ---> %s' % (fullJarPath,newJarPath))
+    #             shutil.copyfile(fullJarPath, newJarPath)  # 复制文件
+    #
+    #             print('-------------------------')
+
+    print ("\nfinished replace res")
+
+def main():
+    #replaceJar()
+    replaceNopayJar()
+	#####修改了资源文件,要替换#####
+    #replaceRes()
+
+
+if __name__ == "__main__":
+    main()

BIN
android_sdk/jmsdk/library_jmsdk/src/main/assets/A3AEECD8.dex


+ 142 - 0
common_utils.py

@@ -0,0 +1,142 @@
+import os.path
+import random
+
+import file_utils
+import xml_utils
+
+
+def change_application(game, sdk, sub_channel, config, target_application):
+    """
+    修改最顶级的application
+    """
+    decompile_path = file_utils.get_decompile_path(game, sdk, sub_channel, config['cache'])
+    manifest = os.path.join(decompile_path, 'AndroidManifest.xml')
+    application = xml_utils.get_application_attr(manifest, 'name')
+
+    if application is None:
+        xml_utils.change_application_attr(manifest, 'name', target_application)
+
+        print('change add application %s' % target_application)
+    else:
+        smaliPath = os.path.join(decompile_path, 'smali')
+        super_application = find_super_application(smaliPath, application)
+        print('super application is %s' % super_application)
+
+        if super_application == target_application:
+            return
+        change_super_application(smaliPath, super_application, target_application.replace('.', '/'))
+
+        print('change super application %s to %s' % (super_application, target_application))
+
+
+def change_top_application(game, sdk, sub_channel, config, target_application):
+    """
+    修改manifest清单下的application入口。
+    PS:例八门渠道,因游戏app继承到渠道app过程中有停住,未进入到渠道app初始化,故改用渠道app为入口,继承原游戏app确保他们的功能正常运行
+    """
+
+    decompliePath = file_utils.get_decompile_path(game, sdk, sub_channel, config['cache'])
+    manifest = os.path.join(decompliePath, 'AndroidManifest.xml')
+    gameApplication = xml_utils.get_application_attr(manifest, 'name')
+    print("游戏application" + gameApplication)
+    xml_utils.change_application_attr(manifest, 'name', target_application)
+    # if application is None:
+    #     xml_utils.changeApplicationAttr(manifest, 'name', targetApplication)
+    #
+    #     print('change add application %s' % targetApplication)
+    # else:
+    smaliPath = os.path.join(decompliePath, 'smali')
+    superApplication = find_super_application(smaliPath, target_application)
+    print('寻找入口application。super application is %s' % superApplication)
+    change_super_application(smaliPath, superApplication, gameApplication.replace('.', '/'))
+
+    print('change super application %s to %s' % (target_application, gameApplication))
+
+
+def find_super_application(base_path, class_name):
+    """
+    获取最顶级的application
+    """
+    tagSuper = '.super Landroid/app/Application;'
+    tag = '.super L'
+    applicationFile = file_utils.get_package_path(base_path, class_name) + '.smali'
+
+    topClassName = None
+    superClass = None
+    with open_file(applicationFile, 'r') as f:
+        line = f.readline()
+
+        while line:
+            if tagSuper in line:
+                topClassName = class_name
+                break
+            elif tag in line:
+                superClass = line[8:-2]
+                superClass = superClass.replace('/', '.')
+                break
+
+            line = f.readline()
+
+    if topClassName is not None:
+        return topClassName
+    elif superClass is not None:
+        return find_super_application(base_path, superClass)
+
+
+def change_super_application(base_path, class_name, target_application):
+    """
+    更改application
+    """
+    applicationFile = file_utils.get_package_path(base_path, class_name) + '.smali'
+
+    # 修改application
+    change_supper_application_smali(applicationFile, target_application)
+
+
+def change_supper_application_smali(file, application):
+    """
+    修改application.smali
+    """
+    contentSpuer = '.super Landroid/app/Application;'
+    constructor = '.method public constructor <init>()V'
+    direct = 'invoke-direct'
+    invokeSuper = 'invoke-super'
+    applicationTag = 'Landroid/app/Application;->'
+    newContent = ''
+
+    with open_file(file, 'r+') as f:
+        line = f.readline()
+        isConstructor = False
+
+        while line:
+            if contentSpuer in line:
+                newContent += '.super L%s;\n' % application
+            elif invokeSuper in line and applicationTag in line:
+                newContent += line.replace('android/app/Application', application)
+            elif isConstructor and direct in line and applicationTag in line:
+                newContent += line.replace('android/app/Application', application)
+                isConstructor = False
+            else:
+                if constructor in line:
+                    isConstructor = True
+                newContent += line
+
+            line = f.readline()
+
+        f.seek(0, 0)
+        # 清空内容
+        f.truncate()
+        f.write(newContent)
+    return 0
+
+
+def get_random_number(size):
+    content = ""
+    for i in range(6):
+        ch = chr(random.randrange(ord('0'), ord('9') + 1))
+        content += ch
+    return content
+
+
+def open_file(file, mode):
+    return file_utils.open_file(file, mode)

+ 122 - 0
config_utils.py

@@ -0,0 +1,122 @@
+import time
+
+logSdkMapping = {
+    'jrtt':'com.jmhy.sdk.statistics.JrttStatistics',
+    'gdt':'com.jmhy.sdk.statistics.GdtStatistics',
+    'ks':'com.jmhy.sdk.statistics.KsStatistics',
+    'uc':'com.jmhy.sdk.statistics.UcStatistics',
+    'bd':'com.jmhy.sdk.statistics.BaiduStatistics'
+}
+
+def checkConfig(config):
+    '''
+    检查配置
+    '''
+    print('check config ...')
+    if type(config) == dict:
+        return checkChannelConfig(config)
+    elif type(config) == list:
+        for itemConfig in config:
+            if not checkChannelConfig(itemConfig):
+                return False
+    return True
+
+def checkChannelConfig(config):
+    if 'name' not in config or 'packageName' not in config:
+        print('name or packageName not exists in config')
+        return False
+
+    if 'subChannel' not in config:
+        print('subChannel not exists in config')
+        return False
+
+    # 默认值
+    if 'changeIcon' not in config:
+        config['changeIcon'] = False
+    if 'switchIcon' not in config:
+        config['switchIcon'] = False
+    if 'addLauncher' not in config:
+        config['addLauncher'] = False
+    if 'splitDex' not in config:
+        config['splitDex'] = True
+    if 'clearCache' not in config:
+        config['clearCache'] = True
+    if 'aapt2disable' not in config:
+        config['aapt2disable'] = False
+    if 'v2disable' not in config:
+        config['v2disable'] = False
+    if 'screenOrientation' not in config:
+        config['screenOrientation'] = 'landscape'
+    if 'outName' not in config:
+        config['outName'] = config['name']
+
+    if 'logSdk' in config:
+        log = config['logSdk']
+        setLog(config, log)
+
+
+
+    return True
+
+def setLog(config, logSdk):
+    clazzList = []
+    for log in logSdk:
+        if log in logSdkMapping:
+            clazzList.append(logSdkMapping[log])
+        
+    configData = None
+    if 'configData' in config:
+        configData = config['configData']
+        configData['jm_log_sdk'] = clazzList
+    else:
+        config['configData'] = {
+            'jm_log_sdk':clazzList
+        }
+
+def replaceArgs(config):
+    '''
+    替换占位符
+    '''
+    if type(config) == dict:
+        replaceItemArgs(config)
+    elif type(config) == list:
+        # 遍历数组
+        for arg in config:
+            replaceItemArgs(arg)
+
+def replaceItemArgs(config):
+    '''
+    替换占位符
+    '''
+    # 遍历字典
+    for arg in config:
+        if type(config[arg]) == dict:
+            replaceArgs(config[arg])
+        elif type(config[arg]) == str:
+            replaceString(config, arg)
+
+def replaceString(config, arg):
+    '''
+    替换占位符
+    '''
+    content = config[arg]
+    if '${DATE}' in content:
+        content = content.replace('${DATE}', getDate())
+
+    config[arg] = content
+
+def getDate():
+    '''
+    获取日期
+    '''
+    return time.strftime("%Y%m%d", time.localtime())
+
+def getTime(seconds):
+    '''
+    获取时间
+    '''
+    time = int(seconds)
+    if time < 60:
+        return str(time) + '秒'
+    else:
+        return str(round(time/60)) + '分' + str(time%60) + '秒'

BIN
currentSdk/jm_sdk_20200430.jar


BIN
currentSdk/jm_sdk_nopay_20200430.jar


BIN
currentSdk/res/drawable-hdpi/jm_account.png


BIN
currentSdk/res/drawable-hdpi/jm_account_4.png


BIN
currentSdk/res/drawable-hdpi/jm_agree.png


BIN
currentSdk/res/drawable-hdpi/jm_agree_4.png


BIN
currentSdk/res/drawable-hdpi/jm_agree_on.png


BIN
currentSdk/res/drawable-hdpi/jm_agree_on_4.png


BIN
currentSdk/res/drawable-hdpi/jm_auto_logo.png


BIN
currentSdk/res/drawable-hdpi/jm_back.png


BIN
currentSdk/res/drawable-hdpi/jm_button_account_4.png


BIN
currentSdk/res/drawable-hdpi/jm_button_email_5.png


BIN
currentSdk/res/drawable-hdpi/jm_button_phone_4.png


BIN
currentSdk/res/drawable-hdpi/jm_cancel.png


BIN
currentSdk/res/drawable-hdpi/jm_check6.png


BIN
currentSdk/res/drawable-hdpi/jm_close.png


BIN
currentSdk/res/drawable-hdpi/jm_close6.png


BIN
currentSdk/res/drawable-hdpi/jm_code.png


BIN
currentSdk/res/drawable-hdpi/jm_code_4.png


BIN
currentSdk/res/drawable-hdpi/jm_cut.png


BIN
currentSdk/res/drawable-hdpi/jm_email_5.png


BIN
currentSdk/res/drawable-hdpi/jm_eye_close.png


BIN
currentSdk/res/drawable-hdpi/jm_eye_close_4.png


BIN
currentSdk/res/drawable-hdpi/jm_eye_open.png


BIN
currentSdk/res/drawable-hdpi/jm_eye_open_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float.png


BIN
currentSdk/res/drawable-hdpi/jm_float_3.png


BIN
currentSdk/res/drawable-hdpi/jm_float_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float_gift.png


BIN
currentSdk/res/drawable-hdpi/jm_float_gift_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float_gift_red.png


BIN
currentSdk/res/drawable-hdpi/jm_float_move.png


BIN
currentSdk/res/drawable-hdpi/jm_float_move_3.png


BIN
currentSdk/res/drawable-hdpi/jm_float_move_new.png


BIN
currentSdk/res/drawable-hdpi/jm_float_move_red.png


BIN
currentSdk/res/drawable-hdpi/jm_float_new.png


BIN
currentSdk/res/drawable-hdpi/jm_float_on.png


BIN
currentSdk/res/drawable-hdpi/jm_float_on_3.png


BIN
currentSdk/res/drawable-hdpi/jm_float_on_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float_on_new.png


BIN
currentSdk/res/drawable-hdpi/jm_float_on_red.png


BIN
currentSdk/res/drawable-hdpi/jm_float_red.png


BIN
currentSdk/res/drawable-hdpi/jm_float_service.png


BIN
currentSdk/res/drawable-hdpi/jm_float_service_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float_service_red.png


BIN
currentSdk/res/drawable-hdpi/jm_float_user.png


BIN
currentSdk/res/drawable-hdpi/jm_float_user_4.png


BIN
currentSdk/res/drawable-hdpi/jm_float_user_red.png


BIN
currentSdk/res/drawable-hdpi/jm_gift.png


BIN
currentSdk/res/drawable-hdpi/jm_interval.png


BIN
currentSdk/res/drawable-hdpi/jm_interval_red.png


BIN
currentSdk/res/drawable-hdpi/jm_iphone.png


BIN
currentSdk/res/drawable-hdpi/jm_kefu.png


BIN
currentSdk/res/drawable-hdpi/jm_kefu6.png


BIN
currentSdk/res/drawable-hdpi/jm_kefu_4.png


BIN
currentSdk/res/drawable-hdpi/jm_kefu_new.png


BIN
currentSdk/res/drawable-hdpi/jm_login_bg.png


BIN
currentSdk/res/drawable-hdpi/jm_logo.png


BIN
currentSdk/res/drawable-hdpi/jm_logo_3.png


BIN
currentSdk/res/drawable-hdpi/jm_logo_4.png


BIN
currentSdk/res/drawable-hdpi/jm_logo_new.png


BIN
currentSdk/res/drawable-hdpi/jm_password.png


BIN
currentSdk/res/drawable-hdpi/jm_password_4.png


BIN
currentSdk/res/drawable-hdpi/jm_phone.png


BIN
currentSdk/res/drawable-hdpi/jm_phone_4.png


BIN
currentSdk/res/drawable-hdpi/jm_protocol6.png


BIN
currentSdk/res/drawable-hdpi/jm_pwd.png


BIN
currentSdk/res/drawable-hdpi/jm_toast.png


BIN
currentSdk/res/drawable-hdpi/jm_unckeck6.png


BIN
currentSdk/res/drawable-hdpi/jm_urpulldown.png


BIN
currentSdk/res/drawable-hdpi/jm_urpulldown_new.png


BIN
currentSdk/res/drawable-hdpi/jm_urpullup_new.png


BIN
currentSdk/res/drawable-hdpi/jm_user.png


BIN
currentSdk/res/drawable-hdpi/jm_userl.png


BIN
currentSdk/res/drawable-hdpi/jmloading_red.gif


+ 9 - 0
currentSdk/res/drawable/jm_agree_button_4.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>   
+<selector xmlns:android="http://schemas.android.com/apk/res/android">   
+    <item   
+    android:state_checked="false"   
+    android:drawable="@drawable/jm_agree_4" />
+    <item   
+    android:state_checked="true"   
+    android:drawable="@drawable/jm_agree_on_4" />
+</selector> 

+ 9 - 0
currentSdk/res/drawable/jm_agree_button_6.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>   
+<selector xmlns:android="http://schemas.android.com/apk/res/android">   
+    <item   
+    android:state_checked="false"   
+    android:drawable="@drawable/jm_unckeck6" />
+    <item   
+    android:state_checked="true"   
+    android:drawable="@drawable/jm_check6" />
+</selector> 

+ 5 - 0
currentSdk/res/drawable/jm_auto_login_bg_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_auto_login_bg_4"/>
+    <corners android:radius="17dp"/>
+</shape>

+ 33 - 0
currentSdk/res/drawable/jm_backlogin_btn.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+<item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+            <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item android:state_focused="true">  <!-- 焦点 -->
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+             <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item > <!-- 无焦点 -->
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+            <gradient android:startColor="#50000000" android:endColor="#50000000" android:angle="270.0" />
+        </shape>
+    </item>
+</selector>

+ 21 - 0
currentSdk/res/drawable/jm_blues_codebtn_style.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" >
+  <item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="15dp" android:topRightRadius="15dp" android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
+            <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item android:state_focused="true">  <!-- 焦点 -->
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="15dp" android:topRightRadius="15dp" android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
+             <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item > <!-- 无焦点 -->
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="15dp" android:topRightRadius="15dp" android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
+            <gradient android:startColor="#2abfff" android:endColor="#2abfff" android:angle="270.0" />
+        </shape>
+    </item>
+</selector>

+ 21 - 0
currentSdk/res/drawable/jm_blues_codebtn_style_new.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" >
+  <item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" />
+            <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item android:state_focused="true">  <!-- 焦点 -->
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" />
+             <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item > <!-- 无焦点 -->
+        <shape android:shape="rectangle">
+            <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" />
+            <gradient android:startColor="#2abfff" android:endColor="#2abfff" android:angle="270.0" />
+        </shape>
+    </item>
+</selector>

+ 5 - 0
currentSdk/res/drawable/jm_button_cancel_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_dialog_line"/>
+    <corners android:radius="17dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_getcode_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jmfont_white"/>
+    <corners android:radius="3dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_getcode_6.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jmbtn6_red"/>
+    <corners android:radius="3dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_login_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_orange"/>
+    <corners android:radius="7dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_nextstep_6.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jmbtn6_red"/>
+    <corners android:radius="5dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_register_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_dialog_line"/>
+    <corners android:radius="7dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_button_setpass_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_orange"/>
+    <corners android:radius="17dp"/>
+</shape>

+ 33 - 0
currentSdk/res/drawable/jm_cut_btn.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+<item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+            <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item android:state_focused="true">  <!-- 焦点 -->
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+             <gradient android:startColor="#d6d6d6" android:endColor="#d6d6d6" android:angle="270.0" />
+        </shape>
+    </item>
+    <item > <!-- 无焦点 -->
+        <shape android:shape="rectangle">
+            <stroke
+                android:width="1dp"
+                android:color="#2abfff" />
+            
+            <corners android:topLeftRadius="25.0dip" android:topRightRadius="25.0dip" android:bottomLeftRadius="25.0dip" android:bottomRightRadius="25.0dip" />
+            <gradient android:startColor="#ffffff" android:endColor="#ffffff" android:angle="270.0" />
+        </shape>
+    </item>
+</selector>

+ 5 - 0
currentSdk/res/drawable/jm_dialog_ios_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jmfont_white"/>
+    <corners android:radius="10dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_exit_dialog_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_exit_dialog_bg"/>
+    <corners android:radius="5dp"/>
+</shape>

+ 4 - 0
currentSdk/res/drawable/jm_green_codebtn_style.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_green"/>
+</shape>

+ 4 - 0
currentSdk/res/drawable/jm_green_light_codebtn_style.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_green_light"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_input_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <stroke android:color="@color/jmfont_blues" android:width="1dp"/>
+    <corners android:radius="5dp"/>
+</shape>

+ 5 - 0
currentSdk/res/drawable/jm_input_layout_bg_4.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
+    <solid android:color="@color/jm_input_layout_bg_4"/>
+    <corners android:radius="7dp"/>
+</shape>

Some files were not shown because too many files changed in this diff