Приложение Flutter Android «Невозможно создать экземпляр активности» - PullRequest
0 голосов
/ 09 июля 2020

Я создаю свое приложение как «релизную» сборку (с подписью и всем остальным), чтобы опубликовать sh его в PlayStore. Я получаю множество отчетов cra sh из «Pre-launch report» в PlayStore, которые выглядят следующим образом:

Crash java.lang.RuntimeException: Unable to instantiate activity 
ComponentInfo{com.domain/com.domain.MainActivity}: java.lang.ClassNotFoundException: Didn't find 
class "com.domain.MainActivity" on path: DexPathList[[zip file "/data/app/com.domain-1/base.apk", zip 
file "/data/app/com.domain-1/split_config.arm64_v8a.apk", zip file "/data/app/com.domain- 
1/split_config.xxhdpi.apk"],nativeLibraryDirectories=[/data/app/com.domain-1/lib/arm64, 
/data/app/com.domain-1/base.apk!/lib/arm64-v8a, /data/app/com.domain- 
1/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.domain- 
1/split_config.xxhdpi.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]

Однако процесс сборки прошел, как и ожидалось, без сбоев. Кроме того, отладочная сборка и сборка с разделением по abi работают без каких-либо проблем или сбоев.

Это структура папок приложения Android (изначально я использовал другую структуру папок «app / main / kotlin /com/domain/MainActivity.kt ", но с тем же результатом):

enter image description here

This is the gradle.build which is on the androids folder level:

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') {
        reader -> localProperties.load(reader)
    }
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
logger.info("DEBUG - FLUTTER ROOT: " + flutterRoot)
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.3'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

/*
task clean(type: Delete) {
    delete rootProject.buildDir
}
*/

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    compileSdkVersion 28
    packagingOptions {
        exclude ("META-INF/shared_core_release.kotlin_module")
    }
    defaultConfig {
        applicationId "com.domain"
        minSdkVersion 25
        targetSdkVersion 28
        compileSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            signingConfig signingConfigs.release
            sourceSets {

                main {
                    manifest.srcFile 'app/src/main/AndroidManifest.xml'
                    res.srcDirs = ['app/src/main/res']
                }
            }
        }
    }
}

flutter {
    source '..'
}

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

And this is the referenced AndroidManifest.xml:

    

Это содержимое app/src/main/kotlin/com.domain/MainActivity.kt:

package com.domain

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

Это отрывок из flutter doctor:

[√] Flutter (Channel stable, v1.17.5, on Microsoft Windows [Version 10.0.18362.900], locale de-DE)
    • Flutter version 1.17.5 at C:\flutter
    • Framework revision 8af6b2f038 (9 days ago), 2020-06-30 12:53:55 -0700
    • Engine revision ee76268252
    • Dart version 2.8.4

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at C:\Users\xxx\AppData\Local\Android\Sdk
    • Platform android-29, build-tools 29.0.3
    • ANDROID_HOME = C:\Users\xxx\AppData\Local\Android\Sdk
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    X Android license status unknown.
      Try re-installing or updating your Android SDK Manager.
      See https://developer.android.com/studio/#downloads or visit visit
      https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions.

[√] Android Studio (version 4.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 46.0.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] IntelliJ IDEA Ultimate Edition (version 2019.3)
    • IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.4
    • Flutter plugin version 44.0.3
    • Dart plugin version 193.6911.31

[√] Connected device (1 available)
    • Android SDK built for x86 • emulator-5554 • android-x86 • Android 10 (API 29) (emulator)

Любая помощь будет очень приветствоваться для решения этой проблемы.

РЕДАКТИРОВАТЬ # 1:

После отключения модификации кажется, что com.domain.MainActivity отсутствует в dex.

Но я не понимаю, почему его нет.

введите описание изображения здесь

1 Ответ

0 голосов
/ 20 июля 2020

Я, наконец, смог в некоторой степени решить проблему.

Попробовав все решения, предложенные в виде комментариев (ни одно из них не работает), я создал новый проект и скопировал части, которые, как я предполагал, могли вызвать проблему, чтобы попытаться воспроизвести проблему.

После того, как ничего не сработало (ничто не сломало сборку или приложение для нового проекта), я скопировал все и просто адаптировал вновь созданный проект. Насколько я могу судить, изменений нет, и даже GIT не обнаружил каких-либо заметных изменений.

Теперь он работает, даже если решение для этого далеко отстает от того, на что я надеялся. Так как в проекте также нет значительных изменений, я не могу поделиться более глубоким пониманием того, что могло вызвать проблему.

...