Làm cách nào để tạo chuỗi / app_name khác nhau theo từng hương vị?
Tôi muốn viết một bản cập nhật, nhưng nhận ra rằng nó lớn hơn câu trả lời ban đầu nói rằng tôi sử dụng tập lệnh Python để vá nguồn.
Tập lệnh Python có một tham số, một tên thư mục. Thư mục đó chứa nội dung theo hương vị, các tài nguyên như biểu tượng trình khởi chạy và tệp property.txt với từ điển Python.
{ 'someBoolean' : True
, 'someParam' : 'none'
, 'appTitle' : '@string/x_app_name_xyz'
}
Tập lệnh Python tải từ điển từ tệp đó và thay thế giá trị giữa <string name="app_name">
và </string>
bằng giá trị của properties['appTitle']
.
Mã dưới đây được cung cấp trên cơ sở nguyên trạng / nguyên trạng, v.v.
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_/@\- ]+")
để đọc các thuộc tính từ một hoặc nhiều tệp như vậy:
with open(filename1) as f:
properties = eval(f.read())
with open(filename2) as f:
properties.update(eval(f.read()))
và hàm fileReplace là:
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+"'")
Những dòng đầu tiên của script là:
#!/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