import file_utils import package_utils import package_web_record import package_web_shanshen import package_web_yfsdk import os.path import sys import json import importlib sdkMapping = { 'ysdk':'jm_ysdk', 'ziyun': { 'default': 'jm_zy', 'ysdk': 'jm_zy_ysdk', }, 'xunqu':{ 'default':'jm_xq', 'xiaomi':'jm_xq_mi', 'jrtt':'jm_xq_jrtt' }, 'jingqi':'jm_jq', 'qytx':{ 'default':'jm_qytx', 'cangyu':'jm_qytx2', 'cangyu_new':'jm_cangyu' }, 'jmsdk':'jm', 'oppo':'jm_oppo', 'quick':'jm_quick', 'beiyu':'jm_beiyu', 'yijie':'jm_yijie', 'gzjysdk':'gzjysdk', 'record':'record', 'float':'float', 'yfsdk':'yfsdk' } scriptMapping = { 'jm_xq_mi':'jm_xq', 'jm_xq_jrtt':'jm_xq', 'jm_qytx2':'jm_qytx', 'jm_cangyu':'jm_qytx' } newSdk = ["shanshen", "gzjysdk"] recordSdk = ["record", "float"] yanfaSdk = ["yfsdk"] #研发sdk打包 def packageWeb(): if len(sys.argv) < 2: print('argument is missing') return 1 # 打包配置的路径 packageConfig = sys.argv[1] jsonText = file_utils.readFile(packageConfig) config = json.loads(jsonText) print('*************config*****************') print(jsonText) print('************************************') sdk = getMappingSdk(config) if sdk in recordSdk: package_web_record.package(config, sdk) elif sdk in newSdk: package_web_shanshen.package(config, sdk) elif sdk in yanfaSdk: package_web_yfsdk.package(config, sdk) else: package(config, sdk) def package(config, sdk): print('use script 1st') jsonConfig = {} game = config['app'] subChannel = None if 'subChannel' in config: subChannel = config['subChannel'] jsonConfig['subChannel'] = config['subChannel'] # 必须参数 jsonConfig['packageName'] = config['packageName'] jsonConfig['name'] = config['name'] # 可选参数 if 'outName' in config: jsonConfig['outName'] = config['outName'] if 'outPath' in config: jsonConfig['outPath'] = config['outPath'] if 'changeIcon' in config: jsonConfig['changeIcon'] = toBoolean(config['changeIcon']) if 'addLauncher' in config: jsonConfig['addLauncher'] = toBoolean(config['addLauncher']) if 'versionCode' in config: jsonConfig['versionCode'] = config['versionCode'] if 'versionName' in config: jsonConfig['versionName'] = config['versionName'] if 'targetSdkVersion' in config: jsonConfig['targetSdkVersion'] = config['targetSdkVersion'] if 'v2disable' in config: jsonConfig['v2disable'] = toBoolean(config['v2disable']) if 'aapt2disable' in config: jsonConfig['aapt2disable'] = toBoolean(config['aapt2disable']) # sdk相关参数 if 'properties' in config: jsonConfig['properties'] = config['properties'] jsonConfig['properties']['isDebugMode'] = 'false' jsonConfig['logSdk'] = ['jrtt', 'gdt'] #广点通参数 if 'gdt_params' in config: gdt = { 'gdt':config['gdt_params']} if 'configData' in jsonConfig: configData = jsonConfig['configData'] configData['channel_sdk_list'] = gdt else: jsonConfig['configData'] = { 'channel_sdk_list':gdt } # 获取sdk相关配置 getSdkConfig(sdk, jsonConfig, config) # 生成配置文件 createOrUpdateConfigFile(game, sdk, jsonConfig) # 拷贝资源 copyRes(game, sdk, subChannel, config) # 打包 package_utils.packConsole(game, sdk, subChannel) def toBoolean(booleanStr): if type(booleanStr) == bool: return booleanStr if booleanStr == 'true': return True return False def getSdkConfig(sdk, jsonConfig, config): scriptPath = os.path.join(file_utils.getCurrentPath(), 'sdk_script') sdkScript = getScriptMapping(sdk) targetScript = os.path.join(scriptPath, '%s.py' % sdkScript) if not os.path.exists(targetScript): print('%s no exists' % targetScript) return 0 print('sdk_script -- > %s' % targetScript) sys.path.append(scriptPath) module = importlib.import_module(sdkScript)# 动态导入相应模块 module.getSdkConfig(jsonConfig, config)# 执行脚本功能 sys.path.remove(scriptPath) def createOrUpdateConfigFile(game, sdk, jsonConfig): ''' 更新配置文件 ''' if 'subChannel' not in jsonConfig: return 0 print('createOrUpdateConfigFile ...') channelPath = file_utils.getChannelPath(game, sdk) configPath = os.path.join(channelPath, 'config.json') #configPath = os.path.join(file_utils.getCurrentPath(), 'test', 'test.json') if os.path.exists(configPath): # 更新数据 jsonText = file_utils.readFile(configPath) config = json.loads(jsonText) count = 0 if type(config) == list: for item in config: if item['subChannel'] == jsonConfig['subChannel']: print('find same config ...') del config[count] break count += 1 config.append(jsonConfig) createConfigFile(config, configPath) elif type(config) == dict: if config['subChannel'] == jsonConfig['subChannel']: print('find same config ...') createConfigFile(jsonConfig, configPath) else: print('add a new config ...') config = [config, jsonConfig] createConfigFile(config, configPath) else: print('create a new config ...') createConfigFile([jsonConfig], configPath) def createConfigFile(jsonConfig, configPath): ''' 创建配置文件 ''' jsonStr = json.dumps(jsonConfig, ensure_ascii=False) print('*************out config*************') print(jsonStr) print('************************************') file_utils.createFile(configPath, jsonStr) def copyRes(game, sdk, subChannel, config): ''' 拷贝资源 ''' if subChannel is None: return 0 channelPath = file_utils.getChannelPath(game, sdk) subChannelPath = os.path.join(channelPath, subChannel) if 'icon' in config and os.path.exists(config['icon']): mipmapSupport = ['mipmap-xhdpi', 'mipmap-xxhdpi', 'mipmap-xxxhdpi'] for mipmap in mipmapSupport: iconPath = os.path.join(subChannelPath, 'icon', mipmap, 'common_sdk_icon.png') file_utils.copyFile(config['icon'], iconPath) '''if 'switchIcon' in config and os.path.exists(config['switchIcon']): mipmapSupport = ['mipmap-xhdpi', 'mipmap-xxhdpi', 'mipmap-xxxhdpi'] for mipmap in mipmapSupport: iconPath = os.path.join(subChannelPath, 'icon', mipmap, 'common_sdk_icon2.png') file_utils.copyFile(config['switchIcon'], iconPath)''' if 'splash' in config and os.path.exists(config['splash']): splashPath = os.path.join(subChannelPath, 'splash', 'drawable-hdpi', 'common_sdk_launcher_bg.jpg') file_utils.copyFile(config['splash'], splashPath) if 'copyList' in config: for item in config['copyList']: if item['toFile'] == '': continue if not os.path.exists(item['fromFile']): continue toFile = item['toFile'] if toFile[:3] == 'res': toFile = 'image' + toFile[3:] resPath = getPackagePath(subChannelPath, toFile) file_utils.copyFile(item['fromFile'], resPath) if 'package' in config and os.path.exists(config['package']): newGameApk = config['package'] gameApk = file_utils.getFullGameApk(game) file_utils.copyFile(newGameApk, gameApk) def getPackagePath(basePath, packageName): ''' 包名对应的目录 ''' packageNameSplit = packageName.replace('\\', '/').split('/') newPath = basePath for item in packageNameSplit: newPath = os.path.join(newPath, item) return newPath def getMappingSdk(config): sdk = config['sdk'] mapping = sdk if sdk in sdkMapping: mapping = sdkMapping[sdk] else: return 'jm_' + sdk if type(mapping) == dict: sdkConfig = config[sdk] if 'SUB_CHANNEL' in sdkConfig and sdkConfig['SUB_CHANNEL'] != '': subChannel = sdkConfig['SUB_CHANNEL'] else: subChannel = 'default' return mapping[subChannel] else: return mapping def getScriptMapping(sdk): if sdk in scriptMapping: return scriptMapping[sdk] return sdk packageWeb()