Commit 3204b5e9 by sikang

delete old script

parent 2b905422
cd ..
echo -n "commit message: "
read message
git add .
git commit -m "${message}"
git push origin master
\ No newline at end of file
cd ../../
. gradle.properties
basepath=$(cd `dirname $0`; pwd)
project_name=${basepath##*/}
cd ../hooker/
LC_CTYPE=C && LANG=C && sed -i "" "s#^app_id=.*#app_id=${app_id}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signing_keyAlias=.*#signing_keyAlias=${signing_keyAlias}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signing_certificate=.*#signing_certificate=../../${project_name}/jks/${signing_keyAlias}.keystore#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signging_certificatePassword=.*#signging_certificatePassword=${signging_certificatePassword}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signging_storePassword=.*#signging_storePassword=${signging_storePassword}#g" gradle.properties
./gradlew clean
./gradlew assembleRelease
now_time=$(date "+%Y-%m-%d %H_%M_%S")
cp app/build/outputs/apk/app/release/app-app-release.apk /Users/connor/Documents/apks/"${project_name}"_tool_"${now_time}".apk
\ No newline at end of file
cd ..
if [ ${1} = 'motion' ];then
./sdk_manager.py open MOTION
./sdk_manager.py close ADVANCE
./sdk_manager.py close YITU
elif [ ${1} = 'advance' ];then
./sdk_manager.py open ADVANCE
./sdk_manager.py close MOTION
./sdk_manager.py close YITU
else
./sdk_manager.py open YITU
./sdk_manager.py close MOTION
./sdk_manager.py close ADVANCE
fi
\ No newline at end of file
echo "1、同盾列表添加最少选择数量"
echo "2、gradle.properties 添加同盾开关"
echo "3、注释 app module中所有权限"
echo "4、替换引用到的同盾R资源"
echo "5、将BuildConfig配置移动到gradle.properties"
echo "6、依图升级,实现新抽象"
echo "7、添加客户等级"
echo -n "请输入指令编号:"
read commod
if (($commod == '1'))
then
chmod a+x thirdpart_list.py
./thirdpart_list.py
elif (($commod == '2'))
then
chmod a+x update_properties.py
./update_properties.py 'td_mode=close'
elif (($commod == '3'))
then
chmod a+x remove_permission.py
./remove_permission.py
elif (($commod == '4'))
then
chmod a+x remove_td_res.py
./remove_td_res.py
elif (($commod == '5'))
then
chmod a+x move_buildconfig.py
./move_buildconfig.py
elif (($commod == '6'))
then
chmod a+x update_yitu.py
./update_yitu.py
elif (($commod == '7'))
then
echo -n "客户等级:"
read level
chmod a+x update_properties.py
./update_properties.py "level=${level}"
fi
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def addToProperties(code):
path = "../../../gradle.properties"
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if code in line:
line = "#"+line
if "#MARK-END" in line:
line = code + "\n" + line
f_w.write(line)
def needChange(code,line):
return code in line and "${" not in line
def getResValue(line):
return line.split(",")[2].replace("\\\"","").replace("\"","").replace("'","").replace(" ","").replace(")","").replace("\n","")
def getStringFiled(key,value):
return "\t\t\tbuildConfigField 'String', '" + key + "', " + value + "\n"
def getColorRes(key,value):
return "\t\t\tresValue('color', '"+key+"', " + value + ")\n"
def getStringRes(key,value):
return "\t\t\tresValue('string', '"+key+"', " + value + ")\n"
def move_config(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
move_finished=0
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "product {" in line:
move_finished += 1
if move_finished == 1 and "}" in line:
move_finished +=1
if move_finished >1:
f_w.write(line)
continue
if needChange("app_name_str",line):
addToProperties("app_name="+getResValue(line))
line = getStringRes("app_name_str","\"${app_name}\"")
elif needChange("LANGUAGE",line):
if line.startswith("//"):
line = ""
else:
addToProperties("\n#语言 in / zh / en")
addToProperties("language=\"in\"")
line = getStringFiled("LANGUAGE","\"${language}\"")
elif needChange("main_color",line):
addToProperties("main_color="+getResValue(line))
line = getColorRes("main_color","\"${main_color}\"")
elif needChange("main_text_color",line):
addToProperties("main_text_color="+getResValue(line))
line = getColorRes("main_text_color","\"${main_text_color}\"")
elif needChange("FACEBOOK_APP_ID",line):
addToProperties("\n#Accoubt Kit")
addToProperties("facebook_app_id="+getResValue(line))
line = getStringRes("FACEBOOK_APP_ID","\"${facebook_app_id}\"")
elif needChange("ACCOUNT_KIT_CLIENT_TOKEN",line):
addToProperties("account_kit_client_token="+getResValue(line))
line = getStringRes("ACCOUNT_KIT_CLIENT_TOKEN","\"${account_kit_client_token}\"")
#zendesk
elif needChange("ZENDESK_URL",line):
addToProperties("\n#zendesk 客服")
addToProperties("zendesk_url=\""+getResValue(line)+"\"")
line = getStringFiled("ZENDESK_URL","\"${zendesk_url}\"")
elif needChange("ZENDESK_APP_ID",line):
addToProperties("zendesk_app_id=\""+getResValue(line)+"\"")
line = getStringFiled("ZENDESK_APP_ID","\"${zendesk_app_id}\"")
elif needChange("ZENDESK_CLIENT_ID",line):
addToProperties("zendesk_client_id=\""+getResValue(line)+"\"")
line = getStringFiled("ZENDESK_CLIENT_ID","\"${zendesk_client_id}\"")
#同盾
elif needChange("TONGDUN_PARENT_CODE",line):
addToProperties("\n#同盾")
addToProperties("tongdun_parent_code=\""+getResValue(line)+"\"")
line = getStringFiled("TONGDUN_PARENT_CODE","\"${tongdun_parent_code}\"")
elif needChange("TONGDUN_PARENT_KEY",line):
addToProperties("tongdun_parent_key=\""+getResValue(line)+"\"")
line = getStringFiled("TONGDUN_PARENT_KEY","\"${tongdun_parent_key}\"")
elif needChange("TONGDUN_APP_NAME",line):
addToProperties("tongdun_app_name=\""+getResValue(line)+"\"")
line = getStringFiled("TONGDUN_APP_NAME","\"${tongdun_app_name}\"")
elif needChange("octopus_open_whatsapp",line):
line = getStringRes("octopus_open_whatsapp","\"${tongdun_app_name} Open Whatsapp\"")
#appsflyer
elif needChange("APPSFLYER_DEV_KEY",line):
addToProperties("\n#Appsflyer")
addToProperties("appsflyer_key=\""+getResValue(line)+"\"")
line = getStringFiled("APPSFLYER_DEV_KEY","\"${appsflyer_key}\"")
elif needChange("HOTLINE",line):
addToProperties("\n#客服电话")
addToProperties("hot_line=\""+getResValue(line)+"\"")
line = getStringFiled("HOTLINE","\"${hot_line}\"")
#server
elif needChange("API_BASE_URL",line):
addToProperties("\n#server")
addToProperties("base_url=\""+getResValue(line)+"\"")
line = getStringFiled("API_BASE_URL","\"${base_url}\"")
elif needChange("HARVESTER_IP",line):
addToProperties("harvest_ip=\""+getResValue(line)+"\"")
line = getStringFiled("HARVESTER_IP","\"${harvest_ip}\"")
elif needChange("HARVESTER_PORT",line):
addToProperties("harvest_port="+getResValue(line))
line = "\t\t\tbuildConfigField 'int', 'HARVESTER_PORT', \"${harvest_port}\"\n"
elif needChange("GATEWAY_HOST_G0",line):
addToProperties("gateway_url=\""+getResValue(line)+"\"")
line = getStringFiled("GATEWAY_HOST_G0","\"${gateway_url}\"")
elif needChange("GATEWAY_HOST_G1",line):
addToProperties("gateway_ip=\""+getResValue(line)+"\"")
line = getStringFiled("GATEWAY_HOST_G1","\"${gateway_ip}\"")
elif needChange("REPAYMENT_H5",line):
addToProperties("repayment_h5=\""+getResValue(line)+"\"")
line = getStringFiled("REPAYMENT_H5","\"${repayment_h5}\"")
elif needChange("ADMIN_HOST",line):
addToProperties("admin_host=\""+getResValue(line)+"\"")
line = getStringFiled("ADMIN_HOST","\"${admin_host}\"")
elif needChange("AGREEMENT_URL",line):
addToProperties("agreement_url=\""+getResValue(line)+"\"")
line = getStringFiled("AGREEMENT_URL","\"${agreement_url}\"")
f_w.write(line)
return
move_config("../../../app/app_config.gradle")
\ No newline at end of file
#!/bin/sh
cd ../../../
alias="keystore${RANDOM}"
certificate="..\/jks\/${alias}.keystore"
certificatePassword=${alias}
storePassword=${alias}
sed -i "s/signing_keyAlias=.*/signing_keyAlias=${alias}/g" gradle.properties
sed -i "s/signing_certificate=.*/signing_certificate=${certificate}/g" gradle.properties
sed -i "s/signging_certificatePassword=.*/signging_certificatePassword=${certificatePassword}/g" gradle.properties
sed -i "s/signging_storePassword=.*/signging_storePassword=${storePassword}/g" gradle.properties
rm -rf jks/*
echo "ready to create new kestore ${alias}"
keytool -genkey -alias "${alias}" -keypass "${alias}" -storepass "${alias}" -dname "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -keyalg RSA -validity 20000 -keystore jks/"${alias}".keystore
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
path = "../../../app/src/main/AndroidManifest.xml"
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
isPermissionDoce = False
isFinished = False;
for line in lines:
if "<uses-permission" in line:
isPermissionDoce = True
if "<application" in line:
isFinished = True
if isPermissionDoce and not isFinished and "<!--" not in line:
line = "<!-- " + line.replace("\n"," -->\n")
f_w.write(line)
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def remove_res(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "R.color.color_line_gray" in line:
line = line.replace("R.color.color_line_gray","R.color.qmui_config_color_gray_5")
f_w.write(line)
return
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith("LoginActivity.java"):
# get the path of the java file
path = os.path.join(directory, file)
remove_res(path)
\ No newline at end of file
#!/usr/bin/env python3
import glob, os
def rename_api(path):
with open("../../../script/api_mapping", "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
if "/sysdict/$1/$2" in line:
continue
#去除无用字符
line = line.replace(" "," ").replace("rewrite ^/","").replace("rewrite /","").replace("/(.+)","")\
.replace("/(.*)","").replace(" last;","").replace("\n","") \
.replace("/$1","").replace("/$2","").replace("/$3","").replace("/$4","").replace("/$5","")
if "$ /" in line:
line = line.replace("$ /","*-*")
else:
line = line.replace(" /","*-*")
api_map = line.split("*-*")
api_map[0].replace(" ","")
api_map[1].replace(" ","")
# print(api_map[1]+ " -> " + api_map[0])
with open(path, "r", encoding="utf-8") as api_file:
api_lines = api_file.readlines()
#替换api
with open(path, "w", encoding="utf-8") as f_w:
for api_l in api_lines:
# if "//API-REPAIR*-*" in api_l:
# api_l = "\t"+api_l.split("*-*")[1]
old_line = "//" + api_l.replace("\n","//rewrited\n")
if "loanapp/{loanAppId}/bank" in api_l:
api_l = api_l.replace("loanapp/{loanAppId}/bank","loanapp/bank/{loanAppId}")
if "*Keep*" not in api_l and (api_map[1]+"/{" in api_l or api_map[1]+"\"" in api_l) and ( "@GET" in api_l or "@PUT" in api_l or "@POST" in api_l):
# if "//rewrited" not in api_l:
api_l = api_l.replace(api_map[1], api_map[0])
api_l = old_line + api_l.replace("\n","//rewrited\n")
print(api_map[1]+ " -> " + api_map[0])
# else:
# api_l = old_line + "********************"
f_w.write(api_l)
print(path + " done\n")
return
#java目录的路径
for root, dirs, files in os.walk("../../src/main"):
dir = os.path.join(os.getcwd(), root)
for file in files:
#要检索的文件名
if file.endswith("LoanApi.java") or file.endswith("UploadApi.java") or file.endswith("UserApi.java"):
# get the path of the java file
path = os.path.join(dir, file)
rename_api(path)
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def get_brackets(line):
left = line.count("{")
right = line.count("}")
return left - right
def code_loanapplyfragment(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
flag1 = False
flag2 = False
flag3 = False
flag4 = False
brackets = 0
for line in lines:
if "getPresenter(LoanPresenter.class).checkQualification(\"action_checkQualification\");" in line:
code = "\n\t\t\t\t\tnew LoanApplyProxy(getActivity(), this, productBean).startLoan(basicAck -> {\n" + \
"\t\t\t\t\t\tnew EventSender.Builder(MessageID.LOAN_STATUS_CHANGED).build().sendEvent();\n" + \
"\t\t\t\t\t});\n"
line = "// " + line + code;
# 3
if "case \"action_checkQualification\":" in line:
flag3 = True
if flag3:
line = "// " + line
if "break;" in line:
flag3 = False;
# 2
if "case \"action_faceVerify\":" in line:
flag2 = True
if flag2:
line = "// " + line
if "break;" in line:
flag2 = False;
# 1
if "public void startFaceVerify() {" in line:
flag1 = True
if flag1:
line = "// " + line
brackets += get_brackets(line)
if brackets == 0:
flag1=False
f_w.write(line)
print ("code_LoanAppFragment updated !")
return
def code_certifyactivity(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "setTopBarTitle(getString(R.string.text_certification));" in line:
code = "\n\t\tButton nextStepBtn = findViewById(R.id.activity_certify_next_btn);\n" + \
"\t\tif (!TextUtils.isEmpty(BuildConfig.TONGDUN_PARENT_KEY)) {\n" + \
"\t\t\tnextStepBtn.setVisibility(View.VISIBLE);\n" + \
"\t\t\tnextStepBtn.setOnClickListener(v -> {\n" + \
"\t\t\t\tCertifyProgressActivity.start(CertifyActiviy.this, CertifyProgressActivity.CertifyType.CERTIFY_ACCOUNT);\n" + \
"\t\t\t});\n" + \
"\t\t}\n\n"
line = line + code
f_w.write(line)
print ("code_CertifyActivity updated !")
return
def code_fragments(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "startFragment(PersonalInfoFragment.create(mGenderBtn.getText().toString()), true);" in line:
code = "\n\t\t\t\t\t\t\tnew EventSender.Builder(MessageID.CERTIFY_PROGRESS_CHANGED).obj(PersonalInfoFragment.create(mGenderBtn.getText().toString())).build().sendEvent();\n"
line = "// " + line + code
if "startFragment(ContactInfoFragment.create(), true);" in line:
code = "\n\t\t\t\tnew EventSender.Builder(MessageID.CERTIFY_PROGRESS_CHANGED).obj(ContactInfoFragment.create()).build().sendEvent();\n"
line = "// " + line + code
if "startFragment(ProfessionalFragment.create(), true);" in line:
code = "\n\t\t\t\tnew EventSender.Builder(MessageID.CERTIFY_PROGRESS_CHANGED).obj(ProfessionalFragment.create()).build().sendEvent();"
line = "// " + line + code
if "startFragment(AccountFragment.create(), true);" in line:
code = "\n\t\t\t\t\tnew EventSender.Builder(MessageID.CERTIFY_PROGRESS_CHANGED).obj(AccountFragment.create()).build().sendEvent();\n"
line = "// " + line + code
f_w.write(line)
print ("code_fragments updated !")
return
def code_certifyprogress(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
flag = False
for line in lines:
#1
if "public static void start(FragmentActivity context, CertifyType certifyType) {" in line:
flag = True
if flag and "}" in line:
flag = False
code = "\n\tpublic static void start(FragmentActivity context, CertifyType certifyType, ProductBean productBean) {\n" + \
"\t\tnew ActivityJumper.Builder(context, CertifyProgressActivity.class).put(\"certigy_type\", certifyType).put(\"productBean\", productBean).build().start();\n" + \
"\t}\n"
code += "\n\n"
code += "\t@Subscribe\n" + \
"\tpublic void onEvent(EventMessage msg) {\n" + \
"\t\tif (msg.what == MessageID.CERTIFY_PROGRESS_CHANGED) {\n" +\
"\t\t\tFragment fragment = (Fragment) msg.obj;\n" + \
"\t\t\tBundle arguments = fragment.getArguments();\n" + \
"\t\t\tif (arguments != null) {" + \
"\t\t\t\targuments.putAll(getIntent().getExtras());\n" + \
"\t\t\t}else{\n" + \
"\t\t\t\targuments= getIntent().getExtras();\n" + \
"\t\t\t}\n" + \
"\t\tfragment.setArguments(arguments);\n"+\
"\t\tstartFragment(fragment, true);\n" + \
"\t\t}\n" + \
"\t}\n\n"
line = line + code
#2
if "startFragment(AccountFragment.create(), false);" in line :
code = "\t\t\t\tAccountFragment accountFragment = AccountFragment.create();\n" + \
"\t\t\t\taccountFragment.setArguments(getIntent().getExtras());\n" + \
"\t\t\t\tstartFragment(accountFragment, false);\n"
line = line + code
f_w.write(line)
print ("code_Progress updated !")
return
def code_messageid(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "public static final int LOAN_STATUS_CHANGED = 3;" in line:
line += "\n\tpublic static final int CERTIFY_PROGRESS_CHANGED = 4;//贷款进度更新\n"
f_w.write(line)
print ("code_MessageID updated !")
return
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith("LoanApplyFragment.java"):
# get the path of the java file
path = os.path.join(directory, file)
code_loanapplyfragment(path)
elif file.endswith("CertifyActiviy.java"):
path = os.path.join(directory, file)
code_certifyactivity(path)
elif file.endswith("IdentityInfoFragment.java") or file.endswith(
"PersonalInfoFragment.java") or file.endswith(
"ContactInfoFragment.java") or file.endswith("ProfessionalFragment.java"):
path = os.path.join(directory, file)
code_fragments(path)
elif file.endswith("CertifyProgressActivity.java"):
path = os.path.join(directory, file)
code_certifyprogress(path)
elif file.endswith("MessageID.java"):
path = os.path.join(directory, file)
code_messageid(path)
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
path = "../../../gradle.properties"
code = sys.argv[1]
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if code in line:
line = "#"+line
if "MARK-END" in line:
line = code + "\n" + line
f_w.write(line)
\ No newline at end of file
import json
import string
import random
import glob, os
import sys
path = "../../../settings.gradle"
with open(path, "r") as f:
lines = f.readlines()
with open(path, "w") as f_w:
for line in lines:
if "include" in line and 'cash_plugin_toolbox' not in line:
line = line.replace("'lib_base',","'lib_base', 'cash_plugin_toolbox',")
f_w.write(line)
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def new_func_code():
code = "\t@Override\n" + \
"\tpublic void onLivenessSuccess(OliveappFaceInfo oliveappFaceInfo) {\n" + \
"\t\tLivenessDetectionFrames pkg = this.getLivenessDetectionPackage();\n" + \
"\t\tif ((pkg != null ? pkg.verificationData : null) == null) {\n" + \
"\t\t\tfinishForResult(false, getResources().getString(R.string.faceid_detect_fail));\n" + \
"\t\t} else {\n" + \
"\t\t\tPreferencesManager.get().saveVerificationData(pkg.verificationData);\n" + \
"\t\t\tfinishForResult(true, \"\");\n" + \
"\t\t}\n" + \
"\t}\n"
return code
def add_func(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "FaceDetectActivity extends LivenessDetectionMainActivity" in line:
line = line + "\n" + new_func_code() + "\n"
f_w.write(line)
return
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith("FaceDetectActivity.java"):
# get the path of the java file
path = os.path.join(directory, file)
add_func(path)
\ No newline at end of file
#!/usr/bin/env bash
cd ../../
. gradle.properties
echo -n "enter the new keystore name (last version :${signing_keyAlias}) : "
read newKeyName
#输入 v** 直接改版本号,否则修改全名
if [[ ${newKeyName:0:1} = 'v' ]]
then
oldIFS=$IFS
IFS=_
array=(${signing_keyAlias})
alias="${array[0]}_${newKeyName}"
else
alias=${newKeyName}
fi
certificate="../jks/${alias}.keystore"
certificatePassword=${alias}
storePassword=${alias}
LC_CTYPE=C && LANG=C && sed -i "" "s#^signing_keyAlias=.*#signing_keyAlias=${alias}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signing_certificate=.*#signing_certificate=${certificate}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signging_certificatePassword=.*#signging_certificatePassword=${certificatePassword}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^signging_storePassword=.*#signging_storePassword=${storePassword}#g" gradle.properties
rm -rf jks/*
echo "ready to create new kestore ${alias}"
keytool -genkey -alias "${alias}" -keypass "${alias}" -storepass "${alias}" -dname "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -keyalg RSA -validity 20000 -keystore jks/"${alias}".keystore
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
used_names = []
# rand string for class names
def gen_rand_str():
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
while rand_str in used_names:
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
used_names.append(rand_str)
return rand_str + str(random.randint(0, 1000))
def get_rand_code(isInFunc):
indentasi = random.randint(0, 5);
indentasiStr = ""
for num in range(0, indentasi):
indentasiStr += "\t"
# 随机缩进
num = random.randint(0, 4);
code = ";\n"
filed_name = gen_rand_str()
filed_value = random.randint(0, 100000);
# 随机代码
if num == 0:
code += indentasiStr + "String " + filed_name + "=\"" + gen_rand_str() + "\";\n"
elif num == 1:
code += indentasiStr + "int " + filed_name + "=" + str(filed_value) + ";\n"
elif num == 2:
code += indentasiStr + "float " + filed_name + "=" + str(filed_value) + ";\n"
elif num == 3:
code += indentasiStr + "double " + filed_name + "=" + str(filed_value) + ";\n"
elif num == 4:
code += indentasiStr + "long " + filed_name + "=" + str(filed_value) + ";\n"
if isInFunc:
if num == 0:
code += "if(\"" + filed_name + "\".equals(\"" + gen_rand_str() + "\")){}//interference code\n"
else:
if random.randint(0, 10) % 2 == 0:
code += "while(" + filed_name + "++<" + str(filed_value) + "+1){}\n"
else:
index = gen_rand_str()
code += "for(int " + index + "="+str(filed_value+1)+";"+index+"<"+filed_name+";"+index+"++){}//interference code\n"
return code
def get_brackets(line):
left = line.count("{")
right = line.count("}")
return left - right
def is_note(line):
final_line = line.replace("://", "")
return "//" in final_line or "\t*" in final_line
def process_file_content(path, file_name):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
if "***Keep***" in str(lines):
return
with open(path, "w", encoding="utf-8") as f_w:
isReturn = False
isErrorIf = False
return_level = 0
func_level = 0
isAbstract = False
for line in lines:
# 接口和抽象类 直接跳过
if "interface" in line or "abstract" in line:
isAbstract = True
if isAbstract or is_note(line):
f_w.write(line)
continue
# 没加{}的if else
if ("if(" in line or "if (" in line) and "{" not in line:
isErrorIf = True
# return后有多行代码
if "return" in line or ("throw" in line and not isReturn):
isReturn = True
return_level = get_brackets(line)
if isReturn:
return_level += get_brackets(line)
if return_level < 0:
return_level = 0
if " class " in line and "{" in line:
func_level = 0
if ("){\n" in line or ") {\n" in line) and func_level == 0 and not isReturn:
func_level = get_brackets(line)
elif func_level != 0:
if "new " in line and "{" in line:
func_level = 0
else:
func_level += get_brackets(line)
if func_level < 0:
func_level = 0
# 需要忽略的行
if not isReturn and not isErrorIf and \
";\n" in line and \
"return" not in line and \
"break" not in line and \
"continue" not in line and \
"import" not in line and \
"package" not in line and \
"throw" not in line and \
"};" not in line and \
"});" not in line and \
not is_note(line):
if random.randint(0, 20) % 2 == 0:
line = line.replace(";\n", get_rand_code(func_level > 0))
if ";" in line:
isErrorIf = False
if ";\n" in line and return_level == 0:
isReturn = False
f_w.write(line)
# print("done\n")
return
# perform content replace for the files
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
process_file_content(path, file)
for root, dirs, files in os.walk("../../../lib_base/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
process_file_content(path, file)
print("processing file content done")
{
"activities": [
"HomeActivity",
"CertifyActiviy",
"CertifyProgressActivity",
"FaceDetectActivity",
"AdvanceAIFaceActivity",
"LoanDetailActivity",
"LoanHistoryActivity",
"LoginActivity",
"SettingsActivity",
"SplashActivity",
"AccountFragment",
"ContactInfoFragment",
"IdentityInfoFragment",
"PersonalInfoFragment",
"ProfessionalFragment",
"LoanApplyFragment",
"LoanBankFragment",
"LoanReviewFragment",
"ProductListFragment",
"RepaymentFragment"
],
"root": "../../../app/src/main",
"manifest": "../../../app/src/main/AndroidManifest.xml"
}
#!/usr/bin/env python3
import json
import os
import random
import string
used_names = []
activity_mangle_setting = {}
def process_file_content(path, file_name):
# print("processing content: %s..."%path)
with open(path, "rt") as fin:
file_content = fin.read()
# replace the file content based on mangle settings
for (src, dst) in activity_mangle_setting.items():
separator = [" ", ".", "\"", "{", "}", "(", ")", "[", "]","<",">", ":", ";", ","]
for sep in separator:
file_content = file_content.replace(src + sep, dst + sep)
ext = os.path.splitext(file_name)[1]
if ext == '.java':
comment = "// machine renamed: %s\n" % file_name
file_content = "%s%s" % (comment, file_content)
with open(path, "wt") as fout:
fout.write(file_content)
print("done\n")
return
# rand string for class names
def gen_rand_str():
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
while rand_str in used_names:
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
used_names.append(rand_str)
return rand_str
# read configs
with open('obact.json', "rt") as f:
json_root = json.load(f)
activities = json_root["activities"]
source_root = json_root["root"]
manifest = json_root["manifest"]
# mangle activity names
for act_name in activities:
activity_mangle_setting[act_name] = gen_rand_str()
print("activity mapping %s" % activity_mangle_setting)
root_path = os.path.join(os.getcwd(), source_root)
# perform content replace for the files
print("processing file content...")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
process_file_content(path, file)
print("processing file content done")
print("renaming files")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
name = os.path.splitext(file)[0]
if name in activity_mangle_setting:
# get the path of the java file
src = os.path.join(directory, file)
dst = os.path.join(directory, "%s.java" % activity_mangle_setting[name])
# print("%s -> %s"%(src, dst))
os.rename(src, dst)
print("renaming files done")
manifest_path = os.path.join(os.getcwd(), manifest)
process_file_content(manifest_path, "AndroidManifest.xml")
{
"activities": [
"BaseActivity",
"BaseApplication",
"BaseFragment",
"InstallReferrerReceiver",
"ContactEntity",
"SmsEntity",
"AboutUsActivity",
"ActivityCenter",
"AgreementPolicyActivity",
"HelpCenterActivity",
"MessageListActivity",
"RefreshDeskActivity",
"RegionActivity",
"RepaymentGuideActivity",
"TakePhotoActivity",
"RefreshDeskListActivity",
"ReviewHookActivity",
"WebActivity",
"LoanInfoFragment",
"RegionFragment",
"RepaymentH5Fragment",
"AvoidOnResultFragment",
"MsgHandleService",
"MsgInstanceIdService",
"Collector",
"ActivityInfoBean",
"BankBean",
"BannerMessageDto",
"BasicAck",
"CertBean",
"ContactInfoBean",
"CouponBean",
"DepositMethodsBean",
"DepositResponseBean",
"DisplayBean",
"EmojiLocationBean",
"EmploymentBean",
"EmploymentBean",
"EmploymentServerBean",
"EventCenterBean",
"GatewayInfoBean",
"GeoLocationBean",
"HistoryLoanAppInfoBean",
"IdentifyBean",
"InviteeBean",
"InviteePersonBean",
"InviteResult",
"LatestLoanAppBean",
"LoanAppBeanFatherStatusLogs",
"LoanAppHelpCenterTipsBean",
"LoaningAmoutBean",
"PersonalInfoServerBean",
"LoanRange",
"LoginRequestBean",
"LoginStatusBean",
"MessageBean",
"MsgInboxBean",
"OcrResultBean",
"PersonalInfoBean",
"PhotoInfo",
"ProductBean",
"AvoidOnResultFragment",
"IncomeMessageProto",
"ResponseErrorBody",
"ThirdPartItemBean",
"ProgressBean",
"RecordFilesResponse",
"RegionBean",
"RepaymentGuideBean",
"SysDictBean",
"ThirdPartDataBean",
"TokenInfoBean",
"TotalAmount",
"UpdateBean",
"UserBankInfo",
"UserBean",
"VersionBean",
"YWUser",
"TDChannel"
],
"root": "../../../lib_base/src/main",
"manifest": "../../../lib_base/src/main/AndroidManifest.xml",
"approot": "../../../app/src/main",
"appmanifest": "../../../app/src/main/AndroidManifest.xml"
}
#!/usr/bin/env python3
import json
import string
import random
import glob, os
used_names = []
activity_mangle_setting = {}
def process_file_content(path, file_name):
print("processing content: %s..."%path)
with open(path, "rt") as fin:
file_content = fin.read()
# replace the file content based on mangle settings
for (src, dst) in activity_mangle_setting.items():
separator = [" ", ".", "\"", "{", "}", "(", ")", "[", "]", "<",">", ":", ";", ","]
for sep in separator:
file_content = file_content.replace(src + sep, dst + sep)
ext = os.path.splitext(file_name)[1]
if ext == '.java':
comment = "// machine renamed: %s\n"%file_name
file_content = "%s%s"%(comment, file_content)
with open(path, "wt") as fout:
fout.write(file_content)
print("done\n")
return
# rand string for class names
def gen_rand_str():
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
while rand_str in used_names:
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
used_names.append(rand_str)
return rand_str
# read configs
with open('obact_lib.json', "rt") as f:
json_root = json.load(f)
activities = json_root["activities"]
source_root = json_root["root"]
manifest = json_root["manifest"]
# mangle activity names
for act_name in activities:
activity_mangle_setting[act_name] = gen_rand_str()
print("activity mapping %s"%activity_mangle_setting)
root_path = os.path.join(os.getcwd(), source_root)
# perform content replace for the files
print("processing file content...")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
process_file_content(path, file)
print("processing file content done")
print("renaming files")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
name = os.path.splitext(file)[0]
if name in activity_mangle_setting:
# get the path of the java file
src = os.path.join(directory, file)
dst = os.path.join(directory, "%s.java"%activity_mangle_setting[name])
print("%s -> %s"%(src, dst))
os.rename(src, dst)
print("renaming files done")
manifest_path = os.path.join(os.getcwd(), manifest)
process_file_content(manifest_path, "AndroidManifest.xml")
#update app
# read configs
with open('obact_lib.json', "rt") as f:
json_root = json.load(f)
activities = json_root["activities"]
source_root = json_root["approot"]
manifest = json_root["appmanifest"]
print("activity mapping %s"%activity_mangle_setting)
root_path = os.path.join(os.getcwd(), source_root)
# perform content replace for the files
print("processing file content...")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
process_file_content(path, file)
print("processing file content done")
print("renaming files")
for root, dirs, files in os.walk(source_root):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
name = os.path.splitext(file)[0]
if name in activity_mangle_setting:
# get the path of the java file
src = os.path.join(directory, file)
dst = os.path.join(directory, "%s.java"%activity_mangle_setting[name])
print("%s -> %s"%(src, dst))
os.rename(src, dst)
print("renaming files done")
manifest_path = os.path.join(os.getcwd(), manifest)
process_file_content(manifest_path, "AndroidManifest.xml")
import random
import sys
import uuid
import os
app_name = sys.argv[1].replace(" ", "").lower()
start_name = ["com", "cn", "id", "app", "host", "in"]
middle_name = ["android", "main", "home", "base", "play", "release", "full", "kredit", "cepat",
"saku", "wallet", "coin", "loan", "flash", "pjnm", "indo", "lib"]
#start
pkg_name = start_name[random.randint(0, len(start_name) - 1)] + "." + app_name
#middle
length = random.randint(1, 3)
for i in range(0, length):
pkg_name += "." + middle_name[random.randint(0, len(middle_name) - 1)]
#end
uuid_str = str(uuid.uuid1()).replace("-","")
random_str = ''.join(random.sample("abcdefghijklmnopqrstuvwxyz", random.randint(4, 8)))
pkg_name += "." + random_str
os.system('./rename_pkg.sh ' + pkg_name)
class Reader:
def __init__(self, file_name):
self.file_name = file_name
self.properties = {}
try:
fopen = open(self.file_name, 'r')
for line in fopen:
line = line.strip()
if line.find('=') > 0 and not line.startswith('#'):
strs = line.split('=')
self.properties[strs[0].strip()] = strs[1].strip()
except ValueError:
raise e
else:
fopen.close()
def has_key(self, key):
return key in self.properties
def get(self, key, default_value=''):
if key in self.properties:
return self.properties[key]
return default_value
def put(self, key, value):
self.properties[key] = value
replace_property(self.file_name, key + '=.*', key + '=' + value, True)
\ No newline at end of file
#!/usr/bin/env bash
cd ../../../
. gradle.properties
v_code=$((${version_code}+1))
v_name=$((${v_code}/100))"."$((${v_code}%100/10))"."$((${v_code}%10))
echo "appId=${1},versionCode=${v_code},verionName=${v_name}"
LC_CTYPE=C && LANG=C && sed -i "" "s#^app_id=.*#app_id=${1}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^version_code=.*#version_code=${v_code}#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^version_name=.*#version_name=${v_name}#g" gradle.properties
\ No newline at end of file
chmod a+x obact.py
chmod a+x obact_lib.py
obact.py
obact_lib.py
cd ../../
git checkout . && git clean -df
git reset --hard origin/master
cd ..
git checkout . && git clean -df
#!/usr/bin/env python3
import json
import string
import random
import base64
import glob, os
# def gen_rand_str():
# rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
# return rand_str + str(random.randint(0, 1000000))
def decrypt(path):
with open(path, "r") as f:
lines = f.readlines()
with open(path, "w") as f_w:
for line in lines:
if "<string" in line and "</string>\n" in line and "<!" not in line:
if "*keep*" not in line:
line = line.replace("</string>\n", "")
str_name = line.split(">")[0] + ">"
str_value = line.split(">")[1]
number=""
for i in range(0,random.randint(2,15)):
number += str(random.randint(0,9))
randStr = str(number) + "#-#"
line = str_name + randStr + base64.b64encode(randStr + str_value) + "</string>\n"
f_w.write(line)
# print("done\n")
return
for root, dirs, files in os.walk("../../src/main/res"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith("strings.xml"):
# get the path of the java file
path = os.path.join(directory, file)
decrypt(path)
# -*-coding:utf-8-*-
import requests
import io
import json
import string
import time
class Api:
host = "http://149.129.219.36:9898"
#查询发布记录
def select_log_info(self,config):
url = self.host+"/gp/package/info"
params = {'corpId': config['corpId']}
result = requests.get(url, params)
return result
#新 插入发布记录
def insert_log_v2(self,config):
url = self.host+"/gp/package/insert_info"
params = {'corpId': config['corpId'],'pkgName':config['pkgName'],'level':config['level'],\
'developer':config['developer'],'action':config['action'],'accountSource':config['accountSource'],'pkgType':config['pkgType']}
result = requests.get(url, params)
return result
#旧 插入发布记录
def insert_log_v1(self,config):
url = "http://34.92.238.50:5021/refreshGPInfo"
seconds = int(time.time())
params = {'corpid': config['corpId'], 'level': config['level'], 'developer': config['developer'], 'pkg_name': config['pkgName'], 'action': config['action'], 'update_time': seconds}
result = requests.get(url, params)
return result
#更新记录
def update_log(self,config):
url = self.host+"/gp/package/insert_info"
params = {'corpId': config['corpId'],'pkgName':config['pkgName'],'level':config['level'],\
'developer':config['developer'],'action':config['action'],'accountSource':config['accountSource'],'pkgType':config['pkgType']}
result = requests.get(url, params)
return result
\ No newline at end of file
{
"corpId": "99999",
"pkgName": "com.test.tset",
"level": "level",
"developer": "test",
"action": "action",
"offlineReason": "offlineReason",
"accountSource": "accountSource",
"submitTimeFrom": "submitTimeFrom",
"submitTimeTo": "submitTimeTo",
"onlineTimeFrom": "onlineTimeFrom",
"onlineTimeTo": "onlineTimeTo",
"offlineTimeFrom": "offlineTimeFrom",
"offlineTimeTo": "offlineTimeTo",
"status": "status",
"pkgType": "pkgType"
}
\ No newline at end of file
. gradle.properties
#客户编号
cropid=${corp_id}
#客户等级
level=${level}
#开发者
developer="test"
#包名(默认读取gragle.properties)
pkg_name=${app_id}
echo "1、提交一次上架记录"
echo "2、修改最新记录"
echo "3、记录下架原因"
echo " "
echo -n "请输入指令编号:"
read commod
echo -n "此次上架方案:"
read action
chmod a+x gponline.py
if (($commod == '1'))
then
git add .
git commit -m "${pkg_name}"
git push origin ${code_branch}
tagName=t${cropid}-${pkg_name}
git tag -d ${tagName}
git push origin --delete tag ${tagName}
git tag -a ${tagName} -m ${tagName}
git push origin ${tagName}
python gponline.py "${cropid}" "${level}" "${developer}" "${pkg_name}" "${action}"
elif (($commod == '2'))
then
chmod a+x gponline.py
python gponline.py "${cropid}" "${level}" "${developer}" "${pkg_name}" "${action}"
elif (($commod == '3'))
then
echo -n "输入要指定的包名:"
read pkg
chmod a+x gponline.py
python gponline.py "${cropid}" "${level}" "${developer}" "${pkg}" "${action}"
else
echo "找不到编号"
fi
# -*-coding:utf-8-*-
from api import Api
import requests
import time
import datetime
import sys
import io
import json
def loadConfig():
with io.open('config.json', "r+") as fin:
return json.load(fin)
def insert_log():
# result = api.insert_log_v1(config)
# print("v1接口result: "+result.json())
result = api.insert_log_v2(config)
print(result.json())
if __name__ == "__main__":
api = Api()
config=loadConfig()
insert_log()
# result = api.select_log_info(config)
# print(result.json())
\ No newline at end of file
import requests
import time
import datetime
import sys
seconds = int(time.time())
paramMap = {'corpid': sys.argv[1], 'level': sys.argv[2], 'developer': sys.argv[3], 'pkg_name': sys.argv[4], 'action': sys.argv[5], 'update_time': seconds}
result = requests.get("http://34.92.238.50:5021/refreshGPInfo", params=paramMap)
print(result.json())
#!/usr/bin/env python3
import os
import sys
import random
from PIL import Image, ImageDraw, ImageFont
def add_text_to_image(image, text):
# 水印字体随机大小
font_size = random.randint(30, 60)
font = ImageFont.truetype('Arial.ttf', font_size)
# 添加背景
new_img = Image.new('RGBA', (image.size[0] * 3, image.size[1] * 3), (0, 0, 0, 0))
new_img.paste(image, image.size)
# 添加水印
font_len = len(text)
rgba_image = new_img.convert('RGBA')
text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
image_draw = ImageDraw.Draw(text_overlay)
# 随机位置
for i in range(random.randint(0, 100), rgba_image.size[0],
font_len * font_size + font_size * 2):
for j in range(random.randint(0, 100), rgba_image.size[1], font_size * 5):
image_draw.text((i, j), text, font=font, fill=(0, 0, 0, 50))
text_overlay = text_overlay.rotate(-45)
image_with_text = Image.alpha_composite(rgba_image, text_overlay)
# 裁切图片
image_with_text = image_with_text.crop(
(image.size[0], image.size[1], image.size[0] * 2, image.size[1] * 2))
return image_with_text
if __name__ == '__main__':
img = Image.open(sys.argv[1])
im_after = add_text_to_image(img, sys.argv[2])
path = os.path.dirname(sys.argv[1]) + "/GP/";
if not os.path.exists(path):
os.makedirs(path)
output = sys.argv[1].split("/");
output = path + output[len(output) - 1].split(".")[0] + "_mark" + ".png"
print(output)
im_after.save(output)
#!/usr/bin/env bash
cd ../../
basepath=$(cd `dirname $0`; pwd)
project_name=${basepath##*/}
. gradle.properties
cd ../360_jiagu/jiagu
#加固
java -jar jiagu.jar -login 15902141504 qwqw10010
#java -jar jiagu.jar -importsign ../../${project_name}/app/${signing_certificate} ${signging_certificatePassword} ${signing_keyAlias} ${signging_storePassword}
#java -jar jiagu.jar -showsign
java -jar jiagu.jar -config
java -jar jiagu.jar -jiagu ../../${project_name}/resGuardApks/${project_name}_release.apk ../../${project_name}/resGuardApks -autosigns
cd ../../${project_name}
jiagu_apk=""
for file in resGuardApks/*; do
if [[ ${file} == *jiagu.apk ]]
then
jiagu_apk=${file}
fi
done
# V1 签名
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA \
-keystore app/${signing_certificate} \
-storepass ${signging_storePassword} \
-keypass ${signging_certificatePassword} \
-signedjar resGuardApks/${project_name}_release_jg.apk ${jiagu_apk} \
${signing_keyAlias}
#copy到指定目录
now_time=$(date "+%Y-%m-%d %H_%M_%S")
cp "resGuardApks/${project_name}_release_jg.apk" "/Users/connor/Documents/apks/${project_name}_jg_${now_time}.apk"
cd ../../
basepath=$(cd `dirname $0`; pwd)
project_name=${basepath##*/}
echo -n "请输入渠道名(多个渠道逗号隔开,使用默认渠道文件按回车):"
read channels
cd lib_base/script/
if [[ -z ${channels} ]]
then
source ./../../gradle.properties
java -jar walle-cli-all.jar batch -c ${apk_channels} ../../resGuardApks/"${project_name}"_release.apk
else
java -jar walle-cli-all.jar batch -c "${channels}" ../../resGuardApks/"${project_name}"_release.apk
fi
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
for root, dirs, files in os.walk("/Users/connor/Documents/App_GP/"):
directory = os.path.join(os.getcwd(), root)
for file in files:
dir_name = root.split("/");
dir_name = dir_name[len(dir_name)-1]
if dir_name.startswith(sys.argv[1]+"_"):
if (file.endswith(".png") or file.endswith(".jpg")) and "_mark" not in file and "logo" not in file:
path = os.path.join(directory, file)
os.system("./image_mark.py "+ path + " " + sys.argv[2].split("_")[0])
\ No newline at end of file
#!/usr/bin/env bash
echo -n "commit message: "
read message
if((${#message}==0))
then
echo "message can not be null !"
./module_push.sh
else
cd ../../
source ./gradle.properties
git add .
git commit -m "${message}"
git push origin ${git_branch}
fi
cd ../../
. gradle.properties
# basepath=$(cd `dirname $0`; pwd)
# project_name=${basepath##*/}
#now_time=$(date "+%Y-%m-%d %H_%M_%S")
file_name="${corp_id}_${app_name}"
rm /Users/connor/Documents/apks/"${file_name}.apk"
rm /Users/connor/Documents/apks/"${file_name}/app.apk"
cp resGuardApks/"${file_name}"_release.apk /Users/connor/Documents/apks/"${file_name}/${file_name}.apk" || cp resGuardApks/"${file_name}"_release.apk /Users/connor/Documents/apks/"${file_name}.apk" || echo "!!!找不到apk文件!!!"
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import base64
import glob, os
import sys
# def gen_rand_str():
# rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
# return rand_str + str(random.randint(0, 1000000))
def setAdress(line):
if "${email}" in line:
if len(sys.argv[2]) > 0:
line = line.replace("${email}", sys.argv[2])
if "${phone_num}" in line:
if len(sys.argv[3]) > 0:
line = line.replace("${phone_num}", sys.argv[3])
if "${adress}" in line:
if len(sys.argv[4]) > 0:
line = line.replace("${adress}", sys.argv[4])
return line
def create_desc(read_path, write_path):
with open(read_path, "r") as f:
lines = f.readlines()
index = random.randint(0, 12) + 1
if int(sys.argv[8]) > 0:
index = sys.argv[8]
search_str = "@Example " + str(index) + "-"
is_target = False
print (search_str)
print (sys.argv[1])
with open(write_path, "w") as f_w:
for line in lines:
if search_str in line:
is_target = True
continue
if is_target and "@End" in line:
is_target = False
continue
if is_target:
line = line.replace("${app_name}", sys.argv[1])
line = setAdress(line)
if len(line) > 0:
f_w.write(line)
def create_config(read_path, write_path):
with open(read_path, "r") as f:
lines = f.readlines()
with open(write_path, "w") as f_w:
for line in lines:
line = line.replace("${app_name}", sys.argv[1]) \
.replace("${desc}", sys.argv[5] + "_desc.txt") \
.replace("${privacy_url}", sys.argv[6] + "?name=" + sys.argv[1].replace(" ", "%20")) \
.replace("${website}", "")
# .replace("${website}",sys.argv[7])
f_w.write(line)
output = "/Users/connor/Documents/apks/" + sys.argv[5] + "_" + sys.argv[1]
if not os.path.exists(output):
os.makedirs(output)
create_desc("/Users/connor/StudioProjects/WorkSpace/app_desc.txt",
output + "/" + sys.argv[5] + "_desc.txt")
# create_config("/Users/connor/StudioProjects/WorkSpace/config.json", output + "/config.json")
#!/usr/bin/env python3
#-*-coding:utf-8-*-
import json
import string
import random
import base64
import glob, os
# def gen_rand_str():
# rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
# return rand_str + str(random.randint(0, 1000000))
def print_path(path):
with open(path, "r") as f:
lines = f.readlines()
for line in lines:
if "package" in line and ";" in line:
act_path = line.replace("package ","").replace(";",".SplashActivity")
print("类名:" + act_path)
return
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith("SplashActivity.java"):
# get the path of the java file
path = os.path.join(directory, file)
print_path(path)
# -*-coding:utf-8-*-
import random
import sys
from PIL import Image, ImageDraw, ImageFont
text = [
"Mudah Diajukan\n Pengisian Data Tidak Rumit",
"Tidak bisa menyelesaikan masalah?\nKhawatir tentang masalah pendanaan?",
"Pinjaman Dana Santai\n Cepat Masuk dalam Rekening",
"Isi informasi dengan mudah dan\nkeluar dari hutan dengan cepat",
"Memberikan anda layanan \n pinjaman berkualitas",
"Membantu Anda mengatasi\n kesulitan keuangan",
"Aliran Dana Untuk Anda\n Uangmu Tercukupi Di Sini",
"Pinjaman Semakin Nyaman\n Kangan Ragu! Unduh APPnya",
"Ambil Keberuntungan Kamu\n Bersama Kami Duitmu Beres",
"Membantu Anda keluar dari masalah\n dan menyelesaikan kesulitan keuangan",
"Hadir Utk Area Indonesia\n Layanan Pelanggan Sapa Ramah"
]
def draw_bg(bg_path, logo_path, top_path, output):
img_bg = Image.open(bg_path)
img_logo = Image.open(logo_path)
img_top = Image.open(top_path)
text_h = random.randint(0, 1400)
logo_h = random.randint(0, 1400)
top_h = random.randint(0, 1400)
text_index = random.randint(0, len(text) - 1)
while abs(logo_h - text_h) < 400 or abs(top_h - text_h) < 400:
logo_h = random.randint(0, 1400)
top_h = random.randint(0, 1400)
# 添加背景
new_img = Image.new('RGBA', (img_bg.size[0] * 2, img_bg.size[1]), (0, 0, 0, 0))
new_img.paste(img_bg, (0, 0))
new_img.paste(img_bg, (img_bg.size[0], 0))
img_logo = img_logo.resize((300, 300), Image.ANTIALIAS)
img_top = img_top.resize((700, 342), Image.ANTIALIAS)
# logo随机位置
new_img.paste(img_logo, (random.randint(0, 700), logo_h), mask=img_logo)
new_img.paste(img_top, (1080, top_h))
# 字体随机大小
font_size = random.randint(120, 180)
font = ImageFont.truetype('Arial.ttf', font_size)
# 添加字体
new_img = new_img.convert('RGBA')
img_text = Image.new('RGBA', new_img.size, (255, 255, 255, 0))
image_draw = ImageDraw.Draw(img_text)
image_draw.text((random.randint(0, 300), text_h), text[text_index], font=font, fill="#FFFFFF")
bg_with_text = Image.alpha_composite(new_img, img_text)
# 裁切图片
screen1 = bg_with_text.crop((0, 0, img_bg.size[0], img_bg.size[1]))
screen2 = bg_with_text.crop((img_bg.size[0], 0, img_bg.size[0] * 2, img_bg.size[1]))
screen1.save(output + "screen1.png", "PNG")
screen2.save(output + "screen2.png", "PNG")
draw_bg(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
# -*-coding:utf-8-*-
import requests
import io
import json
import string
class Api:
host = "https://biz.apollo.starblingbling.com"
mobile = "18512342222"
pwd = "android"
token = ""
# def loadConfig(self):
# with io.open('config.json', "r+") as fin:
# return json.load(fin)
# def updateConfig(self,config):
# with io.open("config.json", "w+") as fout:
# fout.write(json.dumps(config, ensure_ascii=False))
def getToken(self):
return self.token
# with io.open('config.json', "r+") as fin:
# return json.load(fin)['token']
# 登录
def login(self,account, pwd):
url = self.host+"/api/api/login"
params = {'mobile': account, 'password': pwd}
result = requests.post(url, params)
if result.status_code == 200:
self.token = result.json()['data']['token']
# config = self.loadConfig()
# config['token'] = token
# self.updateConfig(config)
# print("token已更新")
else:
print(result.json())
def handleResult(self,result):
if result.json()['code'] != "OK":
print("api error: ",result.url)
print(result.json())
if "token invalid" in result.json()['message']:
print("token失效,正在重新登录,稍后再试...")
self.login(self.mobile,self.pwd)
else:
return True
return False
# 生成新的协议
def new_privacy(self,crop_id, app_name, oss_path):
self.login(self.mobile,self.pwd)
url = self.host+"/api/api/privacies"
params = {'corpId': crop_id, 'corpName': app_name, 'packageName': oss_path }
header = {'X-AUTH-TOKEN':self.getToken()}
result = requests.post(url, json=params,headers=header)
if("corpId" in result.text and "packageName" in result.text and "exists" in result.text):
print("文件已存在,正在转到更新接口...")
success = self.update_privacy(crop_id,app_name,oss_path)
if not success and result.json()['code'] != "OK":
return False
if self.upload_privacy(crop_id,oss_path):
print("更新协议成功!")
return True
return False
#更新协议
def update_privacy(self,crop_id, app_name, oss_path):
url = self.host+"/api/api/privacies/regenerate/%s/%s"%(crop_id,oss_path)
params = {'corpId': crop_id, 'corpName': app_name, 'packageName': oss_path}
header = {'X-AUTH-TOKEN':self.getToken()}
result = requests.put(url, json=params,headers=header)
return self.handleResult(result)
#上传协议
def upload_privacy(self,crop_id, oss_path):
url = self.host+"/api/api/privacies/upload-to-oss/%s/%s"%(crop_id,oss_path)
params = {'corpId': crop_id, 'packageName': oss_path}
header = {'X-AUTH-TOKEN':self.getToken()}
result = requests.put(url,json=params,headers=header)
return self.handleResult(result)
# -*-coding:utf-8-*-
import os
import sys
app_name = sys.argv[1]
permission_list = sys.argv[2]
input=sys.argv[3]
output = sys.argv[4]
def process_file_content():
# print("processing content: %s..."%path)
with open(input, "rt") as fin:
file_content = fin.read()
file_content = file_content.replace("${app_name}", app_name)
file_content = file_content.replace("${permission_list}", permission_list)
with open(output, "wt") as fout:
fout.write(file_content)
print("privacy done\n")
process_file_content()
\ No newline at end of file
# -*-coding:utf-8-*-
import sys
import requests
import io
import os
import chardet
privacy_url=sys.argv[1]
#是否更新本地文件
path = "../../../app/src/main/assets/web/".replace("/",os.path.sep)
if not os.path.exists(path):
os.makedirs(path)
resp = requests.get(privacy_url);
content = resp.text
encode = chardet.detect(resp.content)['encoding']
with io.open(path+"privacy.html", "w+", encoding=encode) as fout:
fout.write(content)
print("本地协议已更新!" + privacy_url)
ksp_url=privacy_url.replace(".html","Ksp.html")
resp = requests.get(ksp_url)
content = resp.text
encode = chardet.detect(resp.content)['encoding']
if "<Code>NoSuchKey</Code>" not in content:
with io.open(path+"privacyKsp.html", "w+", encoding=encode) as fout:
fout.write(content)
print("本地KSP协议已更新!" + ksp_url)
# -*-coding:utf-8-*-
from api import Api
import sys
import requests
import io
import os
import json
import chardet
crop_id = sys.argv[1]
app_name = sys.argv[2]
privacy_url = sys.argv[3]
update_local = sys.argv[4]
error_url = privacy_url.replace("privacy.html","privacy_error.html")
oss_path=requests.get(error_url).text\
.split("<Key>")[1]\
.split("</Key>")[0]\
.split("/")[1]
print("crop_id: %s, app_name: %s, osspath: %s"%(crop_id,app_name,oss_path))
api = Api()
success = api.new_privacy(str(crop_id), app_name, oss_path)
#是否更新本地文件
path = "../../../app/src/main/assets/web/".replace("/",os.path.sep)
if not os.path.exists(path):
os.makedirs(path)
if success and update_local == "true":
resp = requests.get(privacy_url);
content = resp.text
encode = chardet.detect(resp.content)['encoding']
with io.open(path+"privacy.html", "w+", encoding=encode) as fout:
fout.write(content)
print("本地协议已更新!" + privacy_url)
ksp_url=privacy_url.replace(".html","Ksp.html")
resp = requests.get(ksp_url)
content = resp.text
encode = chardet.detect(resp.content)['encoding']
if "<Code>NoSuchKey</Code>" not in content:
with io.open(path+"privacyKsp.html", "w+", encoding=encode) as fout:
fout.write(content)
print("本地KSP协议已更新!" + ksp_url)
cd ../../
source ./gradle.properties
git add .
git commit -m "${app_id} ${version_name}"
git push origin ${git_branch}
tagName=t${corp_id}-${app_id}
git tag -d ${tagName}
git push origin --delete tag ${tagName}
git tag -a ${tagName} -m ${tagName}
git push origin ${tagName}
\ No newline at end of file
. ../../gradle.properties
developer="sikang"
cus_crop_id=$1
if((${#cus_crop_id}==0))
then
cus_crop_id="${corp_id_majia}"
fi
if((${#cus_crop_id}==0))
then
cus_crop_id="${corp_id}"
fi
echo "1、commit + push + push_tag + 自动发包登记 (需要配置分支)"
echo "2、自动记录发包(读取包名)"
echo "3、手动记录发包(手动指定包名)"
echo " "
echo -n "请输入指令编号:"
read commod
echo -n "此次上架方案:"
read action
chmod a+x gponline.py
if (($commod == '1'))
then
cd ../../
git add .
git commit -m "${app_id} ${version_name}"
git push origin ${git_branch}
tagName=t${corp_id}-${app_id}
git tag -d ${tagName}
git push origin --delete tag ${tagName}
git tag -a ${tagName} -m ${tagName}
git push origin ${tagName}
cd lib_base/script
python gponline.py "${cus_crop_id}" "${level}" "${developer}" "${app_id}" "${action}"
elif (($commod == '2'))
then
python gponline.py "${cus_crop_id}" "${level}" "${developer}" "${app_id}" "${action}"
elif (($commod == '3'))
then
echo -n "输入要指定的包名:"
read pkgname
python gponline.py "${cus_crop_id}" "${level}" "${developer}" "${pkgname}" "${action}"
else
echo "找不到编号"
fi
#!/usr/bin/env bash
echo "1、GP包(无权限)"
echo "2、渠道包(有权限)"
echo -n "选择打包方式:"
read action
cd ../../
. gradle.properties
rm -rf resGuardApks
gradlew clean
init(){
#api混淆
if [ -e "script/api_mapping" ]; then
cd lib_base/script/code
./rename_api.py || { echo "rename_api error!"; exit 1; }
cd ../../../
fi
cd lib_base/script/garble
#字符串混淆
python string_decrypt.py || { echo "string_decrypt error!"; exit 1; }
#四大组件混淆
./rename_project.sh || { echo "rename_project error!"; exit 1; }
#代码结构混淆
./insert.py || { echo "insert_code error!"; exit 1; }
cd ../../../
}
if((${action}=='1'))
then
cd lib_base/script
./sdk_manager.py 'close' 'NOLOG' || { echo "sdk_manager error!!!!!!!!!!!!!!!"; exit 1; }
if [ "${contact}" = "true" ];then
./sdk_manager.py 'open' 'CONTACT' || { echo "sdk_manager error!!!!!!!!!!!!"; exit 1; }
elif [ "${contact}" = "false" ];then
./sdk_manager.py 'close' 'CONTACT' || { echo "sdk_manager error!!!!!!!!!!!!"; exit 1; }
fi
cd ../..
init
gradlew resguardAppProductGoogleplayRelease
elif((${action}=='2'))
then
init
gradlew resguardAppProductWebsiteRelease
#elif((${action}=='3'))
#then
# mv app/src/main/res/drawable-xxhdpi/logo_majia1.png app/src/main/res/drawable-xxhdpi/logo.png
# mv script/api_mapping_majia1 script/api_mapping
# LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name1}#g" gradle.properties
# init
# gradlew resguardAppProductGoogleplayRelease
#
#elif((${action}=='4'))
#then
# mv app/src/main/res/drawable-xxhdpi/logo_majia2.png app/src/main/res/drawable-xxhdpi/logo.png
# LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name2}#g" gradle.properties
# mv script/api_mapping_majia2 script/api_mapping
# init
# gradlew resguardAppProductGoogleplayRelease
#
#elif((${action}=='5'))
#then
# mv app/src/main/res/drawable-xxhdpi/logo_majia3.png app/src/main/res/drawable-xxhdpi/logo.png
# LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name3}#g" gradle.properties
# mv script/api_mapping_majia3 script/api_mapping
# init
# gradlew resguardAppProductGoogleplayRelease
else
echo "未知的打包方式"
fi
gradlew clean
cd lib_base/script/garble/
./reset_name.sh
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def check_error(path):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
# readlines以列表的形式将文件读出
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if "R.drawable." in line:
line = line + "\n" + new_func_code() + "\n"
f_w.write(line)
return
for root, dirs, files in os.walk("../../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
# get the path of the java file
path = os.path.join(directory, file)
add_func(path)
\ No newline at end of file
# #!/usr/bin/env python3
# import string
# import glob, os
# import sys
# import re
#
# def getNewName(file):
# if re.match(r"[0-9]*", string, flags=0) or file.startswith("_"):
#
# return file
#
#
#
# for root, dirs, files in os.walk("../../../app/src/main/res/drawable-xxhdpi"):
# directory = os.path.join(os.getcwd(), root)
# for file in files:
# if file.endswith(".java"):
# # get the path of the java file
# path = os.path.join(directory, file)
# os.rename(path,os.path.join(directory,getNewName(file)))
import requests
import json
import string
import random
import glob, os
import sys
path = "../../../gradle.properties"
gw_url=os.popen('. ../../../gradle.properties\necho "${gateway_url}"').read().replace('\n', '')
if len(sys.argv) > 1:
gw_url=sys.argv[1]
print(gw_url)
gateway = requests.get(gw_url).json()
print(gateway)
with open(path, "r") as f:
lines = f.readlines()
with open(path, "w") as f_w:
for line in lines:
if "base_url=" in line:
line = "base_url=\"%s\"\n"%(gateway['rest'][0])
elif "harvest_ip=" in line:
harvester=gateway['harvester'][0].split(":")
line = "harvest_ip=\"%s:%s\"\n"%(harvester[0],harvester[1])
elif "harvest_port=" in line:
line = "harvest_port=%s\n"%(gateway['harvester'][0].split(":")[2])
elif "gateway_ip=" in line:
ip = gateway['gateway'][0]
if len(gateway['gateway']) > 1:
ip = gateway['gateway'][1]
line = "gateway_ip=\"%s\"\n"%(ip)
elif "repayment_h5=" in line:
line = "repayment_h5=\"%s\"\n"%(gateway['repay'][0])
elif "admin_host=" in line:
line = "admin_host=\"%s\"\n"%(gateway['admin'][0])
elif "agreement_url=" in line:
line = "agreement_url=\"%s\"\n"%(gateway['privacy'][0])
elif "home=" in line and "home" in gateway.keys():
line = "home=\"%s\"\n"%(gateway['home'][0])
line = line.replace("http:","https:")
f_w.write(line)
. ../../gradle.properties
echo "脚本使用帮助"
echo "0、修改包名、版本号+1"
echo "1、编译release版本"
echo "2、创建新的签名文件"
echo "3、commit 和 push Base代码"
echo "4、commit 和 push UI代码 (需手动修改分支)"
echo "5、pull lib_base + tool_box "
echo "6、pull tool_box 代码 "
echo "7、为 resGuardApks 目录下的 *_release.apk 打渠道包"
echo "8、提交一个渠道包Tag"
echo "9、开始四大组件混淆"
echo "10、插入乱码"
echo "11、还原代码"
echo "12、SDK插拔"
echo "13、copy apk"
echo "14、生成工具包"
echo "15、功能代码同步"
echo "16、压缩切图"
echo "17、给GP图片添加水印"
echo "18、加固"
echo "19、混淆api"
echo "20、更新GP状态"
echo "21、获取签名秘钥散列"
echo "22、更新gateway"
echo "23、字符串加密"
echo "24、添加toolbox库"
echo "25、马甲包切换"
echo "26、打印checklist"
echo "27、更换隐私协议"
echo "28、刷新本地协议"
echo "29、生成隐协议文件"
echo " "
if [[ "$app_name" == "$majia_name" ]];then
echo "****** 当前为马甲包 ******"
else
echo "****** 当前为主包 ******"
fi
echo -n "请输入指令编号:"
read commod
if (($commod == '0'))
then
cd garble
chmod a+x pkgname_generator.py
python pkgname_generator.py "${app_name}"
elif (($commod == '1'))
then
chmod a+x release_builder.sh
./release_builder.sh
elif (($commod == '2'))
then
chmod a+x creat_keystore.sh
./creat_keystore.sh
elif (($commod == '3'))
then
chmod a+x base_push.sh
./base_push.sh
elif (($commod == '4'))
then
# chmod a+x module_push.sh
# ./module_push.sh
cd ../../
source ./gradle.properties
git add .
git commit -m "${app_id} ${version_name}"
git push origin ${git_branch}
elif (($commod == '5'))
then
cd ../..
git submodule update --remote
cd lib_base
git checkout master
git pull
cd ..
git submodule update --remote
cd cash_plugin_toolbox
git checkout master
git pull
cd ..
git submodule update --remote
cd lib_yitu || { echo "lib_yitu not exist"; exit 1; }
git checkout master
git pull
elif (($commod == '6'))
then
cd ../../
git submodule update --remote
cd cash_plugin_toolbox
git checkout master
git pull
elif (($commod == '7'))
then
chmod a+x make_channel.sh
./make_channel.sh
elif (($commod == '8'))
then
chmod a+x push_with_tag.sh
./push_with_tag.sh
elif (($commod == '9'))
then
cd garble
chmod a+x rename_project.sh
./rename_project.sh
elif (($commod == '10'))
then
cd garble
# chmod a+x insert.py
# ./insert.py
elif (($commod == '11'))
then
cd garble
chmod a+x reset_name.sh
./reset_name.sh
elif (($commod == '12'))
then
echo "1、开启SDK"
echo "2、关闭SDK"
echo -n "请选择操作:"
read action
echo "TD(同盾)、AF(Appsflyer)"
echo -n "输入要操作的SDK代码:"
read sdk
chmod a+x sdk_manager.py
if (($action == '1'))
then
./sdk_manager.py 'open' ${sdk}
elif (($action == '2'))
then
./sdk_manager.py 'close' ${sdk}
fi
elif (($commod == '13'))
then
chmod a+x move_apk.sh
./move_apk.sh
elif (($commod == '14'))
then
chmod a+x build_tool_apk.sh
./build_tool_apk.sh
elif (($commod == '15'))
then
cd code
chmod a+x code_sync.sh
./code_sync.sh
elif (($commod == '16'))
then
chmod a+x tinypng.py
./tinypng.py -d ../../app/src/main/res/drawable-xxhdpi
elif (($commod == '17'))
then
chmod a+x mark_screen_img.py
./mark_screen_img.py "${corp_id}" "${signing_keyAlias}"
elif (($commod == '18'))
then
chmod a+x jiagu.sh
./jiagu.sh
elif (($commod == '19'))
then
cd code
chmod a+x rename_api.py
./rename_api.py
elif (($commod == '20'))
then
# chmod a+x refresh_gponline.sh
# if((${#1} > 0))
# then
# gp_release/gp_release.sh
# else
# gp_release/gp_release.sh
# fi
cd ../../
project_path=$(cd `dirname $0`; pwd)
cd ../gp_release
./release.sh "${project_path##*/}" "${corp_id}${1}"
elif (($commod == '21'))
then
echo -n "散列:"
keytool -exportcert -alias ${signing_keyAlias} -keystore "app/${signing_certificate}" -storepass "${signing_keyAlias}" | openssl sha1 -binary | openssl base64
cd print
echo "包名:${app_id}"
python print_splash_path.py
elif (($commod == '22'))
then
cd res
chmod a+x update_gateway.py
python update_gateway.py
elif (($commod == '23'))
then
cd garble
# chmod a+x string_decrypt.py
# python string_decrypt.py
elif (($commod == '24'))
then
cd code
chmod a+x update_setting_gradle.py
python update_setting_gradle.py
cd ../../../
git submodule add https://git.starwin.tech/sikang/cash_plugin_toolbox.git
elif (($commod == '25'));then
export http_proxy=http://127.0.0.1:1087
export https_proxy=http://127.0.0.1:1087
cd ../..
echo "1、切换到主包"
echo "2、切换到马甲包"
echo -n "请选择操作:"
read action
if (($action == '1'))
then
#主包Logo
cp app/src/main/res/drawable-xxhdpi/logo_main.png app/src/main/res/drawable-xxhdpi/logo.png || { echo "logo_main.png not exist"; exit 1; }
#主包混淆文件
rm script/api_mapping
cp script/api_mapping_main script/api_mapping
# rm app/src/main/assets/web/privacy.html
# cp app/src/main/assets/web/privacy_main.html app/src/main/assets/web/privacy.html
#APP名替换
LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name='${main_name}'#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^gateway_url=.*#gateway_url=\"${gateway_main}\"#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^host_app=.*#host_app=true#g" gradle.properties
#更新gw
cd lib_base/script/res
chmod a+x update_gateway.py
python update_gateway.py
elif (($action == '2'))
then
#马甲logo替换主logo
cp app/src/main/res/drawable-xxhdpi/logo_majia.png app/src/main/res/drawable-xxhdpi/logo.png || { echo "logo_majia.png not exist"; exit 1; }
#马甲混淆文件替换
rm script/api_mapping
cp script/api_mapping_majia script/api_mapping
# rm app/src/main/assets/web/privacy.html
# cp app/src/main/assets/web/privacy_majia.html app/src/main/assets/web/privacy.html
#APP名替换
LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name='${majia_name}'#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^gateway_url=.*#gateway_url=\"${gateway_mj}\"#g" gradle.properties
LC_CTYPE=C && LANG=C && sed -i "" "s#^host_app=.*#host_app=false#g" gradle.properties
#更新gw
cd lib_base/script/res
chmod a+x update_gateway.py
python update_gateway.py
fi
elif (($commod == '26')) || (($commod == '266'));then
if (($commod == '266'));then
echo "${corp_id} ${app_name} "
echo "包名:${app_id}"
echo "对内协议:${agreement_url}"
echo "对外协议:${home}/privacy.html"
exit 1;fi
params="?name=${app_name// /%20}&list=12356"
if [ ${contact} != 'true' ];then
params="?name=${app_name// /%20}&list=2356";fi
echo " "
echo "${corp_id} ${app_name} "
echo "包名:${app_id}"
echo "对内协议:${agreement_url}${params}"
echo "对外协议:${home}/privacy.html${params}"
echo "gateway:${gateway_url}"
# echo "官网:${home}"
echo " "
cd print
code=${desc_code}
if [[ ! ${code} ]];then
code=-1
fi
python create_desc.py "${app_name}" "${cus_email}" "${hot_line}" "${cus_adress}" "${corp_id}" "${home}/privacy.html" "${home}" ${code}
echo " "
file_name="${corp_id}_${app_name}"
mv /Users/connor/Documents/apks/"${file_name}.apk" /Users/connor/Documents/apks/"${file_name}/app.apk"
mv /Users/connor/Documents/apks/"${file_name}.html" /Users/connor/Documents/apks/"${file_name}/privacy.html"
cp ../../../app/src/main/res/drawable-xxhdpi/logo.png /Users/connor/Documents/apks/"${file_name}/logo.png"
cp ../../../app/src/main/res/drawable-xxhdpi/top.png /Users/connor/Documents/apks/"${file_name}/top.png"
res="../../../app/src/main/res/drawable-xxhdpi"
python screen_maker.py "${res}/bg01.png" "${res}/logo.png" "${res}/top.png" "/Users/connor/Documents/apks/${file_name}/"
echo "截图制作完成"
#elif (($commod == '27'));then
# cd privacy
# python update_privacy.py "${corp_id}" "${app_name}" "${agreement_url}" "true"
elif (($commod == '28'));then
export http_proxy=http://127.0.0.1:1087
export https_proxy=http://127.0.0.1:1087
cd privacy
python update_local.py "${agreement_url}"
elif (($commod == '29'));then
cd privacy
permissions="12356"
if [ ${contact} != 'true' ];then
permissions="2356";fi
file_name="${corp_id}_${app_name}"
echo "path url: ${home}/privacy1.html"
python new_privacy.py "${app_name}" "${permissions}" "/Users/connor/Documents/apks/privacy/privacy0.html" "/Users/connor/Documents/apks/${file_name}.html"
elif (($commod == '10000'))
then
cd ..
git reset --hard origin/master
else
echo "找不到编号"
fi
\ No newline at end of file
#!/usr/bin/env python3
import json
import string
import random
import glob, os
import sys
def close_sdk(path, sdk):
# print("processing content: %s..." % path)
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
is_sdk_code = False
for line in lines:
if "//SDK-"+sdk+"-END" in line or "<!--SDK-"+sdk+"-END-->" in line:
is_sdk_code = False
java_mark ="//SDK-" + sdk + "-CODE ->";
xml_mark ="<!--SDK-" + sdk + "-CODE//";
if (path.endswith(".java") or path.endswith(".gradle")) and is_sdk_code and java_mark not in line:
line = java_mark + line
if path.endswith(".xml") and is_sdk_code and xml_mark not in line:
line = xml_mark + line.replace("\n","//-->\n")
if "//SDK-"+sdk+"-START" in line or "<!--SDK-"+sdk+"-START-->" in line:
is_sdk_code = True
f_w.write(line)
return
def open_sdk(path, sdk):
# print("processing content: %s..." % path)
code_mark = "//SDK-" + sdk + "-CODE ->"
xml_mark = "<!--SDK-" + sdk + "-CODE//"
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(path, "w", encoding="utf-8") as f_w:
for line in lines:
if code_mark in line:
line = line.replace(code_mark,"")
if xml_mark in line:
line = line.replace(xml_mark,"").replace("//-->","")
f_w.write(line)
return
print ("params "+sys.argv[1] + " "+sys.argv[2])
lib_base_gradle = "../build.gradle"
if sys.argv[1] == 'open':
open_sdk(lib_base_gradle, sys.argv[2])
else:
close_sdk(lib_base_gradle, sys.argv[2])
app_build_gradle = "../../app/build.gradle"
if sys.argv[1] == 'open':
open_sdk(app_build_gradle, sys.argv[2])
else:
close_sdk(app_build_gradle, sys.argv[2])
for root, dirs, files in os.walk("../../app/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java") or file.endswith("AndroidManifest.xml") or file.endswith(".gradle"):
# get the path of the java file
path = os.path.join(directory, file)
if sys.argv[1] == 'open':
open_sdk(path, sys.argv[2])
else:
close_sdk(path, sys.argv[2])
for root, dirs, files in os.walk("../../lib_base/src/main"):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java") or file.endswith("AndroidManifest.xml") or file.endswith(".gradle"):
# get the path of the java file
path = os.path.join(directory, file)
if sys.argv[1] == 'open':
open_sdk(path, sys.argv[2])
else:
close_sdk(path, sys.argv[2])
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import sys
import os.path
import click
import tinify
tinify.key = "n4Wk9JHJ20T30cWCnyLHjMbMvm1xFKJk" # API KEY
version = "1.0.1" # 版本
# 压缩的核心
def compress_core(inputFile, outputFile, img_width):
source = tinify.from_file(inputFile)
if img_width is not -1:
resized = source.resize(method = "scale", width = img_width)
resized.to_file(outputFile)
else:
source.to_file(outputFile)
# 压缩一个文件夹下的图片
def compress_path(path, width):
print "compress_path-------------------------------------"
if not os.path.isdir(path):
print "这不是一个文件夹,请输入文件夹的正确路径!"
return
else:
fromFilePath = path # 源路径
toFilePath = path#+"/tiny" # 输出路径
print "fromFilePath=%s" %fromFilePath
print "toFilePath=%s" %toFilePath
for root, dirs, files in os.walk(fromFilePath):
print "root = %s" %root
print "dirs = %s" %dirs
print "files= %s" %files
for name in files:
fileName, fileSuffix = os.path.splitext(name)
if fileSuffix == '.png' or fileSuffix == '.jpg' or fileSuffix == '.jpeg':
toFullPath = toFilePath + root[len(fromFilePath):]
toFullName = toFullPath + '/' + name
if os.path.isdir(toFullPath):
pass
else:
os.mkdir(toFullPath)
compress_core(root + '/' + name, toFullName, width)
break # 仅遍历当前目录
# 仅压缩指定文件
def compress_file(inputFile, width):
print "compress_file-------------------------------------"
if not os.path.isfile(inputFile):
print "这不是一个文件,请输入文件的正确路径!"
return
print "file = %s" %inputFile
dirname = os.path.dirname(inputFile)
basename = os.path.basename(inputFile)
fileName, fileSuffix = os.path.splitext(basename)
if fileSuffix == '.png' or fileSuffix == '.jpg' or fileSuffix == '.jpeg':
compress_core(inputFile, dirname+"/tiny_"+basename, width)
else:
print "不支持该文件类型!"
@click.command()
@click.option('-f', "--file", type=str, default=None, help="单个文件压缩")
@click.option('-d', "--dir", type=str, default=None, help="被压缩的文件夹")
@click.option('-w', "--width", type=int, default=-1, help="图片宽度,默认不变")
def run(file, dir, width):
print ("GcsSloop TinyPng V%s" %(version))
if file is not None:
compress_file(file, width) # 仅压缩一个文件
pass
elif dir is not None:
compress_path(dir, width) # 压缩指定目录下的文件
pass
else:
compress_path(os.getcwd(), width) # 压缩当前目录下的文件
print "结束!"
if __name__ == "__main__":
run()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment