# -*- coding:utf-8 -*- import re import os import stat import shutil import json print(os.path.abspath(__name__)) import sys RD, WD, XD = 4, 2, 1 BNS = [RD, WD, XD] MDS = [ [stat.S_IRUSR, stat.S_IRGRP, stat.S_IROTH], [stat.S_IWUSR, stat.S_IWGRP, stat.S_IWOTH], [stat.S_IXUSR, stat.S_IXGRP, stat.S_IXOTH] ] def chmod(path, mode): if isinstance(mode, int): mode = str(mode) if not re.match("^[0-7]{1,3}$", mode): raise Exception("mode does not conform to ^[0-7]{1,3}$ pattern") mode = "{0:0>3}".format(mode) mode_num = 0 for midx, m in enumerate(mode): for bnidx, bn in enumerate(BNS): if (int(m) & bn) > 0: mode_num += MDS[bnidx][midx] # os.chmod(path, mode_num) # 遍历res下的所有文件 def isFindApk(parent): for i in os.listdir(parent): if i.endswith('.apk'): print('find apk file-===%s' % i) return i; print('no apk file=====') return '' def readChannelfile(filename): try: print(filename) f = open(filename) global channelList except Exception as e: print(e) exit(0) channelList = json.load(f) def backUpManifest(): if os.path.exists('./AndroidManifest.xml'): os.remove('./AndroidManifest.xml') manifestPath = './temp/AndroidManifest.xml' shutil.copyfile(manifestPath, './AndroidManifest.xml') print('manifest info--%s' % manifestPath) def modifyChannel(value): tempXML = '' f = open('./AndroidManifest.xml') for line in f: if line.find('leguChannel') > 0 and easyName != '': if easyNameSuffix == "1": if value < 10: line = '' % (easyName, value) else: line = '' % (easyName, value) else: line = '' % (easyName) elif line.find('owner') > 0 and owner != '': print('owner====%s' % line) line = '' % (owner) elif line.find('package') > 0 and packageId != '': print('package====%s' % line) line = '' % ( packageId) elif line.find('appid') > 0 and appid != '': print('appid====%s' % line) line = '' % (appid) elif line.find('gism_id') > 0 and gism_id != '': print('gism_id====%s' % line) line = '' % (gism_id) elif line.find('gism_name') > 0 and gism_name != '': print('gism_name====%s' % line) line = '' % (gism_name) elif line.find('gism_channel') > 0 and gism_channel != '': print('gism_channel====%s' % line) line = '' % (gism_channel) elif line.find('lg_ad_id') > 0 and lg_ad_id != '': print('lg_ad_id====%s' % line) line = '' % (lg_ad_id) elif line.find('lg_ad_name') > 0 and lg_ad_name != '': print('lg_ad_name====%s' % line) line = '' % (lg_ad_name) elif line.find('gactionId') > 0 and gactionId != '': print('gactionId====%s' % line) line = '' % (gactionId) elif line.find('gappSecretKey') > 0 and gappSecretKey != '': print('gappSecretKey====%s' % line) line = '' % (gappSecretKey) elif line.find('baiduId') > 0 and baiduId != '': print('baiduId====%s' % line) line = '' % (baiduId) elif line.find('baiduSecretKey') > 0 and baiduSecretKey != '': print('baiduSecretKey====%s' % line) line = '' % (baiduSecretKey) elif line.find('lg_reyun_game_appkey') > 0 and lg_reyun_game_appkey != '': print('lg_reyun_game_appkey====%s' % line) line = '' % (lg_reyun_game_appkey) elif line.find('lg_reyun_game_channelId') > 0 and lg_reyun_game_channelId != '': print('lg_reyun_game_channelId====%s' % line) line = '' % (lg_reyun_game_channelId) elif line.find('lg_reyun_io_appkey') > 0 and lg_reyun_io_appkey != '': print('lg_reyun_io_appkey====%s' % line) line = '' % (lg_reyun_io_appkey) elif line.find('lg_reyun_io_channelId') > 0 and lg_reyun_io_channelId != 0: print('lg_reyun_io_channelId====%s' % line) line = '' % (lg_reyun_io_channelId) elif line.find('eventType') > 0 and eventType != '': print('eventType====%s' % line) line = '' % (eventType) tempXML += line f.close() output = open('./temp/AndroidManifest.xml', 'w') output.write(tempXML) output.close() if value < 10: unsignApk = r'./bin/%s_0%d_unsigned.apk' % (easyName, value) # chmod(unsignApk, "777") else: unsignApk = r'./bin/%s_%d_unsigned.apk' % (easyName, value) chmod(unsignApk, "777") cmdPack = r'java -jar apktool.jar b temp -o %s' % (unsignApk) os.system(cmdPack) if value < 10: signedjar = r'./bin/%s_0%d.apk' % (easyName, value) unsignedjar = r'./bin/%s_0%d_unsigned.apk' % (easyName, value) chmod(signedjar, "777") chmod(unsignedjar, "777") else: signedjar = r'./bin/%s_%d.apk' % (easyName, value) unsignedjar = r'./bin/%s_%d_unsigned.apk' % (easyName, value) chmod(signedjar, "777") chmod(unsignedjar, "777") cmd_sign = r'jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore %s -storepass %s -keypass %s -signedjar %s %s %s' % ( keystore, storepass, keypass, signedjar, unsignedjar, alianame) os.system(cmd_sign) os.remove(unsignedjar); channelList = {} # os.system('java -jar apkool.jar empty-framework-dir --force') readChannelfile('channel.json') apkName = "" apkNameSuffix = "0" packageId = "" packageIdSuffix = "0" easyName = "" easyNameSuffix = "0" keystore = '' storepass = '' alianame = '' keypass = '' owner = '' packNum = 0 start = 0 # ----------------------- third qudao start---------------------- appid = '' gism_id = '' gism_name = '' gism_channel = '' lg_ad_id = '' lg_ad_name = '' gactionId = '' gappSecretKey = '' baiduId = '' baiduSecretKey = '' lg_reyun_game_appkey = '' lg_reyun_game_channelId = '' lg_reyun_io_appkey = '' lg_reyun_io_channelId = '' eventType = '' # ----------------------- third qudao end------------------------ print('-------------------- your channel.json values --------------------') # print 'channel.json list: ', channelList if 'apkname' in channelList: print('apkname==%s' % channelList['apkname']) print('apkname value==%s' % channelList['apkname']['value']) print('apkname suffix==%s' % channelList['apkname']['suffix']) apkName = channelList['apkname']['value'] apkNameSuffix = channelList['apkname']['suffix'] else: apkName = isFindApk('./') if 'packageId' in channelList: print('packageId==%s' % channelList['packageId']) print('packageId value==%s' % channelList['packageId']['value']) print('packageId suffix==%s' % channelList['packageId']['suffix']) packageId = channelList['packageId']['value'] packageIdSuffix = channelList['packageId']['suffix'] else: print("no key packageId") if 'leguChannel' in channelList: print('leguchannel==%s' % channelList['leguChannel']) print('leguchannel value==%s' % channelList['leguChannel']['value']) print('leguchannel suffix==%s' % channelList['leguChannel']['suffix']) easyName = channelList['leguChannel']['value'] easyNameSuffix = channelList['leguChannel']['suffix'] else: print("no key leguChannel") if 'keystore' in channelList: print('keystore==%s' % channelList['keystore']) print('keystore filename==%s' % channelList['keystore']['filename']) print('keystore storepass==%s' % channelList['keystore']['storepass']) print('keystore alianame==%s' % channelList['keystore']['alianame']) print('keystore keypass==%s' % channelList['keystore']['keypass']) keystore = channelList['keystore']['filename'] storepass = channelList['keystore']['storepass'] alianame = channelList['keystore']['alianame'] keypass = channelList['keystore']['keypass'] else: print("no key keystore") if 'owner' in channelList: print('owner==%s' % channelList['owner']) print('owner value==%s' % channelList['owner']['value']) owner = channelList['owner']['value'] else: print("no key owner") if 'num' in channelList: print('num==%s' % channelList['num']) print('num value==%s' % channelList['num']['value']) print('num start==%s' % channelList['num']['start']) packNum = int(channelList['num']['value']) + 1 start = int(channelList['num']['start']) else: print("no key num") if 'appid' in channelList: print('appid==%s' % channelList['appid']) print('appid value==%s' % channelList['appid']['value']) gism_id = channelList['appid']['value'] else: print("no key appid") if 'gism_id' in channelList: print('gism_id==%s' % channelList['gism_id']) print('gism_id value==%s' % channelList['gism_id']['value']) gism_id = channelList['gism_id']['value'] else: print("no key gism_id") if 'gism_name' in channelList: print('gism_name==%s' % channelList['gism_name']) print('gism_name value==%s' % channelList['gism_name']['value']) gism_name = channelList['gism_name']['value'] else: print("no key gism_name") if 'gism_channel' in channelList: print('gism_channel==%s' % channelList['gism_channel']) print('gism_channel value==%s' % channelList['gism_channel']['value']) gism_channel = channelList['gism_channel']['value'] else: print("no key gism_channel") if 'lg_ad_id' in channelList: print('lg_ad_id==%s' % channelList['lg_ad_id']) print('lg_ad_id value==%s' % channelList['lg_ad_id']['value']) lg_ad_id = channelList['lg_ad_id']['value'] else: print("no key lg_ad_id") if 'lg_ad_name' in channelList: print('lg_ad_name==%s' % channelList['lg_ad_name']) print('lg_ad_name value==%s' % channelList['lg_ad_name']['value']) lg_ad_name = channelList['lg_ad_name']['value'] else: print("no key lg_ad_name") if 'gactionId' in channelList: print('gactionId==%s' % channelList['gactionId']) print('gactionId value==%s' % channelList['gactionId']['value']) gactionId = channelList['gactionId']['value'] else: print("no key gactionId") if 'gappSecretKey' in channelList: print('gappSecretKey==%s' % channelList['gappSecretKey']) print('gappSecretKey value==%s' % channelList['gappSecretKey']['value']) gism_id = channelList['gappSecretKey']['value'] else: print("no key gappSecretKey") if 'baiduId' in channelList: print('baiduId ==%s' % channelList['baiduId']) print('baiduId value==%s' % channelList['baiduId']['value']) gism_id = channelList['baiduId']['value'] else: print("no key baiduId") if 'baiduSecretKey' in channelList: # print 'baiduSecretKey==', channelList['baiduSecretKey'] # print 'baiduSecretKey value==', channelList['baiduSecretKey']['value'] gism_id = channelList['baiduSecretKey']['value'] else: print("no key baiduSecretKey") if 'lg_reyun_game_appkey' in channelList: # print 'lg_reyun_game_appkey==', channelList['lg_reyun_game_appkey'] # print 'lg_reyun_game_appkey value==', channelList['lg_reyun_game_appkey']['value'] gism_id = channelList['lg_reyun_game_appkey']['value'] else: print("no key lg_reyun_game_appkey") if 'lg_reyun_game_channelId' in channelList: # print 'lg_reyun_game_channelId==', channelList['lg_reyun_game_channelId'] # print 'lg_reyun_game_channelId value==', channelList['lg_reyun_game_channelId']['value'] gism_id = channelList['lg_reyun_game_channelId']['value'] else: print("no key lg_reyun_game_channelId") if 'lg_reyun_io_appkey' in channelList: # print 'lg_reyun_io_appkey==', channelList['lg_reyun_io_appkey'] # print 'lg_reyun_io_appkey value==', channelList['lg_reyun_io_appkey']['value'] gism_id = channelList['lg_reyun_io_appkey']['value'] else: print("no key lg_reyun_io_appkey") if 'lg_reyun_io_channelId' in channelList: # print 'lg_reyun_io_channelId==', channelList['lg_reyun_io_channelId'] # print 'lg_reyun_io_channelId value==', channelList['lg_reyun_io_channelId']['value'] gism_id = channelList['lg_reyun_io_channelId']['value'] else: print("no key lg_reyun_io_channelId") if 'eventType' in channelList: # print 'eventType==', channelList['eventType'] # print 'eventType value==', channelList['eventType']['value'] gism_id = channelList['eventType']['value'] else: print("no key eventType") output_apk_dir = "./bin" if os.path.exists(output_apk_dir): shutil.rmtree(output_apk_dir) print('apkname--==%s' % apkName) if apkName == '': print('apkName no, stop ...') sys.exit() else: cmdExtract = r'java -jar apktool.jar d -f -s %s -o temp' % (apkName) os.system(cmdExtract) backUpManifest() for channel in range(start, packNum): modifyChannel(channel) if os.path.exists('./temp'): shutil.rmtree('./temp') if os.path.exists('./AndroidManifest.xml'): os.remove('./AndroidManifest.xml') print('Done')