ฉันจะทำให้ string / app_name แตกต่างกันตามรสชาติได้อย่างไร
ฉันต้องการเขียนอัปเดต แต่ตระหนักว่ามันใหญ่กว่าคำตอบเดิมที่บอกว่าฉันใช้สคริปต์ Python ที่แก้ไขซอร์ส
สคริปต์ Python มีพารามิเตอร์ชื่อไดเร็กทอรี ไดเร็กทอรีนั้นมีเนื้อหาตามรสชาติทรัพยากรเช่นไอคอนตัวเรียกใช้งานและคุณสมบัติของไฟล์ txt พร้อมพจนานุกรม Python
{ 'someBoolean' : True
, 'someParam' : 'none'
, 'appTitle' : '@string/x_app_name_xyz'
}
สคริปต์ Python โหลดพจนานุกรมจากไฟล์นั้นและแทนที่ค่าระหว่าง<string name="app_name">
และ</string>
ตามค่าของproperties['appTitle']
.
รหัสด้านล่างมีให้ตามที่เป็นอยู่ / ตามที่เป็นอยู่เป็นต้น
for strings_xml in glob.glob("res/values*/strings.xml"):
fileReplace(strings_xml,'<string name="app_name">',properties['appTitle'],'</string>',oldtextpattern=r"[a-zA-Z0-9_/@\- ]+")
เพื่ออ่านคุณสมบัติจากไฟล์ดังกล่าวอย่างน้อยหนึ่งไฟล์:
with open(filename1) as f:
properties = eval(f.read())
with open(filename2) as f:
properties.update(eval(f.read()))
และฟังก์ชัน fileReplace คือ:
really = True
def fileReplace(fname,before,newtext,after,oldtextpattern=r"[\w.]+",mandatory=True):
with open(fname, 'r+') as f:
read_data = f.read()
pattern = r"("+re.escape(before)+r")"+oldtextpattern+"("+re.escape(after)+r")"
replacement = r"\g<1>"+newtext+r"\g<2>"
new_data,replacements_made = re.subn(pattern,replacement,read_data,flags=re.MULTILINE)
if replacements_made and really:
f.seek(0)
f.truncate()
f.write(new_data)
if verbose:
print "patching ",fname," (",replacements_made," occurrence" + ("s" if 1!=replacements_made else ""),")",newtext,("-- no changes" if new_data==read_data else "-- ***CHANGED***")
elif replacements_made:
print fname,":"
print new_data
elif mandatory:
raise Exception("cannot patch the file: "+fname+" with ["+newtext+"] instead of '"+before+"{"+oldtextpattern+"}"+after+"'")
บรรทัดแรกของสคริปต์คือ:
#!/usr/bin/python
# coding: utf-8
import sys
import os
import re
import os.path
import shutil
import argparse
import string
import glob
from myutils import copytreeover