문자열 유형으로 buildConfigField를 생성하는 방법
내 Android Studio
프로젝트에는 두 가지 build configuration
가 있습니다 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'
}
}
다음과 같이 오류가 발생했습니다.
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
생성 된 내용 BuildConfig.java
은 다음과 같습니다.
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;
}
나는 생각 APP_VERSION
하고 SERVER_URL
문자열들은 따옴표가없는 입력 것으로 제대로 생성되지 않아요.
왜 그런 식으로 생성되는지 잘 모르겠습니다. 이 문제를 어떻게 해결할 수 있는지 알려주십시오.
문자열 유형 빌드 구성 필드는 다음과 같이 선언해야합니다.
buildConfigField "String", "SERVER_URL", "\"http://dev.myserver.com\""
따옴표 안의 필드 이름, 이스케이프 된 따옴표 안의 필드 값
왜 모두가 큰 따옴표를 이스케이프하는 것에 대해 화를 내는가? 못 생겼어! 이것은 Groovy입니다. 작은 따옴표와 큰 따옴표를 섞을 수 있습니다.
buildConfigField "String", 'SERVER_URL', '"http://dev.myserver.com"'
buildConfigField "String", 'APP_VERSION', '"0.0.1"'
"문제를 해결하는 것"이 리터럴을 큰 따옴표로 묶을 필요가 없다는 것을 의미한다면, 의도 한대로 작동하는 것처럼 보이지 않습니다.
해결 방법으로 리터럴을 " gradle.properties "로 이동하여 잠재적으로 여러 못생긴 줄을 하나의 못생긴 줄로 바꾸는 실험을 해왔 습니다.
이렇게 :
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
...
추가 생각 :
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)}" }
...
나도 혼란 스러웠다. 그러나 "문자열"은 필드 유형을 정의하지만 필드 값은 자동으로 인용되지 않으므로 여기에서 표현식을 사용할 수 있습니다.
buildConfigField "String", "TEST", "new Integer(10).toString()"
그렇지 않으면 불가능합니다.
당신의 문자열 따옴표를 탈출 :
buildConfigField "String", 'SERVER_URL', "\"http://dev.myserver.com\""
buildConfigField "String", 'APP_VERSION', "\"0.0.1\""
사용하다
buildConfigField "String", "FILE_NAME", "\"{$fileName}\""
변수. 여기 에서 참조
앱 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
}
그런 다음 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";
}
Only \"my stuff
\" worked for me. And I have all sorts of weird characters in my stuff
.
참고URL : https://stackoverflow.com/questions/30796533/how-to-generate-buildconfigfield-with-string-type
'Programing' 카테고리의 다른 글
Bash에서 do-while 루프 에뮬레이션 (0) | 2020.07.12 |
---|---|
페이지로드시 스크롤하여 ID로 애니메이션 (0) | 2020.07.12 |
일련의 공백을 단일 문자로 축소하고 문자열 자르기 (0) | 2020.07.11 |
GitHub를 사용하면 기존 리포지토리를 추가 할 때 모든 브랜치를 어떻게 푸시합니까? (0) | 2020.07.11 |
엘릭서 : 사용 vs 가져 오기 (0) | 2020.07.11 |