Different app names for different build flavors?

前端 未结 9 1699
-上瘾入骨i
-上瘾入骨i 2020-12-07 11:07

I have 2 build flavors, say, flavor1 and flavor2.

I would like my application to be named, say, \"AppFlavor1\" when I build for flavor1 an

9条回答
  •  天命终不由人
    2020-12-07 11:15

    How do I make string/app_name different per flavor though?

    I wanted to write an update, but realized that it is bigger than the original answer saying that I use a Python script that patches the source.

    The Python script has a parameter, a directory name. That directory contains per-flavor assets, resources like launcher icons, and the file properties.txt with a Python dictionary.

    { 'someBoolean' : True
    , 'someParam' : 'none'
    , 'appTitle' : '@string/x_app_name_xyz'
    }
    

    The Python script loads the dictionary from that file and replaces the value between and by the value of properties['appTitle'].

    The below code is provided on the as-is/as-was basis etc.

    for strings_xml in glob.glob("res/values*/strings.xml"):
        fileReplace(strings_xml,'',properties['appTitle'],'',oldtextpattern=r"[a-zA-Z0-9_/@\- ]+")
    

    to read properties from one or more such file:

    with open(filename1) as f:
        properties = eval(f.read())
    with open(filename2) as f:
        properties.update(eval(f.read()))
    

    and the fileReplace function is:

    really = True
    #False for debugging
    
    # 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,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+"'")
    

    The first lines of the script are:

    #!/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
    

提交回复
热议问题