【问题标题】:“flutter build apk” for release in Flutter crashed when open the Apps在 Flutter 中发布的“flutter build apk”在打开应用程序时崩溃
【发布时间】:2020-01-15 01:49:36
【问题描述】:

我已经为没有flavor 的pro-guard、icon、manifest 等构建应用程序版本进行了设置。我将 dir /android 迁移到 AndroidX,因为如果没有,则在运行 flutter build apk 时无法构建应用程序版本。所以我迁移它并成功。如下:

rifafauzi6@Anonymous-X456UR:/media/rifafauzi6/NM/Materi/BackUp Aplikasi Android/Flutter Project/vallery$ flutter build apk
You are building a fat APK that includes binaries for android-arm, android-arm64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.
    To generate an app bundle, run:
        flutter build appbundle --target-platform android-arm,android-arm64
        Learn more on: https://developer.android.com/guide/app-bundle
    To split the APKs per ABI, run:
        flutter build apk --target-platform android-arm,android-arm64 --split-per-abi
        Learn more on:  https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Initializing gradle...                                              1.3s
Resolving dependencies...                                           2.9s
Running Gradle task 'assembleRelease'...                                
Running Gradle task 'assembleRelease'... Done                      59.6s
Built build/app/outputs/apk/release/app-release.apk (16.1MB).

然后成功后,我用两种方式安装:

使用颤振安装

rifafauzi6@Anonymous-X456UR:/media/rifafauzi6/NM/Materi/BackUp Aplikasi Android/Flutter Project/vallery$ flutter install
Initializing gradle...                                              1.3s
Resolving dependencies...                                           2.5s
Installing app.apk to SM A600G...
Installing build/app/outputs/apk/app.apk...                        16.4s

使用手册,转到该目录并安装它。

我已经尝试过flutter build apk --split-per-abi,然后像上面一样,我也用两种方式安装它。但是当我在显示启动画面之前打开应用程序时仍然崩溃。这是 dir main 中发布应用程序的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my_package">

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Vallery"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_vallery">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- This keeps the window background of the activity showing
                 until Flutter renders its first frame. It can be removed if
                 there is no splash screen (such as the default splash screen
                 defined in @style/LaunchTheme). -->
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

这是flutter doctor -v的输出:

[✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Linux, locale en_US.UTF-8)
    • Flutter version 1.7.8+hotfix.4 at /media/rifafauzi6/NM/Materi/flutter
    • Framework revision 20e59316b8 (8 weeks ago), 2019-07-18 20:04:33 -0700
    • Engine revision fee001c93f
    • Dart version 2.4.0


[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /home/rifafauzi6/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java binary at: /opt/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[✓] Android Studio (version 3.5)
    • Android Studio at /opt/android-studio
    • Flutter plugin version 39.0.3
    • Dart plugin version 191.8423
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] VS Code (version 1.38.0)
    • VS Code at /usr/share/code
    • Flutter extension version 3.3.0

[✓] Connected device (1 available)
    • SM A600G • 5200e3e7f01e45f3 • android-arm • Android 9 (API 28)

• No issues found!

有人可以帮助我吗?因为在上传到 Play 商店之前,我需要先将它(发布 apk)安装到真实设备中。

【问题讨论】:

  • 我建议您尝试使用 flutter run --release 在您的物理手机上以发布模式安装和运行应用程序,以便查看应用程序崩溃时遇到的错误类型或错误跨度>
  • 是的,你好,先生。它显示了日志,问题出在proguard

标签: flutter installation release


【解决方案1】:

试试

flutter build apk --no-shrink

更新

flutter build apk --release --split-per-abi --no-shrink

这解决了我的问题

【讨论】:

    【解决方案2】:

    如果您生成了发布版本,并且在您的 Android 设备上安装 apk 时它崩溃了,请确保您按照https://flutter.dev/docs/deployment/android 中提到的正确说明进行操作。

    这涉及在app/build.gradle 中进行所需的更改

    添加key.properties文件

    然后最终生成您的发布 apk。

    【讨论】:

      【解决方案3】:

      对我来说,这是 gradle 版本。我变了

      classpath 'com.android.tools.build:gradle:4.1.1'
      

      到

      classpath 'com.android.tools.build:gradle:3.5.0'
      

      在android/build.gradle.

      【讨论】:

        【解决方案4】:

        在我的情况下,当我将以下代码放入 build.gradle 文件时,修复了发布模式 apk 应用程序崩溃的问题

        buildTypes {
            release {
                // TODO: Add your own signing config for the release build.
                // Signing with the debug keys for now, so `flutter run --release` works.
                signingConfig signingConfigs.release
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
            }
        }
        

        【讨论】:

          【解决方案5】:

          这是因为 proguard 等发布应用的设置项目而崩溃。

          【讨论】:

          • 你能简单介绍一下你做了什么并且你的发行版 apk 停止崩溃了吗?
          • 请多解释
          猜你喜欢
          • 1970-01-01
          • 2020-09-27
          • 2021-01-22
          • 2019-06-06
          • 2020-12-06
          • 1970-01-01
          • 1970-01-01
          • 2022-08-09
          • 2020-04-04
          相关资源
          最近更新 更多