Ich habe ein Skript entwickelt, das die Quellen patcht; Parcheando der Quelle klingt riskant, aber in Anwesenheit der Versionskontrolle ist das Risiko akzeptabel.
Also erstellte ich eine Version, übertrug den Quellcode, erstellte die andere Version, übertrug den Quellcode und schrieb anhand der Diffs ein Parcheando-Skript in Python.
Ich bin mir nicht sicher, ob das die beste Lösung ist. (Und der Code vermisst einige os.path.joins)
Das Herzstück des Skripts ist die folgende Funktion:
# 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)
Und vielleicht finden Sie den folgenden Artikel nützlich:
# 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)
Es gibt auch eine Funktion, die Assets aus x-assets-cfgname
a assets
(Es hat sich herausgestellt, dass es für mich bequemer ist, ein Unterverzeichnis in 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'))
Nun, Sie verstehen schon. Jetzt können Sie Ihr eigenes Drehbuch schreiben.
0 Stimmen
Ich habe eine ähnliche Frage hier beantwortet, vielleicht kann sie auch Ihnen helfen: stackoverflow.com/questions/16840127/
2 Stimmen
Die akzeptierte Antwort ist ein wenig veraltet. Es gibt eine, die von craned gepostet wurde, die wahrscheinlich die jetzt korrekte Vorgehensweise ist.
0 Stimmen
Vous definitiv nutzen wollen
Gradle
Geschmäcker die von Haus aus in Android Studio enthalten ist, sogar gefördert.