【发布时间】:2019-08-27 10:20:57
【问题描述】:
有没有办法在 Android Studio 中为 Flutter 构建一个 apk?
我看过这个指南:https://flutter.dev/docs/deployment/android
但是这里用flutter console来构建apk。
【问题讨论】:
标签: android android-studio flutter dart apk
有没有办法在 Android Studio 中为 Flutter 构建一个 apk?
我看过这个指南:https://flutter.dev/docs/deployment/android
但是这里用flutter console来构建apk。
【问题讨论】:
标签: android android-studio flutter dart apk
您可以使用 IDE 和命令行构建 Apk/AppBundle。
在 Android Studio 的标签栏中,点击Tools,然后点击Flutter,然后点击Open Android module in Android Studio:
在新窗口中打开项目:
打开项目后,点击Build,然后点击Generate Signed Bundle / APK ...
修改您的build.gradle(app) 文件并在其中包含您的关键信息:
android {
compileSdkVersion 31
signingConfigs {
release {
storeFile file("<path-to-keys.jks>")
storePassword "********"
keyAlias "<key-alias>"
keyPassword "********"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
【讨论】:
要使用 Android Studio 3.5.1 版为 Flutter 创建/生成签名 APK,请执行以下步骤 -
第 1 步:
进入你的项目然后Tools -> Flutter -> Open for Editing in Android Studio如下图所示
然后选择新窗口选项如下图
第 2 步:
等待一段时间,直到项目同步。之后
从菜单栏中转到 Build -> GenerateSigned Bundle/APK... 选项,如下所示
第 3 步:
根据需要选择 Android App Bundle 或 APK 选项。 (Android App Bundle 是最好的解决方案)并点击下一步按钮。
第 4 步:
选择 Create new.. 选项以生成新的签名密钥(当您首次发布应用时)
第 5 步:
如下填写所有选项
注意-
密钥存储路径 -
您的密钥存储文件,即 .jks 文件存储的路径(如上图所示)。 [最好的办法 选择项目目录中的路径。]
密钥库密码 -
输入密码,例如123456
密钥别名 -
输入密钥别名(.jks 文件的名称),例如键
密钥密码 -
输入密钥密码(选择与密钥库密码不同的密码) 例如key123456
有效期(年) - 保持原样或根据您的要求进行更改。
证书 -
填写证书信息(并非所有字段都是必填项)
然后点击OK,你会看到如下画面...
第 6 步 -
第 7 步 -
单击下一步按钮,您将看到以下屏幕...
选择选项
构建变体 - 发布和
签名版本分别是V1和V2如上图所示,然后点击Finish按钮。
第 8 步 -
等待一段时间,直到 Gradle Build Running 过程完成,如下所示...
最后您将获得 Generate Signed APK : (APKs) 成功生成。 点击 Locate 选项以获取 Generate Signed APK Key 的位置。如下图。
至此,您为 Flutter 项目成功生成了签名 APK。
重要提示:
请不要丢失密钥及其所有信息,即密钥存储路径、密钥存储密码、密钥别名和密钥密码(最好将其记入笔记本或制作文本文件并存储在您的驱动器上,同时生成它。)。 如果没有这个,您将无法更新您的应用程序,因为新版本需要使用相同的密钥进行签名。
希望您能得到详细的信息。
【讨论】:
除了使用 Android Studios UI,您还可以轻松地使用命令提示符。这种方式对我来说更容易,因为我在使用 ui 创建签名 apk 时遇到了很多问题。
在创建签名的 APK 之前,您必须准备好您的项目。
1.将 Flutter 自动化依赖项添加到您的 pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_automation: ^1.1.4
目前 ^1.1.4 是最新的依赖项,这最终会改变。
2。获取新的依赖项
在项目目录的命令提示符下运行flutter packages get
3.设置签名
在你的命令提示符下运行flutter pub pub run flutter_automation --android-sign。然后你会被要求输入
4.生成您签名的 apk 或捆绑包
只需运行 flutter build apk --release 或 flutter build bundle --release 即可为您的应用生成签名的 apk/捆绑包。
【讨论】:
flutter pub pub run flutter_automation --android-signin 生成的密钥库文件或配置文件时,它甚至会无法编译(调试)。我希望在不提交与签名相关的文件的情况下使用您的解决方案时不会破坏项目,因为正如您所说:只有一个人应该生成签名的 APK。我希望这是有道理的。
根据DanyPata 对于flutter,您必须设置签名文件,然后运行flutter build APK。运行flutter命令非常重要,这样flutter中添加的所有更改/库也会添加到Android项目中。
转到File - Project Structure 并在Modules 下选择app。注意:它可能不会被称为app——它可能是你在创建项目时给它的任何名称。选择Signing 标签。
您需要创建一个证书,因此请单击蓝色加号并填写空白。完成此过程后,您将前往Build Types 选项卡并确保您有两个 - debug 和 release,如果您没有 release,则再次按蓝色加号并创建它。
对于发布版本,您需要选择您之前创建的 Signing Config 并将其余部分保留为默认值。
然后要构建您的发布 APK,请转到顶部主栏上的 Build,然后选择 Build Bundle(s) / APK(s) 并选择 Build APK(s)。
密切关注 Event Log 以查看其完成时间以及 APK 保存到的路径。
更新gradle.build 文件。确保您的项目可见性设置为 Project 这样您就可以看到文件树中的所有文件。
前往yourapp/src,然后打开build.gradle。
下,android 添加:
buildTypes {
release {
minifyEnabled false
signingConfig signingConfigs.theNameForCertificateYouCreated
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
重要提示:作为快速提醒和预防措施,请勿丢失它创建的密钥。没有这个,您将无法更新您的应用程序,因为新版本需要使用相同的密钥进行签名。
【讨论】:
flutter build apk。运行flutter命令非常重要,这样flutter中添加的所有更改/库也会添加到android项目中。
对于帮助所有人的完整解决方案(包括那些在 sdk 中找不到“在 android studio 中打开以进行编辑” 选项的人)请按照以下步骤操作..
【讨论】:
每次运行应用时,它都会生成 apk。
你可以在你的项目文件中找到它:
你的项目\build\app\outputs\apk
【讨论】:
我找到了永久解决方案
只需直接从 “应用程序直接” 打开您现有的 Flutter 应用程序,其中包含直接在 android studio 中的 Android Manifest 目录等 android 文件。这会将您的项目加载为一个 android 项目,我相信其余部分是不言自明的,您需要做什么。
【讨论】:
添加此代码并将其保存到您的应用和 android.iml
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" />
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" />
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/app/src/main/kotlin" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
</component>
</module>
【讨论】: