发布模式下的 Flutter 构建 apk 无法生成更新版本

Flutter build apk on release mode cannot generate updated version

我有 运行 这个 flutter build apk 来发布我的应用程序。现在我已经构建了它的第 2 版。

现在,我想发布我的第 2 版应用程序。所以,我再次 运行 flutter build apk。我得到了发布的 apk,但它仍然是版本 1 发布的 apk。 我删除了发布的 apk 并再次尝试,但仍然得到版本 1 发布的 apk。

在调试模式下构建版本 2 时,一切正常。

这是该应用程序的 Github Link:https://github.com/nitishk72/Flutter-Github-API

我觉得你需要

flutter clean

(我认为这是一个必要的错误,但我也遇到了)

flutter build apk --release
  1. 您可以在 local.properties android 项目中更改

        sdk.dir=D:/SDK               //your android SDK location
        flutter.sdk=D:\Flutter\flutter  //your flutter SDK location
        flutter.versionName=1.0.0
        flutter.versionCode=2
        flutter.buildMode=release
    
  2. 您的 android/app/build.gradle 文件中的更改

         buildTypes {
                release {
                    // if everything ok then not add 
                    //minifyEnabled true 
                    //another you can remove minifyEnabled true
                    proguardFiles getDefaultProguardFile('proguard- 
                     android.txt'), 'proguard-rules.pro'
                    signingConfig signingConfigs.release
                }
            }
    
  3. 您还可以在android/app/build.gradle defaultConfig 方法中更改 正文。

      multiDexEnabled true
    
  4. 如果您想迁移到 androidx,请进行设置。

    依赖项{ 测试实施 'junit:junit:4.12' android测试实施'androidx.test:runner:1.1.1' android测试实施'androidx.test.espresso:espresso-core:3.1.1' 实施 'androidx.multidex:multidex:2.0.1'

    }

    1. 并在按照此命令创建构建文件夹之前进行清理。

       - flutter clean
      
       - flutter build apk --release
      
       - flutter install
      

6.Release Apk 位置。

        in `android studio termial` or inside `project-root` you can navigate to this.

        cd build\app\outputs\apk\release

如果您的问题是 flutter build(APK,捆绑包)没有在 API 调用真实设备,这是因为 您需要在创建 release/build 之前向 Android Manifest 添加 Internet 权限。

默认情况下,“互联网使用”在模拟器上可以正常工作,但在真实设备上就不行。

要解决此问题,只需:

打开文件“android/app/src/main/AndroidManifest.xml”并添加适当的用户权限:

<manifest> 
...
 <uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>

然后再次创建您的构建。

当您创建新的 Flutter 项目时(从 Android Studio 菜单),在文件中:

/android/app/build.gradle

那里有:

你有:

buildTypes {
    release {
        signingConfig signingConfigs.debug    //   <--- HERE YOU ARE USING DEBUG KEY
    }
}

这意味着 release 构建(例如从菜单 Build -> Flutter -> Build APK 触发)将使用 debug 密钥进行签名。

完整 build.gradle 文件(由 Android Studio 创建):

解决方案

更改自:

signingConfig signingConfigs.debug

至:

signingConfig signingConfigs.release

所以(在 ​​build.gradle 中)你应该:

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

错误

当您遇到错误 Could not get unknown property 'release' for SigningConfig - 只需在 build.gradle 中添加部分 release,因此:

  1. 创建新的 .jks 文件(通过 Generate Signed Bundle / APK...

  2. 将凭据放入 build.gradle (:app):

我决定打开 android studio 中的 MyProject/android 文件夹并从 android studio 构建 apk。 终于可以正常使用了

我希望这可以帮助别人。我 运行 遇到一个问题,我的发行版无法运行,并且 logcat 中没有任何错误消息。 问题原来是我有 FutureBuilder 开始 Future<void>。通过 运行 flutter run 它可以正常工作(snapshot.hasDatatrue),但在发布版本中它总是 false。当然,FutureBuilder 的文档说在这种情况下 hasData 应该是 false。但实际上在调试模式下它有不同的行为。

P.S。 另一个可能的问题: 现在我的应用程序仍然无法运行,但这次我在 logcat 上看到下一个错误:

Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

将 gradle 插件版本从 7.* 降级到 3.5.4 解决了这个问题。

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

问题是 flutter build 自动收缩了 R8 的代码。 flutter build --no-shrink 解决了问题。我想我需要将所有必需的异常添加到 proguard-rules.pro 文件中。

使用以下命令构建 apk。

  1. 输入cd <app dir>(替换为您的应用程序目录。)

  2. flutter build apk --split-per-abi --no-shrink(flutter构建命令默认为--release。)

删除 --split-per-abi 标志会生成一个胖 APK,其中包含为所有目标 ABI 编译的代码。此类 APK 的大小大于其拆分版本,导致用户下载不适用于其设备架构的本机二进制文件。

我遇到了同样的问题“应用程序在调试模式下正常工作但在发布模式下不正常”。我不知道为什么...但最后,我通过在 android/app/build.gradle 文件中添加这些行 shrinkResources false minifyEnabled false 解决了问题。

 buildTypes {
     release {
         signingConfig signingConfigs.config
         shrinkResources false
         minifyEnabled false
     }
 }

1).

android\app\src\mainAndroid manifest

中添加以下行
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后在 android\app\build.gradle

中添加这些行
   buildTypes {
   release {
        shrinkResources false
        minifyEnabled false
   }}

2).

使用以下命令构建 apk

flutter build apk --no-shrink

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

两种解决方案都对我有用,但我个人推荐第二种

如果您使用的是 API 呼叫#

确保您拥有 Internet 许可 android 清单

<manifest> 
...
 <uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>

如果您使用的是共享首选项插件

android\build.gradle 中设置依赖项以使用 classpath 'com.android.tools.build:gradle:3.5.1'

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

像这样:

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        ...
    }

第 5 步脚本 cd . && flutter build apk --release 退出,状态代码为 1