Tuttavia, come faccio a rendere la stringa / nome_app diverso in base al gusto?
Volevo scrivere un aggiornamento, ma mi sono reso conto che è più grande della risposta originale dicendo che uso uno script Python che patcha il sorgente.
Lo script Python ha un parametro, un nome di directory. Quella directory contiene risorse per gusto, risorse come icone di avvio e il file properties.txt con un dizionario Python.
{ 'someBoolean' : True
, 'someParam' : 'none'
, 'appTitle' : '@string/x_app_name_xyz'
}
Lo script Python carica il dizionario da quel file e sostituisce il valore compreso tra <string name="app_name">
e </string>
con il valore di properties['appTitle']
.
Il codice seguente viene fornito così com'è / così com'era ecc.
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_/@\- ]+")
per leggere le proprietà da uno o più di questi file:
with open(filename1) as f:
properties = eval(f.read())
with open(filename2) as f:
properties.update(eval(f.read()))
e la funzione 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+"'")
Le prime righe dello script sono:
#!/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