我已经运行此+sct
来发布我的应用。现在我构建了verison 2。
现在我又要发布我的第2版App.To获取发布apk我再次运行此flutter build apk
。我被释放apk但它是我的版本1发布apk。
我去了我发布的目录并删除了我删除的已发布的apk并再次尝试然后我也得到verion 1发布的apk。
在构建版本2时,我正在调试模式下进行测试。在粪便模式下工作正常。
以下是该应用程序的Github链接:https://github.com/nitishk72/Flutter-Github-API
答案 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
您有:
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
}
}
答案 4 :(得分:2)
问题在于,flutter build 会使用 R8 自动缩小代码。 flutter build --no-shrink
解决了这个问题。我想我需要将所有必需的例外添加到 proguard-rules.pro 文件中。
使用以下命令构建 apk。
输入 cd <app dir>
(替换为您的应用程序目录。)
flutter build apk --split-per-abi --no-shrink
(flutter build 命令默认为 --release。)
删除 --split-per-abi
标志会生成一个包含为所有目标 ABI 编译的代码的胖 APK。此类 APK 比拆分的 APK 更大,导致用户下载不适用于其设备架构的原生二进制文件。
答案 5 :(得分: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
您的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
}
}
您还可以在android / app / build.gradle defaultConfig方法中进行更改 身体。
multiDexEnabled true
如果要迁移到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'
}
并在遵循此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.hasData
是 true
),但在发布版本中它始终是 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)
在 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
}}
使用以下命令构建 apk
。
flutter build apk --no-shrink
或
flutter build apk --split-per-abi --no-shrink
两种解决方案都对我有用,但我个人推荐第二个
答案 10 :(得分:0)
确保您在 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'
...
}