Я новичок в разработке Flutter и до сих пор тестировал приложение для Android в режиме отладки. Я хочу выпустить приложение, чтобы поделиться им с друзьями и семьей. Однако я продолжаю получать ошибки при попытке собрать APK (выпуск).
Честно говоря, я не до конца понимаю файлы build.gradle; поэтому я обращаюсь сюда за любой помощью, спасибо.
Я использую Android 14 и планирую поддерживать только Android 14+.
Я загрузил SDK для уровней API 34 и 35 из Android Studio.
Мое приложение полностью создано Flutter.
Это ошибка при создании apk (выпуска):
Note: Recompile with -Xlint:deprecation for details.
Font asset "MaterialIcons-Regular.otf" was tree-shaken, reducing it from 1645184 to 4212 bytes (99.7% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processReleaseResources'.
> A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
> Android resource linking failed
aapt2 E 07-22 17:30:35 77990 77990 LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data.
aapt2 E 07-22 17:30:35 77990 77990 ApkAssets.cpp:149] Failed to load resources table in APK '/home/username/Android/Sdk/platforms/android-35/android.jar'.
error: failed to load include path /home/username/Android/Sdk/platforms/android-35/android.jar.
Android/build.gradle
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
Android/приложение/build.gradle
plugins {
id "com.android.application"
id 'com.google.gms.google-services'
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader("UTF-8") { reader ->
localProperties.load(reader)
}
}
android {
namespace = "com.example.flutter_application_1"
compileSdk = 35 // max SDK available today
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId = "com.example.flutter_application_1"
minSdk = 33
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
signingConfig = signingConfigs.debug
}
}
}
flutter {
source = "../.."
}
Мне удалось воспроизвести эту проблему с помощью compileSdk = 35
(и других полей, связанных с SDK) и agp 7.3.0
.
В моем случае обновление плагина Android Gradle до последней версии 8.5.0
решило эту проблему.
Для этого вам следует:
gradle
до совместимой (или последней) версии. В моем случае это было 8.9.0
./gradlew wrapper --gradle-version=8.9
settings.gradle
plugins {
...
id "com.android.application" version "8.5.0" apply false
...
}
После этих изменений моя сборка успешно завершается. Однако в журнале сборки все еще есть предупреждение:
WARNING: We recommend using a newer Android Gradle plugin to use compileSdk = 35
This Android Gradle plugin (8.5.0) was tested up to compileSdk = 34.
You are strongly encouraged to update your project to use a newer
Android Gradle plugin that has been tested with compileSdk = 35.
If you are already using the latest version of the Android Gradle plugin,
you may need to wait until a newer version with support for compileSdk = 35 is available.
For more information refer to the compatibility table:
https://d.android.com/r/tools/api-level-support
To suppress this warning, add/update
android.suppressUnsupportedCompileSdk=35
to this project's gradle.properties.
Я предполагаю, что это потому, что SDK 35 был выпущен в стабильном канале после agp 8.5.0
, и в ближайшей версии agp это предупреждение будет исправлено.
Тем не менее, я хочу предупредить ОП и всех, кто это прочитает. У Flutter есть собственная карта совместимых версий зависимостей платформы Android здесь. Я считаю, что разумно придерживаться этих версий, если в вашем проекте нет каких-то особых требований.
Использование совместимых версий Flutter предоставит вам (по крайней мере, каким-то образом) проверенную конфигурацию, и она будет обновляться, когда новая версия Flutter будет поддерживать новые платформы.
Вы можете использовать эти версии следующим образом:
android {
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
defaultConfig {
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
}
}