web-dev-qa-db-fra.com

Comment générer buildConfigField avec le type String

Dans mon projet Android Studio, il y a deux build configuration avec quelque buildConfigField:

    buildTypes {
    def SERVER_URL = "SERVER_URL"
    def APP_VERSION = "APP_VERSION"

    debug {
        buildConfigField "String", SERVER_URL, "http://dev.myserver.com"
        buildConfigField "String", APP_VERSION, "0.0.1"
    }

    release {
        buildConfigField "String", SERVER_URL, "https://myserver.com"
        buildConfigField "String", APP_VERSION, "0.0.1"

        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}

Je reçois et erreur comme suit:

/path/to/generated/BuildConfig.Java
    Error:(14, 47) error: ';' expected
    Error:(15, 47) error: ';' expected

buildCofig.Java généré est le suivant:

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.mycuteoffice.mcoapp";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "";
    public static final int VERSION_CODE = 1;
    public static final String VERSION_NAME = "1.0";
    // Fields from build type: debug
    public static final String APP_VERSION = 0.0.1;
    public static final String SERVER_URL = http://dev.mycuteoffice.com;
}

Je pense que les APP_VERSION et SERVER_URL ne sont pas générés correctement car ils sont de type String, ils n'ont pas de guillemets. 

Je ne sais pas pourquoi cela est généré de cette manière. S'il vous plaît laissez-moi savoir comment puis-je résoudre ces problèmes. 

96
Abdullah

Les champs de configuration de construction de type chaîne doivent être déclarés comme suit:

buildConfigField "String", "SERVER_URL", "\"http://dev.myserver.com\""

le nom du champ entre guillemets, la valeur du champ entre guillemets échappés.

165

Pourquoi tout le monde est tellement fou d'échapper aux guillemets? C'est moche! C'est Groovy, les gars, vous pouvez juste mélanger des guillemets simples et doubles:

buildConfigField "String", 'SERVER_URL', '"http://dev.myserver.com"'
buildConfigField "String", 'APP_VERSION', '"0.0.1"'
72
madhead

Si vous entendez par «résoudre les problèmes» le fait de ne pas avoir à doubler les littéraux, je n'ai rien trouvé car cela semble fonctionner comme prévu. 

J'ai essayé de déplacer les littéraux dans "gradle.properties" comme solution de contournement, transformant potentiellement plusieurs lignes laides en une seule ligne laide.

Ainsi:

buildTypes {
def SERVER_URL = "SERVER_URL"
def APP_VERSION = "APP_VERSION"

def CONFIG = { k -> "\"${project.properties.get(k)}\"" }

debug {
    buildConfigField "String", SERVER_URL, CONFIG("debug.server.url")
    buildConfigField "String", APP_VERSION, CONFIG("version")
}

release {
    buildConfigField "String", SERVER_URL, CONFIG("release.server.url")
    buildConfigField "String", APP_VERSION, CONFIG("version")

    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}

gradle.properties

version=0.1.1
...
debug.server.url=http://dev.myserver.com
...
release.server.url=http://myserver.com
...

Autres réflexions:


def CONFIG = { b,k -> "\"${project.properties.get(b+'.'+k)}\"" }
def CONFIG_DEBUG = { k -> CONFIG('debug',k) }
def CONFIG_RELEASE = { k -> CONFIG('release',k) }

def CONFIG = { b,k -> "\"${project.properties.get(b+'.'+k)}\"" }
def CONFIG_INT = { b,k -> "${project.properties.get(b+'.'+k)}" }
...
21
Primexx

Échappez à vos guillemets:

buildConfigField "String", 'SERVER_URL', "\"http://dev.myserver.com\""
buildConfigField "String", 'APP_VERSION', "\"0.0.1\""
9
Simas

Utilisation

 buildConfigField "String", "FILE_NAME", "\"{$fileName}\"" 

pour variable. Référence de ici

4
Audi

Seul\"my stuff \" a fonctionné pour moi. Et j'ai toutes sortes de caractères étranges dans my stuff.

0
Sevastyan

dans l'application build.gradle

def buildTimeAndVersion = releaseTime() + "-" + getSvnVersion()    
buildTypes {
debug {
    signingConfig signingConfigs.config
    buildConfigField "String", 'BIULD_TIME', "\"${buildTimeAndVersion}\""
    proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}
...
}

static def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getDefault())
}

def getSvnVersion() {
def pro = ("svnversion -c " + getBuildDir().parent).execute()
pro.waitFor()
def version = pro.in.text
Pattern p = Pattern.compile("(\\d+\\:)?(\\d+)\\D?")
Matcher m = p.matcher(version)
if (m.find()) {
version = m.group(m.groupCount())
}
try {
return version
} catch (e) {
println e.getMessage()
}
return 0
}

puis dans BuildConfig

public final class BuildConfig {  
public static final boolean DEBUG = Boolean.parseBoolean("true");   
public static final String APPLICATION_ID = "xxx.xxxxxxxx.xxx";   
public static final String BUILD_TYPE = "debug";  
public static final String FLAVOR = "";  
public static final int VERSION_CODE = 53;  
public static final String VERSION_NAME = "5.4.4";  
// Fields from build type: debug  
public static final String BIULD_TIME = "20181030-2595";  
}
0
yitai wei