#android-studio #gradle
#android-studio #gradle
Вопрос:
Я получил ошибку, которой раньше не было:
Execution failed for task ':app:generateDebugBuildConfig'.
> Failed to calculate the value of task ':app:generateDebugBuildConfig' property 'buildConfigPackageName'.
> Failed to query the value of property 'packageName'.
> java.lang.NumberFormatException: For input string: "${versionCode}"
Версия Android studio:
Android Studio 4.1.1
Build #AI-201.8743.12.41.6953283, built on November 5, 2020
Runtime version: 1.8.0_242-release-1644-b3-6222593 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Файл build.gradle(:app) содержит следующее:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' //< for image visualization with glide
//Serialization
apply plugin: 'kotlinx-serialization'
android {
signingConfigs {
release {
storeFile file('xxxx.jks')
storePassword 'xxxxxxx'
keyPassword 'xxxxxxxx'
keyAlias 'my-app'
}
}
compileSdkVersion propCompileSdkVersion
buildToolsVersion propBuildToolsVersion
defaultConfig {
applicationId "com.user.myapp"
minSdkVersion propMinSdkVersion
targetSdkVersion propTargetSdkVersion
versionCode 3
versionName "2.0-beta.26"
manifestPlaceholders = [versionCode:"3", versionName:"2.0-beta.26"]
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
resValue "string", "app_name", "myapp-dev"
}
optimizedDebug {
initWith debug
minifyEnabled false
applicationIdSuffix ".optimizedDebug"
debuggable false
resValue "string", "app_name", "myapp-optimized-dev"
}
debugProd {
initWith debug
minifyEnabled false
applicationIdSuffix ".debugProd"
debuggable true
resValue "string", "app_name", "myapp-logs-in-prod"
}
release {
minifyEnabled false
resValue "string", "app_name", "myapp"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
applicationVariants.all { variant ->
variant.resValue "string", 'images_file_path', "Android/data/"${applicationId}"/files/Pictures"
}
/* Necessary to have Parcelable / @Parcelize functionalities */
androidExtensions {
experimental = true
}
lintOptions {
checkReleaseBuilds false
abortOnError true
}
}
dependencies {
...
}
repositories {
mavenCentral()
}
Я аннулировал кеши и перезапускал несколько раз, ничего не меняется.
Я хотел бы точно определить, что происходит, чтобы, по крайней мере, иметь возможность понять, что вызывает путаницу gradle.
Может кто-нибудь указать мне на пошаговый запуск gradle, чтобы выяснить, в чем проблема?
Комментарии:
1. Примечание: он отлично работает с Android studio 4.1.0
Ответ №1:
Я обнаружил, что в манифесте у меня была следующая ошибка, аннотированная android studio:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.user.myapp"
android:versionCode={$versionCode}
android:versionName={$versionName}
>
...
</manifest>
Похоже, что в версии 4.1.1 android studio
android:versionCode={$versionCode}
больше не работает.
Этот пост https://commonsware.com/blog/2020/10/14/android-studio-4p1-library-modules-version-code.html говорит, что мы больше не должны использовать VERSION_CODE и VERSION_NAME. Поэтому я полностью удаляю их из своего кода и заменяю его пользовательскими переменными BuildConfigField gradle:
в gradle:
defaultConfig {
...
buildConfigField 'int', 'MYAPP_VERSION_CODE', "3"
buildConfigField 'String', 'MYAPP_VERSION_NAME', ""2.0-beta.26""
...
}
в манифесте удалите часть, ссылающуюся на android: versionXXXX:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.user.myapp"
>
...
</manifest>
в коде kotlin для отображения кода и названия версии:
val versionCode = BuildConfig.MYAPP_VERSION_CODE.toString()
val versionName = BuildConfig.MYAPP_VERSION_NAME
После этого все работает хорошо.