Проблема с пространством имен Flutter Android после обновления плагина gradleAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема с пространством имен Flutter Android после обновления плагина gradle

Сообщение Anonymous »

После внесения некоторых обновлений для исправления предупреждения о декларативном блокировании у меня возникла проблема с компиляцией моего приложения для рабочей среды. Я получаю предупреждения о неожиданной версии Kotlin (ожидаемая 1.7.0, фактическая 1.9), и когда я запускаю apk, я мгновенно получаю фатальную ошибку:

Код: Выделить всё

[frame_perf] perfboost open tb_ctl file failed, isApp[1], errno=No such file or directory
FATAL EXCEPTION: main                                                                                                    Process: com.my.app.stg, PID: 18292
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app.stg/com.biosphere.terrai.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.my.app.MainActivity" on path: DexPathList[[zip file "/data/app/~~4WIGO53JC8kZEYhSkFIcLA==/com.my.app.stg-MBmo_L3L_l4N55Phv57l2A==/base.apk"],nativeLibraryDirectories=[/data/app/~~4WIGO53JC8kZEYhSkFIcLA==/com.my.app.stg-MBmo_L3L_l4N55Phv57l2A==/lib/arm64, /data/app/~~4WIGO53JC8kZEYhSkFIcLA==/com.my.app.stg-MBmo_L3L_l4N55Phv57l2A==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
После получения этой ошибки я решил обновить версию Gradle до последней и обновить все, чтобы 1.9 стала ожидаемой версией Kotlin, и все было хорошо. Итак, я запустил помощник по обновлению AGP и обновился до gradle 8.7.
Теперь я вообще не могу собрать приложение и получаю новую относительную ошибку. в пространство имен Android

Код: Выделить всё

* What went wrong:
Failed to query the value of property 'buildFlowServiceProperty'.
> Could not isolate value org.jetbrains.kotlin.gradle.plugin.statistics.BuildFlowService$Parameters_Decorated@be57342 of type BuildFlowService.Parameters
> A problem occurred configuring project ':appcenter_sdk_flutter'.
> Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl.
> Namespace not specified.  Specify a namespace in the module's build file
Что странно, потому что я уже сделал это в android/app/build.gradle:

Код: Выделить всё

plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
id "com.google.gms.google-services"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}

def flutterDefaults = [
versionCode: '1',
versionName: '1.0',
minSdkVersion: '24'
]

def flutterVersionCode = localProperties.getProperty('flutter.versionCode', flutterDefaults.versionCode).toInteger()
def flutterVersionName = localProperties.getProperty('flutter.versionName', flutterDefaults.versionName)
def flutterMinSdkVersion = localProperties.getProperty('flutter.minSdkVersion', flutterDefaults.minSdkVersion).toInteger()

android {
namespace "com.my.app"
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
jvmTarget = '1.8'
}

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}

defaultConfig {
applicationId "com.my.app"
minSdkVersion flutterMinSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
signingConfig signingConfigs.debug
}
}

flavorDimensions "env"
productFlavors {
dev {
dimension "env"
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
resValue "string", "app_name", "[DEV] myApp"
}
staging {
dimension "env"
applicationIdSuffix ".stg"
versionNameSuffix "-stg"
resValue "string", "app_name", "[STG] myApp"
}
prod {
dimension "env"
resValue "string", "app_name", "myApp"
}
}

gradle.taskGraph.whenReady { taskGraph ->
if (!project.hasProperty('android.injected.build.model')
&&  taskGraph.allTasks.any { it.name.toLowerCase().equals("assembledebug") || it.name.toLowerCase().equals("assemblerelease") }) {
throw new Exception("Please specify a flavor with --flavor ")
}
}
}

flutter {
source '../..'
}

dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

В официальной документации говорится, что пространство имен должно быть определено в android/build.gradle, но когда я это делаю, я получаю сообщение об ошибке, что метод android() не существует в корневом проекте 'android '.
Я читал, что обходной путь, включающий метод afterEvaluate, может сработать, поэтому я сделал это в android/build.gradle:

Код: Выделить всё

rootProject.buildDir = '../build'
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
project.buildDir = "${rootProject.buildDir}/${project.name}"
evaluationDependsOn(':app')
}

allprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register("clean", Delete) {
delete rootProject.buildDir
}
Что вызывает ошибку: невозможно запустить Project.afterEvaluate(Closure), когда проект уже оценен.
Я также прочитайте о добавлении этого, чтобы решить проблему:

Код: Выделить всё

apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
Но потом я получаю сообщение об отсутствии плагина для onesignal, и его добавление само по себе вызывает головную боль.
Есть идеи, как это сделать решить эту проблему и наконец создать свое приложение?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... dle-plugin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»