Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
A
appzxhy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
appzxhy
Commits
d018de55
Commit
d018de55
authored
Jun 10, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[打包]提交换值脚本
parent
c5b183f7
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
381 additions
and
0 deletions
+381
-0
GetInfo.py
app/GetInfo.py
+381
-0
No files found.
app/GetInfo.py
0 → 100644
View file @
d018de55
import
requests
import
json
import
os
import
re
def
fetch_app_info
(
pkg
):
"""向指定 URL 发送请求并获取内容"""
base_url
=
"http://data-api.zhangxinhulian.com/anonymous/getappinfoAndroid"
params
=
{
"pkg"
:
pkg
}
key_mapping
=
{
"packageName"
:
"PACKAGE_NAME"
,
"urlEvent"
:
"URL_EVENT"
,
"urlApi"
:
"URL_API"
,
"urlPrivacy"
:
"URL_PRIVACY"
,
"urlUse"
:
"URL_USE"
,
"keyAes"
:
"KEY_AES"
,
"keySolar"
:
"KEY_SOLAR"
,
"keyMax"
:
"KEY_MAX"
,
"idAdmobInter"
:
"ID_ADMOB_INTER"
,
"idAdmobNative"
:
"ID_ADMOB_NATIVE"
,
"idAdmobOpen"
:
"ID_ADMOB_OPEN"
,
"idAdmobBanner"
:
"ID_ADMOB_BANNER"
,
"idAdmobReward"
:
"ID_ADMOB_REWARD"
,
"idMaxInter"
:
"ID_MAX_INTER"
,
"idMaxNative"
:
"ID_MAX_NATIVE"
,
"idMaxOpen"
:
"ID_MAX_OPEN"
,
"idMaxBanner"
:
"ID_MAX_BANNER"
,
"idMaxReward"
:
"ID_MAX_REWARD"
,
# "idMaxReward": "ID_ADMOB_APPLICATION"
}
try
:
response
=
requests
.
get
(
base_url
,
params
=
params
,
timeout
=
10
)
if
response
.
status_code
==
200
:
data
=
response
.
json
()
if
data
.
get
(
"status"
)
==
200
and
data
.
get
(
"result"
)
and
data
[
"result"
]
.
get
(
"data"
):
app_data
=
data
[
"result"
][
"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
()}
# 打印从服务器获取到的数据字段
print
(
"从服务器获取到的数据字段值:"
)
for
key
,
value
in
app_data
.
items
():
print
(
f
"{key}: {value}"
)
# 替换 key
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
:
json
.
dump
(
transformed_data
,
file
,
ensure_ascii
=
False
,
indent
=
4
)
with
open
(
"applicationid.json"
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
json_data
=
json
.
load
(
file
)
# 打印 applicationid.json 文件中的数据
print
(
"
\n
applicationid.json 中的数据:"
)
print
(
json_data
)
print
(
"数据已成功以 JSON 格式写入 applicationid.json 文件。"
)
else
:
print
(
f
"未找到有效的 data 数据: {data}"
)
else
:
print
(
f
"请求失败,状态码: {response.status_code}, 响应内容: {response.text}"
)
except
requests
.
RequestException
as
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
):
"""更新 GlobalConfig.kt 文件中的变量值"""
try
:
with
open
(
file_path
,
'r'
,
encoding
=
'utf-8'
)
as
file
:
content
=
file
.
read
()
# 获取 json_data 中的 adsApplicationId
ads_application_id
=
json_data
.
get
(
"adsApplicationId"
)
if
ads_application_id
:
# 使用正则表达式查找并替换 ID_ADMOB_APPLICATION 的值
pattern
=
r'\binline\s+val\s+ID_ADMOB_APPLICATION\s+get\(\)\s*=\s*.*'
replacement
=
f
'inline val ID_ADMOB_APPLICATION get() = "{ads_application_id}"'
content
=
re
.
sub
(
pattern
,
replacement
,
content
)
facebook_app_id
=
json_data
.
get
(
"facebookAppId"
)
if
facebook_app_id
:
# 使用正则表达式查找并替换 ID_ADMOB_APPLICATION 的值
pattern
=
r'\binline\s+val\s+ID_FACEBOOK\s+get\(\)\s*=\s*.*'
replacement
=
f
'inline val ID_FACEBOOK get() = "{facebook_app_id}"'
content
=
re
.
sub
(
pattern
,
replacement
,
content
)
# 遍历 JSON 数据中的每个变量名,并在 GlobalConfig.kt 中更新对应的值
for
var_name
,
var_value
in
json_data
.
items
():
# 替换 const val 的值
pattern_const
=
rf
'
\b
const
\
s+val
\
s+{re.escape(var_name)}
\
s*=
\
s*.*'
replacement_const
=
f
'const val {var_name} = "{var_value}"'
content
=
re
.
sub
(
pattern_const
,
replacement_const
,
content
)
pattern_inline
=
rf
'
\b
inline
\
s+val
\
s+{re.escape(var_name)}
\
s+get
\
(
\
)
\
s*=
\
s*.*'
replacement_inline
=
f
'inline val {var_name} get() = "{var_value}"'
content
=
re
.
sub
(
pattern_inline
,
replacement_inline
,
content
)
# 将修改后的内容写回到 GlobalConfig.kt 文件
with
open
(
file_path
,
'w'
,
encoding
=
'utf-8'
)
as
file
:
file
.
write
(
content
)
print
(
"
\n
GlobalConfig.kt 文件已成功更新。"
)
except
Exception
as
e
:
print
(
f
"更新文件时发生错误: {e}"
)
def
update_google_services
(
json_data
):
"""更新 google-services.json 文件内容"""
try
:
google_services_path
=
os
.
path
.
join
(
os
.
getcwd
(),
"google-services.json"
)
if
os
.
path
.
exists
(
google_services_path
):
print
(
f
"找到 google-services.json 文件: {google_services_path}"
)
google_services_raw
=
json_data
.
get
(
"googleServices"
)
package_name
=
json_data
.
get
(
"PACKAGE_NAME"
)
if
google_services_raw
:
try
:
# 如果是 URL,就去下载内容
if
google_services_raw
.
startswith
(
"https://"
)
or
google_services_raw
.
startswith
(
"http://"
):
print
(
f
"检测到 URL,开始下载: {google_services_raw}"
)
response
=
requests
.
get
(
google_services_raw
,
verify
=
False
)
response
.
raise_for_status
()
google_services_raw
=
response
.
text
# 反序列化
google_services_data
=
json
.
loads
(
google_services_raw
)
# 写入文件
with
open
(
google_services_path
,
"w"
,
encoding
=
"utf-8"
)
as
file
:
json
.
dump
(
google_services_data
,
file
,
ensure_ascii
=
False
,
indent
=
4
)
# 打印写入内容
with
open
(
google_services_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
written_data
=
file
.
read
()
print
(
"
\n
google-services.json 文件已更新,写入的内容如下:"
)
print
(
written_data
)
except
requests
.
RequestException
as
e
:
print
(
f
"下载 googleServices URL 失败: {e}"
)
except
json
.
JSONDecodeError
as
e
:
print
(
f
"googleServices 值的反序列化失败: {e}"
)
else
:
if
package_name
:
print
(
"googleServices 的值为空,尝试更新 package_name。"
)
with
open
(
google_services_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
google_services_data
=
json
.
load
(
file
)
if
"client"
in
google_services_data
:
for
client
in
google_services_data
[
"client"
]:
if
"client_info"
in
client
and
"android_client_info"
in
client
[
"client_info"
]:
client
[
"client_info"
][
"android_client_info"
][
"package_name"
]
=
package_name
print
(
f
"已将 package_name 更新为: {package_name}"
)
with
open
(
google_services_path
,
"w"
,
encoding
=
"utf-8"
)
as
file
:
json
.
dump
(
google_services_data
,
file
,
ensure_ascii
=
False
,
indent
=
4
)
print
(
"
\n
google-services.json 文件已更新(更新 package_name)。"
)
else
:
print
(
"未找到 PACKAGE_NAME 值,无法更新 package_name。"
)
else
:
print
(
"未找到 google-services.json 文件。"
)
except
Exception
as
e
:
print
(
f
"更新 google-services.json 文件时发生错误: {e}"
)
def
update_build_gradle
(
json_data
):
"""更新 build.gradle 或 build.gradle.kts 文件中的 applicationId 值"""
try
:
# 查找 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_file_path
=
None
if
os
.
path
.
exists
(
build_gradle_kts_path
):
build_file_path
=
build_gradle_kts_path
print
(
f
"找到 build.gradle.kts 文件: {build_file_path}"
)
elif
os
.
path
.
exists
(
build_gradle_path
):
build_file_path
=
build_gradle_path
print
(
f
"找到 build.gradle 文件: {build_file_path}"
)
else
:
print
(
"未找到 build.gradle 或 build.gradle.kts 文件。"
)
return
# 从 applicationid.json 中获取 PACKAGE_NAME 的值
package_name
=
json_data
.
get
(
"PACKAGE_NAME"
)
if
package_name
:
with
open
(
build_file_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
content
=
file
.
read
()
# 根据文件名选择不同的正则表达式
if
build_file_path
.
endswith
(
".kts"
):
# 匹配 applicationId 的值,无论其格式如何(字符串或变量引用)
pattern
=
r'applicationId\s*=\s*[^\s]+'
replacement
=
f
'applicationId = "{package_name}"'
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
)
else
:
# build.gradle
pattern
=
r'applicationId\s*\'[^\']+\''
# 匹配单引号字符串
replacement
=
f
'applicationId
\'
{package_name}
\'
'
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
)
if
new_content
==
content
:
# 如果单引号没有匹配到则匹配双引号字符串
pattern
=
r'applicationId\s*"[^"]+"'
replacement
=
f
'applicationId "{package_name}"'
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
)
# 写入更新后的内容
with
open
(
build_file_path
,
"w"
,
encoding
=
"utf-8"
)
as
file
:
file
.
write
(
new_content
)
# 打印更新后的内容
print
(
f
"
\n
{os.path.basename(build_file_path)} 文件已更新,更新后的内容如下:"
)
print
(
new_content
)
else
:
print
(
"applicationid.json 中未找到 PACKAGE_NAME 的值。"
)
except
Exception
as
e
:
print
(
f
"更新 {os.path.basename(build_file_path)} 文件时发生错误: {e}"
)
def
update_android_manifest
(
pkg
):
'''更新 AndroidManifest.xml 文件中的 Facebook App ID'''
try
:
# 查找 AndroidManifest.xml 文件
file_path
=
os
.
path
.
join
(
'.'
,
'src'
,
'main'
,
'AndroidManifest.xml'
)
if
os
.
path
.
exists
(
file_path
):
print
(
f
"找到 AndroidManifest.xml 文件: {file_path}"
)
# 从 applicationid.json 中获取 facebookAppId 的值
facebookAppId
=
json_data
.
get
(
"facebookAppId"
)
if
facebookAppId
:
with
open
(
file_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
content
=
file
.
read
()
# 替换 facebookAppId 的值,无论其格式如何(字符串或变量引用)
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}"'
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
)
# 写入更新后的内容
with
open
(
file_path
,
"w"
,
encoding
=
"utf-8"
)
as
file
:
file
.
write
(
new_content
)
print
(
"
\n
AndroidManifest.xml 文件已更新,facebookAppId 更新后的内容如下:"
)
print
(
new_content
)
else
:
print
(
"applicationid.json 中未找到 facebookAppId 的值。"
)
# 从 applicationid.json 中获取 adsApplicationId 的值
adsApplicationId
=
json_data
.
get
(
"adsApplicationId"
)
if
adsApplicationId
:
with
open
(
file_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
content
=
file
.
read
()
pattern
=
r'<meta-data\s*android:name="com\.google\.android\.gms\.ads\.APPLICATION_ID"\s*android:value\s*=\s*[^\s]+'
replacement
=
f
'<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
\n
android:value = "{adsApplicationId}"'
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
)
# 写入更新后的内容
with
open
(
file_path
,
"w"
,
encoding
=
"utf-8"
)
as
file
:
file
.
write
(
new_content
)
print
(
"
\n
AndroidManifest.xml 文件已更新,adsApplicationId 更新后的内容如下:"
)
print
(
new_content
)
else
:
print
(
"applicationid.json 中未找到 adsApplicationId 的值。"
)
# 从 applicationid.json 中获取 PACKAGE_NAME 的值
PACKAGE_NAME
=
json_data
.
get
(
"PACKAGE_NAME"
)
if
PACKAGE_NAME
:
with
open
(
file_path
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
content
=
file
.
read
()
# 更宽松的正则表达式模式
pattern
=
r"""
android:permission="com\.google\.android\.c2dm\.permission\.SEND"\s*>
\s*<intent-filter>\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*<category\s+android:name="([^"]+)"\s*/>\s* # 捕获 category 值
\s*</intent-filter>
"""
replacement
=
f
"""
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="{PACKAGE_NAME}" />
</intent-filter>
"""
# 执行替换操作,使用 re.VERBOSE 忽略空白和注释,使用 re.DOTALL 匹配换行
new_content
=
re
.
sub
(
pattern
,
replacement
,
content
,
flags
=
re
.
VERBOSE
|
re
.
DOTALL
)
# 判断是否匹配到并进行了替换
if
new_content
!=
content
:
print
(
"替换成功,内容已更新。"
)
# 将修改后的内容写回文件
with
open
(
file_path
,
'w'
,
encoding
=
'utf-8'
)
as
file
:
file
.
write
(
new_content
)
else
:
print
(
"没有找到匹配的内容,文件未更改。"
)
# pattern = r"""
# android:permission="com.google.android.c2dm.permission.SEND">
# <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
(
"
\n
AndroidManifest.xml 文件已更新,c2dm.permission.SEND 更新后的内容如下:"
)
print
(
new_content
)
else
:
print
(
"applicationid.json 中未找到 PACKAGE_NAME 的值。"
)
else
:
print
(
"未找到 AndroidManifest.xml 文件。"
)
except
Exception
as
e
:
print
(
f
"更新 AndroidManifest.xml 文件时发生错误: {e}"
)
if
__name__
==
"__main__"
:
pkg_input
=
input
(
"请输入 pkg 的值:"
)
if
pkg_input
.
strip
():
fetch_app_info
(
pkg_input
.
strip
())
# 查找 GlobalConfig.kt 文件
java_src_dir
=
os
.
path
.
join
(
os
.
getcwd
(),
"src"
,
"main"
,
"java"
)
global_config_path
=
find_global_config
(
java_src_dir
)
# 读取 applicationid.json 文件并获取数据
if
global_config_path
and
os
.
path
.
exists
(
"applicationid.json"
):
with
open
(
"applicationid.json"
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
json_data
=
json
.
load
(
file
)
# 更新 GlobalConfig.kt 文件
update_global_config
(
global_config_path
,
json_data
)
# 更新 google-services.json 文件
update_google_services
(
json_data
)
# 更新 build.gradle.kts 文件
update_build_gradle
(
json_data
)
# 更新 AndroidManifest.xml
update_android_manifest
(
json_data
[
"PACKAGE_NAME"
])
else
:
print
(
"pkg 不能为空!"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment