Flutter Release apk无法正常工作?

时间:2018-04-17 09:15:03

标签: android dart flutter

我已经运行此+sct来发布我的应用。现在我构建了verison 2。

现在我又要发布我的第2版App.To获取发布apk我再次运行此flutter build apk。我被释放apk但它是我的版本1发布apk。 我去了我发布的目录并删除了我删除的已发布的apk并再次尝试然后我也得到verion 1发布的apk。 I tried this too but It is allso giving me Verion 1 apk

在构建版本2时,我正在调试模式下进行测试。在粪便模式下工作正常。

以下是该应用程序的Github链接:https://github.com/nitishk72/Flutter-Github-API

11 个答案:

答案 0 :(得分:19)

如果您的问题是 Flutter构建 (APK,捆绑包)没有在真实设备中进行API调用,那是因为 您需要先将Internet权限添加到Android Manifest ,然后才能创建发行版/内部版本。

默认情况下,“使用Internet”在仿真器上可以正常工作,但在真实设备上不能正常工作。

要解决此问题,只需:

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

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

然后再次创建您的构建。

答案 1 :(得分:11)

我认为你需要

flutter clean

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

flutter build apk --release

答案 2 :(得分:11)

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

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

答案 3 :(得分:2)

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

/android/app/build.gradle

其中: enter image description here

您有:

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

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

完整的build.gradle文件(由Android Studio创建): enter image description here

解决方案

更改自:

signingConfig signingConfigs.debug

收件人:

signingConfig signingConfigs.release

因此(在build.gradle中,您应该具有:

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

答案 4 :(得分:2)

问题在于,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 build 命令默认为 --release。)

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

答案 5 :(得分:1)

  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,请进行设置。

    依赖项{     testImplementation'junit:junit:4.12'     androidTestImplementation'androidx.test:runner:1.1.1'     androidTestImplementation'androidx.test.espresso:espresso-core:3.1.1'     实现'androidx.multidex:multidex:2.0.1'

    }

    1. 并在遵循此cmd创建构建文件夹之前进行清理。

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

6。发布Apk位置。

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

        cd build\app\outputs\apk\release

答案 6 :(得分:1)

我决定在 android studio 中打开 MyProject/android 文件夹并从 android studio 构建 apk。 它终于正常工作了。

答案 7 :(得分:1)

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

附言另一个可能的问题: 现在我的应用程序仍然无法运行,但这次我在 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'

答案 8 :(得分:0)

我得到的发行版APK不能很好地命名为app-release.apk,但在该文件夹之前的文件夹中还有另一个apk app.apk,其顶部没有该调试条,并且可以正常运行调试模式和大小几乎相同。

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

如果您使用 API 调用#

确保您在 android Manifest 上拥有 Internet 权限

<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'
        ...
    }