【问题标题】:How to build signed apk from Android Studio for Flutter如何从 Android Studio 为 Flutter 构建签名的 apk
【发布时间】: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


    【解决方案1】:

    您可以使用 IDE 和命令行构建 Apk/AppBundle。

    • 通过 IDE 构建 APK/AppBundle:

      步骤一

      在 Android Studio 的标签栏中,点击Tools,然后点击Flutter,然后点击Open Android module in Android Studio:

      第二步

      在新窗口中打开项目:

      第三步

      打开项目后,点击Build,然后点击Generate Signed Bundle / APK ...


    • 通过命令构建APK/AppBundle:

      第一步:

      修改您的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'
              }
          }
      }
      

      第二步:

      构建 AppBundle:

      flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
      

      构建 APK:

      flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
      

    【讨论】:

    • 谢谢,后面的步骤我已经知道了。请编辑以显示如何添加 android 模块,因为此“生成签名包/apk”已被禁用。
    • 谢谢,但是当我再次打开 Android Studio 时它消失了
    • Android Studio 4文件下没有项目结构
    • 对于任何人都找不到“在 Android Studio 中打开 Android 模块”选项stackoverflow.com/a/64004188/8921450
    • Google 真的搞砸了,让事情变得更糟。他们应该已经为宿主项目实现了这个。
    【解决方案2】:

    要使用 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。

    重要提示:

    请不要丢失密钥及其所有信息,即密钥存储路径、密钥存储密码、密钥别名和密钥密码(最好将其记入笔记本或制作文本文件并存储在您的驱动器上,同时生成它。)。 如果没有这个,您将无法更新您的应用程序,因为新版本需要使用相同的密钥进行签名。

    希望您能得到详细的信息。

    【讨论】:

    • 很好的总结,但这不是你为颤振做的确切方式
    • @MarcelHofgesang 有没有其他更简单的方法?
    • @PaulSZ 从第 7 步开始,生成签名的 apk 会有所不同
    • @MarcelHofgesang thnx 的建议。
    • @PaulSZ 我认为这是最简单的方法,而不是使用命令提示符生成签名的 apk。
    【解决方案3】:

    除了使用 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。然后你会被要求输入

    • 一个密钥别名,
    • 您的证书信息(CN=First and Last Name (??), OU=Organizational Unit, O=Organization, L=City or Locality, S=State or Province, C=Country Code (XX)
    • 密钥密码
    • 和密钥库密码

    4.生成您签名的 apk 或捆绑包

    只需运行 flutter build apk --release 或 flutter build bundle --release 即可为您的应用生成签名的 apk/捆绑包。

    【讨论】:

    • 但是当您决定不将其提交到您的存储库时,对于没有签名配置的团队成员来说,这将失败。
    • 当然,但我建议只有一个人来生成签名的 apk。
    • 当然。我的观点是,当您不提交将由flutter pub pub run flutter_automation --android-signin 生成的密钥库文件或配置文件时,它甚至会无法编译(调试)。我希望在不提交与签名相关的文件的情况下使用您的解决方案时不会破坏项目,因为正如您所说:只有一个人应该生成签名的 APK。我希望这是有道理的。
    【解决方案4】:

    根据DanyPata 对于flutter,您必须设置签名文件,然后运行flutter build APK。运行flutter命令非常重要,这样flutter中添加的所有更改/库也会添加到Android项目中。

    第 1 步

    转到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项目中。
    • @danypata 更新答案以显示此评论,谢谢。
    • 感谢您的回答,但我的模块下只有“源、路径、依赖项”选项卡。我所做的是将android模块添加到我的项目模块中,然后在构建选项卡下启用“生成签名的apk/bundle”
    【解决方案5】:

    对于帮助所有人的完整解决方案(包括那些在 sdk 中找不到“在 android studio 中打开以进行编辑” 选项的人)请按照以下步骤操作..

    1. 假设您有一个名为 "YourProjectName" 的项目...复制您的项目名称,正如我在下面的图片中审查的那样,然后右键单击android 文件夹来创建一个新文件.. 新文件上的名称必须是 "YourProjectName_android.iml"

    2. 按照步骤 1 中描述的格式创建文件后,您现在将完全看到 “在 android studio 中打开以进行编辑” 选项..

    3. 现在在点击上面第2步中的选项后让它构建,然后点击“生成签名的apk”的常用选项,如下图

    【讨论】:

    • 实时保护程序。谢谢你的朋友
    【解决方案6】:

    每次运行应用时,它都会生成 apk。

    你可以在你的项目文件中找到它:

    你的项目\build\app\outputs\apk

    【讨论】:

    • 对不起,我的意思是签名的 apk,我已经编辑了我的问题
    • 每次运行应用都会创建一个调试 apk 而不是发布版。
    【解决方案7】:

    我找到了永久解决方案

    只需直接从 “应用程序直接” 打开您现有的 Flutter 应用程序,其中包含直接在 android studio 中的 Android Manifest 目录等 android 文件。这会将您的项目加载为一个 android 项目,我相信其余部分是不言自明的,您需要做什么。

    【讨论】:

      【解决方案8】:

      添加此代码并将其保存到您的应用和 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>
      

      【讨论】:

        猜你喜欢
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 2019-03-18
        • 2018-10-19
        • 1970-01-01
        • 2020-04-24
        相关资源
        最近更新 更多