No meu Android Studio
projeto, existem dois build configuration
com alguns 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'
}
}
Estou recebendo e erro da seguinte maneira:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
o gerado BuildConfig.java
é o seguinte:
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;
}
Eu acho que o APP_VERSION
e SERVER_URL
não está sendo gerado corretamente como sendo do tipo String, eles não têm aspas.
Não sei por que está sendo gerado dessa maneira. Informe-me como posso resolver esses problemas.
android
android-gradle-plugin
Abdullah
fonte
fonte
buildConfigField "String", APP_VERSION, ' "0.0.1" '
(sem espaços, é claro)Respostas:
Os campos de configuração de construção do tipo string devem ser declarados assim:
o nome do campo entre aspas, o valor do campo nas aspas escapadas adicionalmente.
fonte
SERVER_URL
aspas. Você saberia se tentasse antes de comentar. A mensagem de erro éError:(32, 0) Could not find property 'SERVER_URL' on BuildType_...
def FIELD_NAME = "SERVER_URL"
ebuildConfigField "boolean", FIELD_NAME, "false"
trabalhar bem juntos. Se você não encontrar a definição de SERVER_URL, poderá travar, provavelmente é o que está fazendo de errado.Por que todo mundo está tão louco por escapar de aspas duplas? Parece feio! Isso é Groovy, pessoal, você pode misturar aspas simples e duplas:
fonte
Se, ao "resolver os problemas", você quer dizer não precisar colocar aspas literais, não encontrei nada, pois parece estar funcionando conforme o planejado.
Eu tenho experimentado mover os literais para " gradle.properties " como uma solução alternativa, transformando potencialmente várias linhas feias em uma linha feia.
Igual a:
gradle.properties
Pensamentos adicionais:
fonte
CONFIG = { k -> if (project.properties.containsKey(k)) "\"${project.properties.get(k)}\"" else throw new RuntimeException("No such variable: " + k) }
Eu também estava confuso. Mas há um sentido - "String" define o tipo do campo, enquanto o valor do campo não é citado automaticamente para permitir o uso de expressões aqui:
buildConfigField "String", "TEST", "new Integer(10).toString()"
Caso contrário, não seria possível.
fonte
Escapa suas citações de string:
fonte
Usar
para variável. Referência daqui
fonte
no aplicativo build.gradle
depois no BuildConfig
fonte
Apenas \ "
my stuff
\" funcionou para mim. E eu tenho todos os tipos de personagens estranhosmy stuff
.fonte