Android Studio에서 서명 된 apk 를 생성 할 때마다 기본적으로 app-release.apk로 이름이 지정됩니다 …
프롬프트를 표시하고 apk에 할당 해야하는 이름 (이클립스에서 수행되는 방식)을 묻도록 설정을 할 수 있습니까?
내가하는 일은 APK가 생성 된 후 이름을 바꿉니다. 이것은 오류를주지 않지만 프롬프트를 얻기 위해 설정을 변경할 수있는 진정한 방법이 있습니다.
노트::
apk android studio 생성 중 위치를 선택하라는 메시지가 표시됩니다 (전용)
답변
예, 우리는 그것을 바꿀 수 있지만 좀 더 관심을 가지고
이제 프로젝트 의 build.gradle 에 이것을 추가 하면서 프로젝트의 빌드 변형 을 확인했는지 확인하십시오. release or Debug
여기서 빌드 변형을 설정 release
했지만 디버그로 선택할 수도 있습니다.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig getSigningConfig()
applicationVariants.all { variant ->
variant.outputs.each { output ->
def date = new Date();
def formattedDate = date.format('yyyyMMddHHmmss')
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("-release", "-" + formattedDate)
//for Debug use output.outputFile = new File(output.outputFile.parent,
// output.outputFile.name.replace("-debug", "-" + formattedDate)
)
}
}
}
}
다른 접근 방식으로 할 수 있습니다.
defaultConfig {
applicationId "com.myapp.status"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
setProperty("archivesBaseName", "COMU-$versionName")
}
build.gradle에서 Set 속성 방법을 사용
하고 프로젝트를 실행하기 전에 gradle을 동기화하는 것을 잊지 마십시오.
문제가 해결 될 것입니다 🙂
새로운 접근 방식이 구글 업데이트로 최근에 추가 처리하기 위해
이제 맛 또는 변형 출력에 따라 빌드의 이름을 바꿀 수 있습니다
소스 개발자 안드로이드 문서에서입니다 아래 //
자세한 내용은 위의 문서 링크를 따라 들어
변형 출력을 조작하기 위해 변형 API를 사용하여 깨 새로운 플러그인으로. 아래 그림과 같이 빌드 시간 동안 APK 이름 변경과 같은 간단한 작업에도 여전히 작동합니다.
// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
.aab 번들 이름 바꾸기 이것은 David Medenjak의 답변입니다.
tasks.whenTaskAdded { task ->
if (task.name.startsWith("bundle")) {
def renameTaskName = "rename${task.name.capitalize()}Aab"
def flavor = task.name.substring("bundle".length()).uncapitalize()
tasks.create(renameTaskName, Copy) {
def path = "${buildDir}/outputs/bundle/${flavor}/"
from(path)
include "app.aab"
destinationDir file("${buildDir}/outputs/renamedBundle/")
rename "app.aab", "${flavor}.aab"
}
task.finalizedBy(renameTaskName)
}
//@credit to David Medenjak for this block of code
}
위의 코드가 필요합니까
내가 안드로이드 스튜디오 3.3.1의 최신 버전에서 관찰 한 것
.aab 번들의 이름 바꾸기는 이전 코드에 의해 수행되며 작업 이름 바꾸기가 필요하지 않습니다.
그것이 당신에게 도움이되기를 바랍니다. 🙂
답변
최신 안드로이드 gradle 플러그인 ( 3.0 ) 에서 오류가 발생할 수 있습니다 .
읽기 전용 속성 ‘outputFile’의 값을 설정할 수 없습니다
마이그레이션 안내서 에 따르면 다음과 같은 접근 방식을 사용해야합니다.
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
}
}
참고 2 주요 변경 사항 :
all
each
변형 출력을 반복하는 대신 지금 사용됩니다 .outputFileName
파일 참조를 변경하는 대신 속성이 사용됩니다.
답변
전체 파일 이름을 변경하기 위해 @Abhishek Chaubey 답변을 수정했습니다.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
project.ext { appName = 'MyAppName' }
def formattedDate = new Date().format('yyyyMMddHHmmss')
def newName = output.outputFile.name
newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
newName = newName.replace("-release", "-release" + formattedDate)
//noinspection GroovyAssignabilityCheck
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
debug {
}
}
다음과 같은 파일 이름이 생성됩니다. MyAppName-release20150519121617.apk
답변
(Android Studio 3.0 및 Gradle 4에서 작동하도록 편집 됨)
더 복잡한 apk 파일 이름 변경 옵션을 찾고 있었고 다음 데이터로 apk의 이름을 바꾸는이 솔루션을 작성했습니다.
- 맛
- 빌드 타입
- 버전
- 데이트
다음과 같은 APK를 얻을 수 있습니다 : myProject_dev_debug_1.3.6_131016_1047.apk .
전체 답변은 여기에서 찾을 수 있습니다 . 그것이 도움이되기를 바랍니다!
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)
}
}
}
답변
훨씬 짧은 방법은 다음과 같습니다.
defaultConfig {
...
applicationId "com.blahblah.example"
versionCode 1
versionName "1.0"
setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
//or so
archivesBaseName = "$applicationId-v$versionCode($versionName)"
}
com.blahblah.example-v1 (1.0) -debug.apk (디버그 모드에서)라는 이름을 지정합니다.
Android Studio는 기본적으로 빌드 유형 이름으로 versionNameSuffix를 추가합니다.이를 무시하려면 다음을 수행하십시오.
buildTypes {
debug {
...
versionNameSuffix "-MyNiceDebugModeName"
}
release {
...
}
}
디버그 모드에서의 출력 : com.blahblah.example-v1 (1.0) -MyNiceDebugModeName.apk
답변
@Fer 답변을 기반으로보다 보편적 인 솔루션을 작성했습니다.
또한의 맛과 빌드 타입 기반의 설정 작업을해야한다 applicationId
, versionName
, versionCode
.
build.gradle에서 :
android {
...
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appId = variant.applicationId
def versionName = variant.versionName
def versionCode = variant.versionCode
def flavorName = variant.flavorName // e. g. free
def buildType = variant.buildType // e. g. debug
def variantName = variant.name // e. g. freeDebug
def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
output.outputFile = new File(output.outputFile.parentFile, apkName)
}
}
}
APK 이름 예 : com.example.app_freeDebug_1.0_1.apk
variant
변수에 대한 자세한 정보는 ApkVariant 및 BaseVariant 인터페이스 정의를 참조하십시오 .
답변
android.applicationVariants.all
앱 레벨 gradle에 아래와 같은 블록을 추가하십시오.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions {
disable 'MissingTranslation'
}
signingConfig signingConfigs.release
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
}
}
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '_debug'
}
}
2019/03/25에 제공