import file_utils import os from print_log import printlog from xml.etree import ElementTree as ET from xml.etree.ElementTree import SubElement androidNS = 'http://schemas.android.com/apk/res/android' scheme = '{' + androidNS + '}scheme' name_key = '{' + androidNS + '}name' def HuaweiReplace(prj_path, key, value): if key == 'agconnect-services.json': printlog('replace huawei agconnect-services.json') huawei_sdk_config_path = os.path.join(prj_path, 'assets', key) file_utils.copy_file(value, huawei_sdk_config_path) pass def YingYongBaoReplace(prj_path, key, value): if key == "IS_SAND_BOX": ysdk_sand_url = "https://ysdktest.qq.com" ysdk_online_url = "https://ysdk.qq.com" if value == "1": ysdk_url = ysdk_sand_url else: ysdk_url = ysdk_online_url file_utils.replace_assets_param("%s/assets/ysdkconf.ini" % prj_path, "YSDK_URL", ysdk_url) return if key == "QQ_APP_ID" or key == "WX_APP_ID": manifest = os.path.join(prj_path, 'AndroidManifest.xml') ysdk_conf_path = os.path.join(prj_path, 'assets', 'ysdkconf.ini') ET.register_namespace('android', androidNS) tree = ET.parse(manifest) root = tree.getroot() appNode = root.find('application') if appNode is None: return 1 metaNodeList = appNode.findall('meta-data') if metaNodeList is None: return 1 activityNodeList = appNode.findall('activity') if activityNodeList is None: return 1 for activityNode in activityNodeList: activityName = activityNode.get(name_key) if activityName == 'com.tencent.tauth.AuthActivity' and key == "QQ_APP_ID": intentFilters = activityNode.findall('intent-filter') if intentFilters is not None and len(intentFilters) > 0: for intentNode in intentFilters: dataNode = intentNode.find('data') intentNode.remove(dataNode) dataNode = SubElement(intentNode, 'data') dataNode.set(scheme, 'tencent' + value) printlog("path ysdkconfig.ini:%s" % ysdk_conf_path) file_utils.replace_assets_param(ysdk_conf_path, key, value) file_utils.replace_assets_param(ysdk_conf_path, 'OFFER_ID', value) for metaNode in metaNodeList: name = metaNode.get(key) if name == 'MAIN_ACTIVITY': metaNode.set(value, 'com.ftt.hwal2.gl.cn.chinamain.ChinaMainActivity') break if activityName == 'com.tencent.ysdk.module.user.impl.freelogin.FreeLoginInfoActivity'\ and key == "QQ_APP_ID": intentFilters = activityNode.findall('intent-filter') if intentFilters is not None and len(intentFilters) > 0: for intentNode in intentFilters: dataNode = intentNode.find('data') intentNode.remove(dataNode) dataNode = SubElement(intentNode, 'data') dataNode.set(scheme, 'tencentysdk' + value) if activityName == 'com.tencent.ysdk.module.user.impl.freelogin.FreeLoginInfoActivity'\ and key == "WX_APP_ID": intentFilters = activityNode.findall('intent-filter') if intentFilters is not None and len(intentFilters) > 0: for intentNode in intentFilters: dataNode = intentNode.find('data') intentNode.remove(dataNode) dataNode = SubElement(intentNode, 'data') dataNode.set(scheme, 'tencentysdk' + value) if activityName.endswith('WXEntryActivity') and key == "WX_APP_ID": intentFilters = activityNode.findall('intent-filter') if intentFilters is not None and len(intentFilters) > 0: for intentNode in intentFilters: dataNode = intentNode.find('data') intentNode.remove(dataNode) dataNode = SubElement(intentNode, 'data') dataNode.set(scheme, value) file_utils.replace_assets_param(ysdk_conf_path, key, value) tree.write(manifest, 'UTF-8') specialReplace = { "huawei": HuaweiReplace, "yingyongbao": YingYongBaoReplace } def get_special_replace(sdk_name): if sdk_name in specialReplace: return specialReplace[sdk_name] else: return None pass