Sin embargo, ¿cómo puedo hacer que string / app_name sea diferente por sabor?
Quería escribir una actualización, pero me di cuenta de que es más grande que la respuesta original que dice que uso un script de Python que parchea la fuente.
La secuencia de comandos de Python tiene un parámetro, un nombre de directorio. Ese directorio contiene activos por sabor, recursos como íconos de iniciador y el archivo properties.txt con un diccionario de Python.
{ 'someBoolean' : True
, 'someParam' : 'none'
, 'appTitle' : '@string/x_app_name_xyz'
}
La secuencia de comandos de Python carga el diccionario desde ese archivo y reemplaza el valor entre <string name="app_name">
y </string>
por el valor de properties['appTitle']
.
El siguiente código se proporciona tal cual está / como estaba, etc.
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_/@\- ]+")
para leer las propiedades de uno o más de estos archivos:
with open(filename1) as f:
properties = eval(f.read())
with open(filename2) as f:
properties.update(eval(f.read()))
y la función fileReplace es:
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+"'")
Las primeras líneas del guión son:
#!/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