【问题标题】:Flutter Issue: Native crash颤振问题:本机崩溃
【发布时间】:2023-03-16 04:11:02
【问题描述】:

在 Google Play 上部署我的 Flutter 应用后,它在启动时崩溃。它适用于 2 台设备(Google 测试设备 on Play),而其他设备则出现以下错误。

问题:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/abc.pota.tallxy-1/base.apk"],nativeLibraryDirectories=[/data/app/ abc.pota.tallxy-1/lib/arm64, /data/app/abc.pota.tallxy-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /system/vendor /lib64, /product/lib64]]] 找不到“libflutter.so”

所以我将以下代码放在我的 app/build.gradle 文件中。

defaultConfig {
    ..
    ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}

但并非在所有 Google 测试设备甚至我的手机上(当我从 Google Play 下载时)它都会崩溃并出现以下错误。

问题:abc.pota.tallxy 的原生崩溃


04-09 18:33:39.560:E/HwSystemManager(1901):HandleInstalledPackageInfoService:第二个操作:pkgData 为空 04-09 18:33:39.683:E/HwLauncher(2408):PowerSaveLauncherModel onPackageAdded:不在PowerSaveLauncher 04-09 18:33:39.908: E/fm_if.c(16065): 找到 id:fm 并开始打开设备 04-09 18:33:39.939: E/Finsky(6061): [135] com.google.android.finsky.setup.ae.a(52): 预取预加载时出错 04-09 18:33:39.939: E/Finsky(6061): com.google.android.finsky.setup.fetchers.RawDocumentsFetchException[reason=pai_config, account=[3IPbcy9bVZDdTfTescMyODo8-OY]] 04-09 18:33:39.939: E/Finsky(6061): at com.google.android.finsky.setup.ae.a(SourceFile:31) 04-09 18:33:39.939: E/Finsky(6061): at com.google.android.finsky.setup.ag.call(未知来源) 04-09 18:33:39.939: E/Finsky(6061): 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 04-09 18:33:39.939: E/Finsky(6061): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 04-09 18:33:39.939: E/Finsky(6061): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 04-09 18:33:39.939: E/Finsky(6061): 在 java.lang.Thread.run(Thread.java:776) 04-09 18:33:40.174:W/System(16106):ClassLoader 引用了未知路径:/system/app/YouTube/lib/arm64

异常删除所有proguard代码后。 Google 控制台显示以下四种设备失败。

有问题的设备 谷歌 Pixel 2(角膜白斑)- 安卓 8.1 华为 Mate 9 (HWMHA) - 安卓 7.0 谷歌像素(旗鱼) - Android 7.1 三星 Galaxy S9 (US) (starqlteue) - Android 8.0

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/abc.pota.tallxy-xsLCE7j_6PxDsQ0AqFF1ZA==/base.apk"],nativeLibraryDirectories=[/data/app/ abc.pota.tallxy-xsLCE7j_6PxDsQ0AqFF1ZA==/lib/arm64, /data/app/abc.pota.tallxy-xsLCE7j_6PxDsQ0AqFF1ZA==/base.apk!/lib/arm64-v8a, /system/lib64]]] 不能找到“libflutter.so” java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/abc.pota.tallxy-1/base.apk"],nativeLibraryDirectories=[/data/app/abc.pota.tallxy -1/lib/arm64, /data/app/abc.pota.tallxy-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /system/vendor/lib64,

我的app/build.gradle如下。

        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')
        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"

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

        android {
            compileSdkVersion 28

            lintOptions {
                disable 'InvalidPackage'
            }

            defaultConfig {
                applicationId "abc.pota.tallxy"
                minSdkVersion 21
                targetSdkVersion 28
                multiDexEnabled true
                versionCode 5
                versionName flutterVersionName
                testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
                ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
            }

            signingConfigs {
                release {
                    keyAlias keystoreProperties['keyAlias']
                    keyPassword keystoreProperties['keyPassword']
                    storeFile file(keystoreProperties['storeFile'])
                    storePassword keystoreProperties['storePassword']
                }
            }

            buildTypes {
                release {
                    signingConfig signingConfigs.release

                }
            }
        }

        flutter {
            source '../..'
        }

        dependencies {
            testImplementation 'junit:junit:4.12'
            androidTestImplementation 'androidx.test:runner:1.1.1'
            androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
            implementation 'com.google.firebase:firebase-core:16.0.8'
            implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
            implementation 'androidx.legacy:legacy-support-v4:1.0.0'
        }

        apply plugin: 'com.google.gms.google-services'

感谢您的宝贵时间

【问题讨论】:

  • 还没试过。今天会尝试更新帖子
  • 我删除了所有与 minify 和 proguard 相关的代码。生成新的 apk 并部署,但出现相同的错误。
  • 您的设备是否也出现此错误(在发布模式下)?
  • 当我将我的设备连接到计算机并运行它时不会...但是如果我从 Play 商店(内部版本)下载它,它就会崩溃
  • 我认为您可以获得更好的解决方案是通过填写问题here

标签: flutter


【解决方案1】:

如果您使用minifyEnabled true,您将不得不面对这个问题。


解决方案 1

在您的 build.gradle 文件中删除此行。


解决方案 2

如果您仍想使用minifyEnabled,您还必须按照以下步骤操作。

我。将extra-gen-snapshot-options=--obfuscate 添加到您的android/gradle.properties

二。创建/android/app/proguard-rules.pro 文件并添加下列规则。

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

三。在您的build.gradle(app) 中,添加此

buildTypes {

    release {

        signingConfig signingConfigs.debug

        minifyEnabled true
        useProguard true

        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }
}

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2020-01-03
    • 2018-10-20
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2021-11-16
    • 2021-05-05
    • 2022-01-12
    相关资源
    最近更新 更多