Commit 6e4f52f4 authored by wanglei's avatar wanglei

[打包]打包发现的问题

parent ef7b6034
...@@ -4,6 +4,30 @@ import os ...@@ -4,6 +4,30 @@ import os
import re import re
def load_mapping():
"""Load the obfuscation mapping from mapping.json"""
try:
with open("mapping.json", "r", encoding="utf-8") as f:
mapping = json.load(f)
return mapping.get("class", {})
except (FileNotFoundError, json.JSONDecodeError) as e:
print(f"Warning: Could not load mapping.json - {e}")
return {}
def find_obfuscated_file(directory, original_name, mapping):
"""Find the obfuscated file name in the given directory"""
obfuscated_name = mapping.get(original_name, original_name)
for root, dirs, files in os.walk(directory):
for file in files:
if file == f"{obfuscated_name}.kt" or file == f"{original_name}.kt":
file_path = os.path.join(root, file)
print(f"Found config file: {file_path}")
return file_path
print(f"Could not find {obfuscated_name}.kt or {original_name}.kt in {directory}")
return None
def fetch_app_info(pkg): def fetch_app_info(pkg):
"""向指定 URL 发送请求并获取内容""" """向指定 URL 发送请求并获取内容"""
base_url = "http://data-api.zhangxinhulian.com/anonymous/getappinfoAndroid" base_url = "http://data-api.zhangxinhulian.com/anonymous/getappinfoAndroid"
...@@ -28,7 +52,6 @@ def fetch_app_info(pkg): ...@@ -28,7 +52,6 @@ def fetch_app_info(pkg):
"idMaxOpen": "ID_MAX_OPEN", "idMaxOpen": "ID_MAX_OPEN",
"idMaxBanner": "ID_MAX_BANNER", "idMaxBanner": "ID_MAX_BANNER",
"idMaxReward": "ID_MAX_REWARD", "idMaxReward": "ID_MAX_REWARD",
# "idMaxReward": "ID_ADMOB_APPLICATION"
} }
try: try:
...@@ -37,28 +60,20 @@ def fetch_app_info(pkg): ...@@ -37,28 +60,20 @@ def fetch_app_info(pkg):
data = response.json() data = response.json()
if data.get("status") == 200 and data.get("result") and data["result"].get("data"): if data.get("status") == 200 and data.get("result") and data["result"].get("data"):
app_data = data["result"]["data"] app_data = data["result"]["data"]
# 设置 packageName 为用户输入的 pkg
app_data["packageName"] = pkg app_data["packageName"] = pkg
# 将 null 转换为 ""
app_data = {key: (value if value is not None else "") for key, value in app_data.items()} app_data = {key: (value if value is not None else "") for key, value in app_data.items()}
# 打印从服务器获取到的数据字段
print("从服务器获取到的数据字段值:") print("从服务器获取到的数据字段值:")
for key, value in app_data.items(): for key, value in app_data.items():
print(f"{key}: {value}") print(f"{key}: {value}")
# 替换 key
transformed_data = {key_mapping.get(key, key): value for key, value in app_data.items()} transformed_data = {key_mapping.get(key, key): value for key, value in app_data.items()}
# 写入 JSON 文件
with open("applicationid.json", "w", encoding="utf-8") as file: with open("applicationid.json", "w", encoding="utf-8") as file:
json.dump(transformed_data, file, ensure_ascii=False, indent=4) json.dump(transformed_data, file, ensure_ascii=False, indent=4)
with open("applicationid.json", "r", encoding="utf-8") as file: with open("applicationid.json", "r", encoding="utf-8") as file:
json_data = json.load(file) json_data = json.load(file)
# 打印 applicationid.json 文件中的数据
print("\napplicationid.json 中的数据:") print("\napplicationid.json 中的数据:")
print(json_data) print(json_data)
print("数据已成功以 JSON 格式写入 applicationid.json 文件。") print("数据已成功以 JSON 格式写入 applicationid.json 文件。")
...@@ -70,57 +85,40 @@ def fetch_app_info(pkg): ...@@ -70,57 +85,40 @@ def fetch_app_info(pkg):
print(f"请求发生错误: {e}") print(f"请求发生错误: {e}")
def find_global_config(directory):
"""遍历目录查找 GlobalConfig.kt 文件"""
for root, dirs, files in os.walk(directory):
if 'GlobalConfig.kt' in files:
file_path = os.path.join(root, 'GlobalConfig.kt')
print(f"找到 GlobalConfig.kt 文件: {file_path}")
return file_path
print("未找到 GlobalConfig.kt 文件")
return None
def update_global_config(file_path, json_data): def update_global_config(file_path, json_data):
"""更新 GlobalConfig.kt 文件中的变量值""" """更新 GlobalConfig.kt 文件中的变量值"""
try: try:
with open(file_path, 'r', encoding='utf-8') as file: with open(file_path, 'r', encoding='utf-8') as file:
content = file.read() content = file.read()
# 获取 json_data 中的 adsApplicationId
ads_application_id = json_data.get("adsApplicationId") ads_application_id = json_data.get("adsApplicationId")
if ads_application_id: if ads_application_id:
# 使用正则表达式查找并替换 ID_ADMOB_APPLICATION 的值
pattern = r'\binline\s+val\s+ID_ADMOB_APPLICATION\s+get\(\)\s*=\s*.*' pattern = r'\binline\s+val\s+ID_ADMOB_APPLICATION\s+get\(\)\s*=\s*.*'
replacement = f'inline val ID_ADMOB_APPLICATION get() = "{ads_application_id}"' replacement = f'inline val ID_ADMOB_APPLICATION get() = "{ads_application_id}"'
content = re.sub(pattern, replacement, content) content = re.sub(pattern, replacement, content)
facebook_app_id = json_data.get("facebookAppId") facebook_app_id = json_data.get("facebookAppId")
if facebook_app_id: if facebook_app_id:
# 使用正则表达式查找并替换 ID_ADMOB_APPLICATION 的值
pattern = r'\binline\s+val\s+ID_FACEBOOK\s+get\(\)\s*=\s*.*' pattern = r'\binline\s+val\s+ID_FACEBOOK\s+get\(\)\s*=\s*.*'
replacement = f'inline val ID_FACEBOOK get() = "{facebook_app_id}"' replacement = f'inline val ID_FACEBOOK get() = "{facebook_app_id}"'
content = re.sub(pattern, replacement, content) content = re.sub(pattern, replacement, content)
# 遍历 JSON 数据中的每个变量名,并在 GlobalConfig.kt 中更新对应的值
for var_name, var_value in json_data.items(): for var_name, var_value in json_data.items():
# 替换 const val 的值
pattern_const = rf'\bconst\s+val\s+{re.escape(var_name)}\s*=\s*.*' pattern_const = rf'\bconst\s+val\s+{re.escape(var_name)}\s*=\s*.*'
replacement_const = f'const val {var_name} = "{var_value}"' replacement_const = f'const val {var_name} = "{var_value}"'
content = re.sub(pattern_const, replacement_const, content) content = re.sub(pattern_const, replacement_const, content)
pattern_inline = rf'\binline\s+val\s+{re.escape(var_name)}\s+get\(\)\s*=\s*.*' pattern_inline = rf'\binline\s+val\s+{re.escape(var_name)}\s+get\(\)\s*=\s*.*'
replacement_inline = f'inline val {var_name} get() = "{var_value}"' replacement_inline = f'inline val {var_name} get() = "{var_value}"'
content = re.sub(pattern_inline, replacement_inline, content) content = re.sub(pattern_inline, replacement_inline, content)
# 将修改后的内容写回到 GlobalConfig.kt 文件
with open(file_path, 'w', encoding='utf-8') as file: with open(file_path, 'w', encoding='utf-8') as file:
file.write(content) file.write(content)
print("\nGlobalConfig.kt 文件已成功更新。") print("\n配置文件已成功更新。")
except Exception as e: except Exception as e:
print(f"更新文件时发生错误: {e}") print(f"更新文件时发生错误: {e}")
def update_google_services(json_data): def update_google_services(json_data):
"""更新 google-services.json 文件内容""" """更新 google-services.json 文件内容"""
try: try:
...@@ -133,21 +131,17 @@ def update_google_services(json_data): ...@@ -133,21 +131,17 @@ def update_google_services(json_data):
if google_services_raw: if google_services_raw:
try: try:
# 如果是 URL,就去下载内容 if google_services_raw.startswith(("https://", "http://")):
if google_services_raw.startswith("https://") or google_services_raw.startswith("http://"):
print(f"检测到 URL,开始下载: {google_services_raw}") print(f"检测到 URL,开始下载: {google_services_raw}")
response = requests.get(google_services_raw, verify=False) response = requests.get(google_services_raw, verify=False)
response.raise_for_status() response.raise_for_status()
google_services_raw = response.text google_services_raw = response.text
# 反序列化
google_services_data = json.loads(google_services_raw) google_services_data = json.loads(google_services_raw)
# 写入文件
with open(google_services_path, "w", encoding="utf-8") as file: with open(google_services_path, "w", encoding="utf-8") as file:
json.dump(google_services_data, file, ensure_ascii=False, indent=4) json.dump(google_services_data, file, ensure_ascii=False, indent=4)
# 打印写入内容
with open(google_services_path, "r", encoding="utf-8") as file: with open(google_services_path, "r", encoding="utf-8") as file:
written_data = file.read() written_data = file.read()
print("\ngoogle-services.json 文件已更新,写入的内容如下:") print("\ngoogle-services.json 文件已更新,写入的内容如下:")
...@@ -183,7 +177,6 @@ def update_google_services(json_data): ...@@ -183,7 +177,6 @@ def update_google_services(json_data):
def update_build_gradle(json_data): def update_build_gradle(json_data):
"""更新 build.gradle 或 build.gradle.kts 文件中的 applicationId 值""" """更新 build.gradle 或 build.gradle.kts 文件中的 applicationId 值"""
try: try:
# 查找 build.gradle.kts 文件
build_gradle_kts_path = os.path.join(os.getcwd(), "build.gradle.kts") build_gradle_kts_path = os.path.join(os.getcwd(), "build.gradle.kts")
build_gradle_path = os.path.join(os.getcwd(), "build.gradle") build_gradle_path = os.path.join(os.getcwd(), "build.gradle")
build_file_path = None build_file_path = None
...@@ -197,31 +190,26 @@ def update_build_gradle(json_data): ...@@ -197,31 +190,26 @@ def update_build_gradle(json_data):
print("未找到 build.gradle 或 build.gradle.kts 文件。") print("未找到 build.gradle 或 build.gradle.kts 文件。")
return return
# 从 applicationid.json 中获取 PACKAGE_NAME 的值
package_name = json_data.get("PACKAGE_NAME") package_name = json_data.get("PACKAGE_NAME")
if package_name: if package_name:
with open(build_file_path, "r", encoding="utf-8") as file: with open(build_file_path, "r", encoding="utf-8") as file:
content = file.read() content = file.read()
# 根据文件名选择不同的正则表达式
if build_file_path.endswith(".kts"): if build_file_path.endswith(".kts"):
# 匹配 applicationId 的值,无论其格式如何(字符串或变量引用)
pattern = r'applicationId\s*=\s*[^\s]+' pattern = r'applicationId\s*=\s*[^\s]+'
replacement = f'applicationId = "{package_name}"' replacement = f'applicationId = "{package_name}"'
new_content = re.sub(pattern, replacement, content) else:
else: # build.gradle pattern = r'applicationId\s*\'[^\']+\''
pattern = r'applicationId\s*\'[^\']+\'' # 匹配单引号字符串
replacement = f'applicationId \'{package_name}\'' replacement = f'applicationId \'{package_name}\''
new_content = re.sub(pattern, replacement, content) if pattern not in content:
if new_content == content: # 如果单引号没有匹配到则匹配双引号字符串
pattern = r'applicationId\s*"[^"]+"' pattern = r'applicationId\s*"[^"]+"'
replacement = f'applicationId "{package_name}"' replacement = f'applicationId "{package_name}"'
new_content = re.sub(pattern, replacement, content)
# 写入更新后的内容 new_content = re.sub(pattern, replacement, content)
with open(build_file_path, "w", encoding="utf-8") as file: with open(build_file_path, "w", encoding="utf-8") as file:
file.write(new_content) file.write(new_content)
# 打印更新后的内容
print(f"\n{os.path.basename(build_file_path)} 文件已更新,更新后的内容如下:") print(f"\n{os.path.basename(build_file_path)} 文件已更新,更新后的内容如下:")
print(new_content) print(new_content)
else: else:
...@@ -234,23 +222,19 @@ def update_build_gradle(json_data): ...@@ -234,23 +222,19 @@ def update_build_gradle(json_data):
def update_android_manifest(pkg): def update_android_manifest(pkg):
'''更新 AndroidManifest.xml 文件中的 Facebook App ID''' '''更新 AndroidManifest.xml 文件中的 Facebook App ID'''
try: try:
# 查找 AndroidManifest.xml 文件
file_path = os.path.join('.', 'src', 'main', 'AndroidManifest.xml') file_path = os.path.join('.', 'src', 'main', 'AndroidManifest.xml')
if os.path.exists(file_path): if os.path.exists(file_path):
print(f"找到 AndroidManifest.xml 文件: {file_path}") print(f"找到 AndroidManifest.xml 文件: {file_path}")
# 从 applicationid.json 中获取 facebookAppId 的值
facebookAppId = json_data.get("facebookAppId") facebookAppId = json_data.get("facebookAppId")
if facebookAppId: if facebookAppId:
with open(file_path, "r", encoding="utf-8") as file: with open(file_path, "r", encoding="utf-8") as file:
content = file.read() content = file.read()
# 替换 facebookAppId 的值,无论其格式如何(字符串或变量引用)
pattern = r'<meta-data\s*android:name="com\.facebook\.sdk\.ApplicationId"\s*android:value\s*=\s*[^\s]+' pattern = r'<meta-data\s*android:name="com\.facebook\.sdk\.ApplicationId"\s*android:value\s*=\s*[^\s]+'
replacement = f'<meta-data android:name="com.facebook.sdk.ApplicationId"\n android:value = "{facebookAppId}"' replacement = f'<meta-data android:name="com.facebook.sdk.ApplicationId"\n android:value = "{facebookAppId}"'
new_content = re.sub(pattern, replacement, content) new_content = re.sub(pattern, replacement, content)
# 写入更新后的内容
with open(file_path, "w", encoding="utf-8") as file: with open(file_path, "w", encoding="utf-8") as file:
file.write(new_content) file.write(new_content)
...@@ -259,7 +243,6 @@ def update_android_manifest(pkg): ...@@ -259,7 +243,6 @@ def update_android_manifest(pkg):
else: else:
print("applicationid.json 中未找到 facebookAppId 的值。") print("applicationid.json 中未找到 facebookAppId 的值。")
# 从 applicationid.json 中获取 adsApplicationId 的值
adsApplicationId = json_data.get("adsApplicationId") adsApplicationId = json_data.get("adsApplicationId")
if adsApplicationId: if adsApplicationId:
with open(file_path, "r", encoding="utf-8") as file: with open(file_path, "r", encoding="utf-8") as file:
...@@ -269,7 +252,6 @@ def update_android_manifest(pkg): ...@@ -269,7 +252,6 @@ def update_android_manifest(pkg):
replacement = f'<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"\n android:value = "{adsApplicationId}"' replacement = f'<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"\n android:value = "{adsApplicationId}"'
new_content = re.sub(pattern, replacement, content) new_content = re.sub(pattern, replacement, content)
# 写入更新后的内容
with open(file_path, "w", encoding="utf-8") as file: with open(file_path, "w", encoding="utf-8") as file:
file.write(new_content) file.write(new_content)
...@@ -278,18 +260,17 @@ def update_android_manifest(pkg): ...@@ -278,18 +260,17 @@ def update_android_manifest(pkg):
else: else:
print("applicationid.json 中未找到 adsApplicationId 的值。") print("applicationid.json 中未找到 adsApplicationId 的值。")
# 从 applicationid.json 中获取 PACKAGE_NAME 的值
PACKAGE_NAME = json_data.get("PACKAGE_NAME") PACKAGE_NAME = json_data.get("PACKAGE_NAME")
if PACKAGE_NAME: if PACKAGE_NAME:
with open(file_path, "r", encoding="utf-8") as file: with open(file_path, "r", encoding="utf-8") as file:
content = file.read() content = file.read()
# 更宽松的正则表达式模式
pattern = r""" pattern = r"""
android:permission="com\.google\.android\.c2dm\.permission\.SEND"\s*> android:permission="com\.google\.android\.c2dm\.permission\.SEND"\s*>
\s*<intent-filter>\s* \s*<intent-filter>\s*
\s*<action\s+android:name="com\.google\.firebase\.MESSAGING_EVENT"\s*/>\s* \s*<action\s+android:name="com\.google\.firebase\.MESSAGING_EVENT"\s*/>\s*
\s*<action\s+android:name="com\.google\.android\.c2dm\.intent\.RECEIVE"\s*/>\s* \s*<action\s+android:name="com\.google\.android\.c2dm\.intent\.RECEIVE"\s*/>\s*
\s*<category\s+android:name="([^"]+)"\s*/>\s* # 捕获 category 值 \s*<category\s+android:name="([^"]+)"\s*/>\s*
\s*</intent-filter> \s*</intent-filter>
""" """
replacement = f""" replacement = f"""
...@@ -301,47 +282,17 @@ def update_android_manifest(pkg): ...@@ -301,47 +282,17 @@ def update_android_manifest(pkg):
</intent-filter> </intent-filter>
""" """
# 执行替换操作,使用 re.VERBOSE 忽略空白和注释,使用 re.DOTALL 匹配换行
new_content = re.sub(pattern, replacement, content, flags=re.VERBOSE | re.DOTALL) new_content = re.sub(pattern, replacement, content, flags=re.VERBOSE | re.DOTALL)
# 判断是否匹配到并进行了替换
if new_content != content: if new_content != content:
print("替换成功,内容已更新。") print("替换成功,内容已更新。")
# 将修改后的内容写回文件
with open(file_path, 'w', encoding='utf-8') as file: with open(file_path, 'w', encoding='utf-8') as file:
file.write(new_content) file.write(new_content)
else: else:
print("没有找到匹配的内容,文件未更改。") print("没有找到匹配的内容,文件未更改。")
# pattern = r""" print("\nAndroidManifest.xml 文件已更新,c2dm.permission.SEND 更新后的内容如下:")
# android:permission="com.google.android.c2dm.permission.SEND"> print(new_content)
# <intent-filter>(.*?)<category android:name="\s*([^"]+)"
# """
#
# replacement = f"""
# android:permission="com.google.android.c2dm.permission.SEND">
# <intent-filter>\1
# <category android:name="{PACKAGE_NAME}"
# """
#
# #pattern = r'android:permission="com.google.android.c2dm.permission.SEND">'
# #r'<intent-filter>'
# #r'<action android:name="com.google.firebase.MESSAGING_EVENT" />'
# #r'<action android:name="com.google.android.c2dm.intent.RECEIVE" />'
#
# #r'<category android:name\s*=\s*[^\s]+'
# #replacement = f' android:permission="com.google.android.c2dm.permission.SEND">'
# #f'<intent-filter>'
# #f'<action android:name="com.google.firebase.MESSAGING_EVENT" />'
# #f'<action android:name="com.google.android.c2dm.intent.RECEIVE" /> android:name = "{PACKAGE_NAME}"'
# new_content = re.sub(pattern, replacement, content)
# 写入更新后的内容
with open(file_path, "w", encoding="utf-8") as file:
file.write(new_content)
print("\nAndroidManifest.xml 文件已更新,c2dm.permission.SEND 更新后的内容如下:")
print(new_content)
else: else:
print("applicationid.json 中未找到 PACKAGE_NAME 的值。") print("applicationid.json 中未找到 PACKAGE_NAME 的值。")
...@@ -352,30 +303,26 @@ def update_android_manifest(pkg): ...@@ -352,30 +303,26 @@ def update_android_manifest(pkg):
if __name__ == "__main__": if __name__ == "__main__":
# Load obfuscation mapping
mapping = load_mapping()
pkg_input = input("请输入 pkg 的值:") pkg_input = input("请输入 pkg 的值:")
if pkg_input.strip(): if pkg_input.strip():
fetch_app_info(pkg_input.strip()) fetch_app_info(pkg_input.strip())
# 查找 GlobalConfig.kt 文件 # Find the config file (either original or obfuscated name)
java_src_dir = os.path.join(os.getcwd(), "src", "main", "java") java_src_dir = os.path.join(os.getcwd(), "src", "main", "java")
global_config_path = find_global_config(java_src_dir) config_file_path = find_obfuscated_file(java_src_dir, "GlobalConfig", mapping)
# 读取 applicationid.json 文件并获取数据 # Read applicationid.json and update files
if global_config_path and os.path.exists("applicationid.json"): if config_file_path and os.path.exists("applicationid.json"):
with open("applicationid.json", "r", encoding="utf-8") as file: with open("applicationid.json", "r", encoding="utf-8") as file:
json_data = json.load(file) json_data = json.load(file)
# 更新 GlobalConfig.kt 文件 update_global_config(config_file_path, json_data)
update_global_config(global_config_path, json_data)
# 更新 google-services.json 文件
update_google_services(json_data) update_google_services(json_data)
# 更新 build.gradle.kts 文件
update_build_gradle(json_data) update_build_gradle(json_data)
# 更新 AndroidManifest.xml
update_android_manifest(json_data["PACKAGE_NAME"]) update_android_manifest(json_data["PACKAGE_NAME"])
else: else:
print("pkg 不能为空!") print("pkg 不能为空!")
\ No newline at end of file
...@@ -160,6 +160,7 @@ abstract class BaseActivity<VB : ViewBinding>( ...@@ -160,6 +160,7 @@ abstract class BaseActivity<VB : ViewBinding>(
// intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) // intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent) startActivity(intent)
finish()
} }
var dialog: Dialog? = null var dialog: Dialog? = null
......
...@@ -136,7 +136,9 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle ...@@ -136,7 +136,9 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
setClean() setClean()
AdsMgr.showInsert(this, true, showCallBack = object : AdsShowCallBack() { AdsMgr.showInsert(this, true, showCallBack = object : AdsShowCallBack() {
override fun next() { override fun next() {
binding.idShouzhi.visibility = View.VISIBLE if (total > 0L) {
binding.idShouzhi.visibility = View.VISIBLE
}
} }
}) })
} }
......
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