답변:
"앱 이름"으로 android:label
on 을 의미 하는 <application>
경우 가장 간단한 해결책은 해당 지점을 문자열 리소스 (예 :) android:label="@string/app_name"
에두고 src/debug/
소스 세트 에 해당 문자열 리소스의 다른 버전을 갖는 것 입니다.
이 샘플 프로젝트 에서 in에 대한 대체물이 app_name
있는 빌드 프로젝트 에 src/debug/res/values/strings.xml
적용됩니다 debug
. release
의 버전을 사용하는 빌드 app_name
의를 src/main/
.
release
문자열 이 아닌 언어를 번역 할 필요가 없습니다 .
release
으로, "릴리스"와 "테스트"빌드가 같은 장치에 공존 할 수 있도록하는 동시에 현지화 문제를 테스트하고 싶을 때와는 조금 다릅니다. 이 경우 두 빌드 모두 동일한 실행기 레이블로 끝날 수 있으며 혼동을 일으킬 수 있습니다. 그것이 내가 피하려고했던 것입니다.
release
모드 에서 사용하려는 문자열이 아닙니다 . 그리고 app_name
다른 역할이 아닌 이 문자열 리소스 만 사용하십시오 .
app_name
반드시 필요하지 않더라도 디버그 버전을 번역 할 수 있습니다 (예 : 영어를 구사하지 못하는 프랑스어 또는 독일어 개발자가 있으므로 번역해야 함). 번역과 함께 수정되지 않은 release
버전의 app_name
저작물을 테스트하기 release
위해 빌드를 테스트 하거나 near-release
앱 ID 접미사 만 추가하고 문자열 만 남겨 두는 빌드 유형을 만듭니다 .
이런 식으로 사용할 수 있습니다
buildTypes {
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
resValue "string", "app_name", "AppName debug"
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
zipAlignEnabled true
resValue "string", "app_name", "AppName"
}
}
AndroidManifest.xml 파일에서 @ string / app_name 을 사용할 수 있습니다 .
값 / 폴더에서 app_name 을 제거하십시오 (이 이름으로 항목이 없음).
resValue "string", "app_name", System.getenv("APP_NAME") ?: "MyApp"
gradle 로이 작업을 수행 할 수 있습니다.
android {
buildTypes {
release {
manifestPlaceholders = [appName: "My Standard App Name"]
}
debug {
manifestPlaceholders = [appName: "Debug"]
}
}
}
그런 다음에 AndroidManifest.xml
넣어 :
<application
android:label="${appName}"/>
<activity
android:label="${appName}">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
참고 : 또한 작동합니다 productFlavors
.
번역을 지원하려면 다음을 수행하십시오.
1. 문자열 "app_name"을 제거하십시오.
2. gradle에 추가
buildTypes {
admin {
resValue "string", "app_name", "@string/app_name_admin"
}
release {
resValue "string", "app_name", "@string/app_name_release"
}
debug {
resValue "string", "app_name", "@string/app_name_debug"
}
}
3. 매니페스트의 앱 이름을 "@ string / app_name"으로 설정
4. strings.xml 값에 추가
<string name="app_name_admin">App Admin</string>
<string name="app_name_release">App release</string>
<string name="app_name_debug">App debug</string>
app_name
에 productFlavors의 섹션 build.gradle
파일. 필요할 때 매우 편리하고 유연한 접근 방식.
앱 이름은 사용자가 볼 수 있으므로 strings.xml 파일에 보관하는 것이 좋습니다. buildTypes에 특정한 문자열을 포함하는 별도의 문자열 리소스 파일을 정의 할 수 있습니다. 사용자 정의 qa
buildType 이있는 것 같습니다. 사실이 아닌 경우 아래의 qa 부분을 무시하십시오.
└── src
├── debug
│ └── res
│ └── buildtype_strings.xml
├── release
│ └── res
│ └── buildtype_strings.xml
└── qa
└── res
└── buildtype_strings.xml
현지화 (다국어)로 앱 이름을 지원하는 솔루션이 필요합니다. @Nick Unuchek 솔루션으로 테스트했지만 빌드가 실패합니다 (@ string /을 찾을 수 없음). 이 버그를 수정하기위한 약간의 변경 : build.gradle 파일 :
android {
ext{
APP_NAME = "@string/app_name_default"
APP_NAME_DEV = "@string/app_name_dev"
}
productFlavors{
prod{
manifestPlaceholders = [ applicationLabel: APP_NAME]
}
dev{
manifestPlaceholders = [ applicationLabel: APP_NAME_DEV ]
}
}
values \ strings.xml :
<resources>
<string name="app_name_default">AAA prod</string>
<string name="app_name_dev">AAA dev</string>
</resources>
values-en \ strings.xml :
<resources>
<string name="app_name_default">AAA prod en</string>
<string name="app_name_dev">AAA dev en</string>
</resources>
Manifest.xml :
<application
android:label="${applicationLabel}" >
</application>
tools:replace="android:label"
에 application
에AndroidManifest
더 역동적 인 gradle 기반 솔루션 (예 : 기본 응용 프로그램 이름을 strings.xml
한 번에 설정하고 각 맛 / 빌드 유형 조합에서 반복하지 마십시오 strings.xml
)은 https://stackoverflow.com/a/32220436/1128600을 참조 하십시오.
strings.xml
다른 폴더에서 사용할 수 있습니다 . 릴리스 및 디버그 빌드에 대해서는 Android의 별도 문자열 값을 참조하십시오 .
따라서이 파일을 작성하십시오.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Your app name</string>
</resources>
그런 다음 폴더 app\src\debug\res\values\
와 app\src\release\res\values\
폴더에 붙여 넣습니다 . 디버그 및 릴리스 파일에서 "앱 이름"을 바꾸십시오. 제거 app_name
에서 항목 strings.xml
에 app\src\main\res\values\
폴더.
에서 AndroidManifest
동일한있을 것이다
<application
android:label="@string/app_name"
...
전혀 변화가 없습니다. AndroidManifest
파일과 함께 라이브러리를 추가하더라도 strings.xml
.
작성자가 Gradle 에서이 작업을 수행하도록 요청 하면 구성 파일이 아닌 스크립트에서 수행하려고한다고 가정 할 수 있습니다. 모두 이후 안드로이드 스튜디오 및 Gradle을가 크게 업데이트 작년에 수정되었습니다 (~ 2018) 위의 모든 다른 답변은 지나치게 뒤틀린 것 같다. 쉬운 방법은 다음을 추가하는 것입니다 app/build.gradle
.
android {
...
buildTypes {
...
// Rename/Set default APK name prefix (app*.apk --> AwesomeApp*.apk)
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def appName = "AwesomeApp"
outputFileName = appName+"-${output.baseName}-${variant.versionName}.apk"
}
}
}