gradle을 사용하여 APK 파일 이름에서 versionName을 설정하는 방법은 무엇입니까?
gradle 자동 생성 APK 파일 이름에 특정 버전 번호를 설정하려고합니다.
이제 gradle이 생성 myapp-release.apk
되지만 다음과 같이 보이기를 원합니다 myapp-release-1.0.apk
.
지저분한 것 같은 이름 바꾸기 옵션을 시도했습니다. 이를 수행하는 간단한 방법이 있습니까?
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.each { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
}
}
나는 운이없이 위의 코드를 시도했습니다. 어떤 제안? (그라들 1.6 사용)
한 곳에서 버전 이름 만 변경하면됩니다. 코드도 간단합니다.
아래 예제는 선택한 빌드 변형에 따라 이름이 MyCompany-MyAppName-1.4.8-debug.apk 또는 MyCompany-MyAppName-1.4.8-release.apk 인 apk 파일을 만듭니다 .
이 솔루션 은 APK 및 앱 번들 (.aab 파일) 모두에서 작동 합니다 .
다음 사항도 참조 : Android 프로젝트 용 gradle에서 proguard 매핑 파일 이름을 변경하는 방법
최근 Gradle 플러그인 솔루션
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.company.app"
minSdkVersion 13
targetSdkVersion 21
versionCode 14 // increment with every release
versionName '1.4.8' // change with every release
setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")
}
}
위의 솔루션은 다음 Android Gradle 플러그인 버전에서 테스트되었습니다.
- 3.3.0 (2019 년 1 월)
- 3.1.0 (2018 년 3 월)
- 3.0.1 (2017 년 11 월)
- 3.0.0 (2017 년 10 월)
- 2.3.2 (2017 년 5 월)
- 2.3.1 (2017 년 4 월)
- 2.3.0 (2017 년 2 월)
- 2.2.3 (2016 년 12 월)
- 2.2.2
- 2.2.0 (2016 년 9 월)
- 2.1.3 (2016 년 8 월)
- 2.1.2
- 2.0.0 (2016 년 4 월)
- 1.5.0 (2015/11/12)
- 1.4.0- 베타 6 (2015/10/05)
- 1.3.1 (2015/08/11)
새 버전이 나오면이 게시물을 업데이트하겠습니다.
버전 1.1.3-1.3.0에서만 테스트 된 솔루션
다음 솔루션은 다음 Android Gradle 플러그인 버전에서 테스트되었습니다.
- 1.3.0 (2015/07/30)- 작동하지 않음, 1.3.1에서 수정 될 예정인 버그
- 1.2.3 (2015/07/21)
- 1.2.2 (2015/04/28)
- 1.2.1 (2015/04/27)
- 1.2.0 (2015/04/26)
- 1.2.0- 베타 1 (2015/03/25)
- 1.1.3 (2015/03/06)
앱 gradle 파일 :
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.company.app"
minSdkVersion 13
targetSdkVersion 21
versionCode 14 // increment with every release
versionName '1.4.8' // change with every release
archivesBaseName = "MyCompany-MyAppName-$versionName"
}
}
이건 내 문제를 해결 : 사용하는 applicationVariants.all
대신applicationVariants.each
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.all { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
}
}
}
최신 정보:
따라서 이것은 Android 스튜디오 gradle 플러그인의 0.14 이상 버전에서는 작동하지 않는 것 같습니다.
이것은 트릭을 수행합니다 (이 질문의 참조 ) :
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
}
}
}
(Android Studio 3.0 및 Gradle 4에서 작동하도록 편집 됨)
더 복잡한 apk 파일 이름 변경 옵션을 찾고 있었고 다른 사람에게 도움이되기를 바랍니다. 다음 데이터로 apk의 이름을 바꿉니다.
- 맛
- 빌드 타입
- 버전
- 데이트
gradle 클래스에 대한 약간의 연구와 다른 답변의 약간의 복사 / 붙여 넣기가 필요했습니다. gradle 3.1.3을 사용 하고 있습니다.
build.gradle에서 :
android {
...
buildTypes {
release {
minifyEnabled true
...
}
debug {
minifyEnabled false
}
}
productFlavors {
prod {
applicationId "com.feraguiba.myproject"
versionCode 3
versionName "1.2.0"
}
dev {
applicationId "com.feraguiba.myproject.dev"
versionCode 15
versionName "1.3.6"
}
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def project = "myProject"
def SEP = "_"
def flavor = variant.productFlavors[0].name
def buildType = variant.variantData.variantConfiguration.buildType.name
def version = variant.versionName
def date = new Date();
def formattedDate = date.format('ddMMyy_HHmm')
def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
outputFileName = new File(newApkName)
}
}
}
오늘 (13-10-2016) 10:47에 컴파일하면 선택한 플레이버 및 빌드 유형에 따라 다음 파일 이름이 표시됩니다.
- dev 디버그 : myProject_ dev_debug_1.3.6 _131016_1047.apk
- dev 출시 : myProject_ dev_release_1.3.6 _131016_1047.apk
- prod 디버그 : myProject_ prod_debug_1.2.0 _131016_1047.apk
- 제품 출시 : myProject_ prod_release_1.2.0 _131016_1047.apk
참고 : 정렬되지 않은 버전 apk 이름은 여전히 기본 이름입니다.
요약하면 build.gradle
(나 같은) 패키지를 가져 오는 방법을 모르는 경우 다음을 사용하십시오 buildTypes
.
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.all { variant ->
def file = variant.outputFile
def manifestParser = new com.android.builder.core.DefaultManifestParser()
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) + ".apk"))
}
}
}
===== 편집 =====
당신은 당신의 설정 한 경우 versionCode
와 versionName
귀하의에서 build.gradle
이 같은 파일 :
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0.0"
}
다음과 같이 설정해야합니다.
buildTypes {
release {
signingConfig signingConfigs.releaseConfig
applicationVariants.all { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
}
}
}
====== Android Studio 1.0으로 편집 ======
Android Studio 1.0을 사용하는 경우 다음과 같은 오류가 발생합니다.
Error:(78, 0) Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@67e7625f.
build.Types
부분을 다음과 같이 변경해야 합니다.
buildTypes {
release {
signingConfig signingConfigs.releaseConfig
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
}
}
}
}
당신이 defaultConfig 블록에 versionName을 지정하지 않는 경우 defaultConfig.versionName
에 발생합니다null
매니페스트에서 versionName을 얻으려면 build.gradle에 다음 코드를 작성할 수 있습니다.
import com.android.builder.DefaultManifestParser
def manifestParser = new DefaultManifestParser()
println manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)
제 경우에는 다른 apk
이름 release
과 debug
변형 을 자동으로 생성하는 방법을 찾고 싶었습니다 . 이 스 니펫을 다음과 같은 자식으로 사용하여 쉽게 수행 할 수 있습니다 android
.
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appName = "My_nice_name_"
def buildType = variant.variantData.variantConfiguration.buildType.name
def newName
if (buildType == 'debug'){
newName = "${appName}${defaultConfig.versionName}_dbg.apk"
} else {
newName = "${appName}${defaultConfig.versionName}_prd.apk"
}
output.outputFile = new File(output.outputFile.parent, newName)
}
}
새로운 Android gradle plugin 3.0.0의 경우 다음과 같이 할 수 있습니다.
applicationVariants.all { variant ->
variant.outputs.all {
def appName = "My_nice_name_"
def buildType = variant.variantData.variantConfiguration.buildType.name
def newName
if (buildType == 'debug'){
newName = "${appName}${defaultConfig.versionName}_dbg.apk"
} else {
newName = "${appName}${defaultConfig.versionName}_prd.apk"
}
outputFileName = newName
}
}
이것은 다음과 같은 것을 생성합니다 : My_nice_name_3.2.31_dbg.apk
그레들 4
문법은 Gradle 4 (Android Studio 3 이상)에서 약간 변경되었습니다 (에서 output.outputFile
로 outputFileName
, 이 답변의 아이디어는 다음과 같습니다.
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def newName = outputFileName
newName.replace(".apk", "-${variant.versionName}.apk")
outputFileName = new File(newName)
}
}
}
다른 대안은 다음을 사용하는 것입니다.
String APK_NAME = "appname"
int VERSION_CODE = 1
String VERSION_NAME = "1.0.0"
project.archivesBaseName = APK_NAME + "-" + VERSION_NAME;
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.myapp"
minSdkVersion 15
targetSdkVersion 21
versionCode VERSION_CODE
versionName VERSION_NAME
}
.... // Rest of your config
}
"appname-1.0.0"이 모든 APK 출력으로 설정됩니다.
@Jon 답변에 따라 APK의 이름을 바꾸는 올바른 방법
defaultConfig {
applicationId "com.irisvision.patientapp"
minSdkVersion 24
targetSdkVersion 22
versionCode 2 // increment with every release
versionName "0.2" // change with every release
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//add this line
archivesBaseName = "AppName-${versionName}-${new Date().format('yyMMdd')}"
}
또는 다른 방법으로 동일한 결과를 얻을 수 있습니다
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def formattedDate = new Date().format('yyMMdd')
outputFileName = "${outputFileName.replace(".apk","")}-v${defaultConfig.versionCode}-${formattedDate}.apk"
}
}
}
전체 또는 일부 수정 후에 올바른 답변이 많이 있습니다. 그러나 스크립트를 사용하여 preBuild
작업 에 연결하여 VersionName 및 VersionCode를 동적으로 생성하기 때문에 모두 문제가 발생했기 때문에 어쨌든 광산을 추가 할 것입니다 .
비슷한 접근 방식을 사용하는 경우 다음 코드가 작동합니다.
project.android.applicationVariants.all { variant ->
variant.preBuild.doLast {
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk", "-${variant.versionName}@${variant.versionCode}.apk"))
}
}
}
설명 : 첫 번째 작업에서 버전 코드와 이름을 재정의 하므로이 preBuild
작업 끝에 파일 이름을 바꾸어야합니다. 따라서이 경우 gradle이 수행하는 작업은 다음과 같습니다.
Inject version code/name-> do preBuild actions -> replace name for apk
applicationVariants.all { variant ->
variant.outputs.all { output ->
output.outputFileName = output.outputFileName.replace(".apk", "-${variant.versionName}.apk")
}
}
In my case I solve this error this way
adding a SUFFIX to the Debug version, in this case I adding the "-DEBUG" text to my Debug deploy
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
defaultConfig {
debuggable true
versionNameSuffix "-DEBUG"
}
}
}
For latest gradle versions you can use following snippet:
Set your application manifest location first
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
{
}
And later on in build.gradle
import com.android.builder.core.DefaultManifestParser
def getVersionName(manifestFile) {
def manifestParser = new DefaultManifestParser();
return manifestParser.getVersionName(manifestFile);
}
def manifestFile = file(android.sourceSets.main.manifest.srcFile);
def version = getVersionName(manifestFile)
buildTypes {
release {
signingConfig signingConfigs.release
applicationVariants.each { variant ->
def file = variant.outputFile
variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + versionName + ".apk"))
}
}
Adjust if you have different manifests per build type. but since I have the single one - works perfectly for me.
As of Android Studio 1.1.0, I found this combination worked in the android body of the build.gradle
file. This is if you can't figure out how to import the manifest xml file data. I wish it was more supported by Android Studio, but just play around with the values until you get the desired apk name output:
defaultConfig {
applicationId "com.package.name"
minSdkVersion 14
targetSdkVersion 21
versionCode 6
versionName "2"
}
signingConfigs {
release {
keyAlias = "your key name"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "appName_" + versionName + ".apk"))
}
}
}
}
참고URL : https://stackoverflow.com/questions/18332474/how-to-set-versionname-in-apk-filename-using-gradle
'Programing' 카테고리의 다른 글
링크를 사용하여 JavaScript를 호출하는 방법은 무엇입니까? (0) | 2020.06.04 |
---|---|
AWS 오류 메시지 : 현재이 리소스에 대해 충돌하는 조건부 작업이 진행 중입니다 (0) | 2020.06.04 |
Cordova 명령 행 인터페이스를 사용하여 서명 된 APK 파일을 작성하는 방법은 무엇입니까? (0) | 2020.06.04 |
내 목록 항목 글 머리 기호가 부동 요소와 겹치는 이유 (0) | 2020.06.04 |
SqlAlchemy 결과를 JSON으로 직렬화하는 방법은 무엇입니까? (0) | 2020.06.04 |