-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.py
92 lines (71 loc) · 3.42 KB
/
init.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import os
import json
import re
import shutil
def load_metadata(meta_file):
with open(meta_file, 'r') as file:
return json.load(file)
def replace_in_file(file_path, replacements):
with open(file_path, 'r') as file:
content = file.read()
for old, new in replacements.items():
content = re.sub(re.escape(old), new, content)
with open(file_path, 'w') as file:
file.write(content)
print(f"Updated file: {file_path}")
def rename_package_path(base_path, old_package, new_package):
old_path = os.path.join(base_path, *old_package.split('.'))
new_path = os.path.join(base_path, *new_package.split('.'))
if os.path.exists(old_path):
shutil.move(old_path, new_path)
print(f"Renamed package path from {old_path} to {new_path}.")
else:
print(f"Warning: Old package path '{old_path}' does not exist!")
def update_gradle_file(gradle_file, metadata):
replacements = {
"$(name)": metadata["name"],
"$(details)": metadata["details"],
"$(version_name)": metadata["version_name"],
"$(version_code)": metadata["version_code"],
"$(application_id)": metadata["new_package"]
}
replace_in_file(gradle_file, replacements)
def update_strings_xml(strings_xml_path, metadata):
if not os.path.exists(strings_xml_path):
print(f"Warning: strings.xml not found at {strings_xml_path}")
return
with open(strings_xml_path, 'r') as file:
content = file.read()
updated_content = re.sub(r'(<string\s+name="app_name">)(.*?)(</string>)', rf'\1{metadata["name"]}\3', content)
updated_content = re.sub(r'(<string\s+name="app_details">)(.*?)(</string>)', rf'\1{metadata["details"]}\3', updated_content)
with open(strings_xml_path, 'w') as file:
file.write(updated_content)
print(f"Updated app_name to '{metadata['name']}' and app_details to '{metadata['details']}' in strings.xml.")
def update_source_files(source_dir, old_package, new_package):
for root, _, files in os.walk(source_dir):
for file in files:
if file.endswith(".java") or file.endswith(".kt"):
file_path = os.path.join(root, file)
replace_in_file(file_path, {f"package {old_package}": f"package {new_package}"})
print(f"Updated package name in {file_path}")
def process_android_project(meta_file_path):
if not os.path.exists(meta_file_path):
print(f"Error: Metadata file not found at {meta_file_path}")
return
metadata = load_metadata(meta_file_path)
required_keys = ["old_package", "new_package", "name", "details", "version_name", "version_code"]
for key in required_keys:
if key not in metadata:
print(f"Error: Missing key '{key}' in metadata file.")
return
app_src_main_java = os.path.abspath("app/src/main/java/")
gradle_file = os.path.abspath("app/build.gradle")
strings_xml_path = os.path.abspath("app/src/main/res/values/strings.xml")
update_source_files(app_src_main_java, metadata["old_package"], metadata["new_package"])
rename_package_path(app_src_main_java, metadata["old_package"], metadata["new_package"])
update_gradle_file(gradle_file, metadata)
update_strings_xml(strings_xml_path, metadata)
print("Project renaming and updates complete!")
if __name__ == "__main__":
meta_file_path = os.path.abspath("./_meta.json")
process_android_project(meta_file_path)