import file_utils import package_utils_yfsdk import os.path import sys import json import importlib 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('************************************') package(config, config['sdk']) def package(config, sdk): print('use script yfsdk') 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'] # 生成配置文件 createOrUpdateConfigFile(game, sdk, jsonConfig) # 拷贝资源 copyRes(game, sdk, subChannel, config) # 打包 package_utils_yfsdk.packConsole(game, sdk, subChannel) def toBoolean(booleanStr): if type(booleanStr) == bool: return booleanStr if booleanStr == 'true': return True return False 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') print('yfsdk copyRes from--> ' + config['icon']) print('yfsdk copyRes to--> ' + iconPath) 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 #packageWeb()