Terminé con un script que corrige las fuentes; parchar la fuente suena arriesgado, pero en presencia de control de versión el riesgo es aceptable.
Así que hice una versión, comprometí la fuente, hice la otra versión, comprometí la fuente, y mirando diffs escribí una secuencia de comandos en Python.
No estoy seguro de si es la mejor solución. (Y el código pierde algo de os.path.uniones)
El corazón de la secuencia de comandos es la siguiente función:
# In the file 'fname',
# find the text matching "before oldtext after" (all occurrences) and
# replace 'oldtext' with 'newtext' (all occurrences).
# If 'mandatory' is true, raise an exception if no replacements were made.
def fileReplace(fname,before,newtext,after,mandatory=True):
with open(fname, 'r+') as f:
read_data = f.read()
pattern = r"("+re.escape(before)+r")\w+("+re.escape(after)+r")"
replacement = r"\1"+newtext+r"\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 "",")"
elif replacements_made:
print fname,":"
print new_data
elif mandatory:
raise Exception("cannot patch the file: "+fname)
y usted puede encontrar el siguiente de uso:
# Change the application resource package name everywhere in the src/ tree.
# Yes, this changes the java files. We hope that if something goes wrong,
# the version control will save us.
def patchResourcePackageNameInSrc(pname):
for root, dirs, files in os.walk('src'):
if '.svn' in dirs:
dirs.remove('.svn')
for fname in files:
fileReplace(os.path.join(root,fname),"import com.xyz.",pname,".R;",mandatory=False)
También hay una función que copia los activos de x-assets-cfgname
a assets
(anteriormente resultó que para mí es más conveniente tener un subdirectorio en assets
).
def copyAssets(vname,force=False):
assets_source = "x-assets-"+vname+"/xxx"
assets_target = "assets/xxx"
if not os.path.exists(assets_source):
raise Exception("Invalid variant name: "+vname+" (the assets directory "+assets_source+" does not exist)")
if os.path.exists(assets_target+"/.svn"):
raise Exception("The assets directory must not be under version control! "+assets_target+"/.svn exists!")
if os.path.exists(assets_target):
shutil.rmtree(assets_target)
shutil.copytree(assets_source, assets_target, ignore=shutil.ignore_patterns('.svn'))
Bueno, ya te has planteado la idea. Ahora puedes escribir tu propia secuencia de comandos.
He respondido una pregunta similar aquí, quizás también pueda ayudarlo: http://stackoverflow.com/questions/16840127/how-to-install-the-same-app-twice-without-interference/21332803 # 21332803 –
La respuesta aceptada es un poco anticuada. Hay uno publicado por craned que probablemente sea la forma correcta de hacerlo. – Darthg8r
Usted ** definitivamente ** quiere usar ['Gradle' sabores] (http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors) que viene de forma nativa, incluso se recomienda en Android Studio. – craned