# coding:utf8
import os
import logging
import re
import glob
import shutil
ANDROID_NS = 'http://schemas.android.com/apk/res/android'
def script_init(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
return
def script(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
return
def script_pre(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
if channel_sdk_info['id'] == "512":
smali_classes2 = os.path.join(extract_dir, "smali_classes2/com/youkia/gamecenter")
smali = os.path.join(extract_dir, "smali/com/youkia/gamecenter")
if os.path.exists(smali_classes2):
# if not os.path.exists(smali):
# os.mkdir(smali)
shutil.copytree(smali_classes2, smali)
shutil.rmtree(smali_classes2)
return
def hideSplash(preDir):
tfile = preDir + "/assets/bin/Data/splash.png"
picDir = os.path.dirname(tfile)
if not os.path.exists(picDir):
os.makedirs(picDir)
shutil.copyfile(os.path.dirname(os.path.abspath(__file__)) + '/FFFFFF-0.png', tfile)
else:
if os.path.isfile(tfile):
shutil.copyfile(os.path.dirname(os.path.abspath(__file__)) + '/FFFFFF-0.png', tfile)
else:
logging.info('game_pack_info: ' + tfile + 'is not exists!')
tfile = preDir + "/res/drawable/youkia_splash.png"
picDir = os.path.dirname(tfile)
if not os.path.exists(picDir):
os.makedirs(picDir)
shutil.copyfile(os.path.dirname(os.path.abspath(__file__)) + '/FFFFFF-0.png', tfile)
else:
if os.path.isfile(tfile):
shutil.copyfile(os.path.dirname(os.path.abspath(__file__)) + '/FFFFFF-0.png', tfile)
else:
logging.info('game_pack_info: ' + tfile + 'is not exists!')
tfile = preDir + "/res/values/styles.xml"
if os.path.isfile(tfile):
with open(tfile, 'r+') as f:
cont = f.read()
cont = cont.replace('- @drawable/youkia_splash
'
, '- @color/transparent
')
f.truncate(len(cont))
f.seek(0)
f.write(cont)
f.close()
else:
logging.info('game_pack_info: ' + tfile + 'is not exists!')
return
def intoFirstLine(target, repl, cont, superclass):
# srcStr = "onBackPressed"
# regexp = '.method (?:public|protected) +?'+target+"\([^.]+?\.locals +[0-9]{1,2}"
regexp = '.method (?:public|protected) +?' + target + "\([^.]+?\.locals +([0-9]{1,2})"
# print(regexp)
reObj = re.compile(regexp)
matchO = reObj.search(cont)
if matchO:
# print(matchO.group(0))
methodHead = matchO.group(0)
if matchO.group(1) == "0":
methodHead = re.sub("locals +0", "locals 1", methodHead)
repl = methodHead + r'\n\n ' + repl + r'\n\n'
cont = reObj.sub(repl, cont)
else:
# do call .super method
isuper = "invoke-super {p0}, " + superclass + "->" + target + "()V"
cont += "\n\n.method protected " + target + "()V\n .locals 0\n\n " + repl + "\n\n " + isuper + "\n\n return-void\n.end method"
return cont
def fixLifecycleMethod(preDir):
for tfile in glob.glob(preDir + "/" + "smali*/com/youkia/gamecenter/GameCenterActivity.smali"):
if os.path.isfile(tfile):
with open(tfile, 'r+') as f:
cont = f.read()
changes = {
"onPause": "invoke-static {}, Lcom/qihoo/gamecenter/sdk/matrix/Matrix;->onPause()V",
"onResume": "invoke-static {}, Lcom/qihoo/gamecenter/sdk/matrix/Matrix;->onResume()V",
"onDestroy": "invoke-static {p0}, Lcom/qihoo/gamecenter/sdk/matrix/Matrix;->destroy(Landroid/content/Context;)V",
"onStop": "invoke-static {}, Lcom/qihoo/gamecenter/sdk/matrix/Matrix;->onStop()V"
}
mas = re.search('^.super L([^;]*);?', cont, re.MULTILINE)
superclass = ""
if mas:
superclass = 'L' + mas.group(1) + ';'
for k, v in changes.iteritems():
cont = intoFirstLine(k, v, cont, superclass)
f.seek(0)
f.truncate(len(cont))
f.write(cont)
f.close()
if __name__ == '__main__':
script_pre("/tmp/ss", "E:/apk/youhua", {"id": "323"}, "", "")
# hideSplash("/mnt/share/yanghuang/python_test/cr")