首页/文章/flutter

flutter 打包安卓apk 常用配置

2024-11-01
5542 分钟
...

打包之前需要先不配置不然会报错 Execution failed for task ‘:app:mergeReleaseResources’.

APP目录下的build.gradle

aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false

如图

配置targetSdkVersion 、minSdkVersion

在android/app/src目录下的build.gradle配置
在这两个地方配置就可以 比如安卓应用商店是安卓targetSdkVersion api 30

defaultConfig {
        applicationId "com.example.tianxi_user"
        minSdkVersion flutter.minSdkVersion //最低兼容的安卓版本,flutter中默认是16
        targetSdkVersion flutter.targetSdkVersion //应用适配的安卓版本 flutter中默认是33
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
         ndk {
            //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"
            // biFilters "armeabi", "armeabi-v7a", "arm64-v8a","x86","x86_64"
        }
    }

或者去flutter安装目录中去配置 一劳永逸

flutter\packages\flutter_tools\gradle
flutter.gradle 修改这里的配置


class FlutterExtension {
    /** Sets the compileSdkVersion used by default in Flutter app projects. */
    static int compileSdkVersion = 33

    /** Sets the minSdkVersion used by default in Flutter app projects. */
    static int minSdkVersion = 16

    /** Sets the targetSdkVersion used by default in Flutter app projects. */
    static int targetSdkVersion = 33

    /**
     * Sets the ndkVersion used by default in Flutter app projects.
     * Chosen as default version of the AGP version below as found in
     * https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp
     */
    static String ndkVersion = "23.1.7779620"

    /**
     * Specifies the relative directory to the Flutter project directory.
     * In an app project, this is ../.. since the app's build.gradle is under android/app.
     */
    String source

    /** Allows to override the target file. Otherwise, the target is lib/main.dart. */
    String target
}

使用自定义证书签名打包

使用 keytool 生成签名证书,placement certificate
keytool -genkey -v -keystore xxx(项目名).keystore -alias xxx(项目名) -keyalg RSA -keysize 2048 -validity 10000 -storepassstorePassword密码-keypasskeyPassword密码

根据提示生成证书keystore
  • 将 text.keystore 文件放到 android/app/ 目录下。
  • 编辑 android/app/build.gradle,添加 signingConfigs:
android {
  ...
  signingConfigs {
    release {
      keyAlias 'text'
      keyPassword '***' 
      storeFile file('text.keystore ')
      storePassword '***'
    }
  }
  buildTypes {
    ...
    release {
      signingConfig signingConfigs.release
    }
  }
}

填入 keystore 的密码。

最后使用 flutter build apk --release 进行签名打包。

只打包32/64

现在很多安卓应用商店只支持64位 安卓api30以上的。这里要调整下
只支持64位:flutter build apk --target-platform android-arm64

支持32位:flutter build apk --target-platform=android-arm
同时支持64位和32位:flutter build apk

报错Could not create task ':flutter_plugin_android_lifecycle:generateDebugUnitTestConfig

在Android Studio中 打开安卓目录
修改文件,把下面代码注释在flutter中运行的时候放开


subprojects {
//    // 把这行注释掉,在flutter运行的时候,记得取消这行的注释
//    project.buildDir = "${rootProject.buildDir}/${project.name}"
}

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
flutter2026-07-01
Dart 入门回顾
1\. Dart 是什么 Dart 是一门类型安全、支持面向对象、支持异步编程的语言。它的语法和 JavaScript、TypeScript、Java、C# 都有一些相似之处。 Dart 常见使用场景: Flutter 跨平台应用开发 命令行工具 Web 应用 服务端接口或脚本 作为学习现代类型语言的入口 Dart 的几个核心特点: 静态类型:变量、函数返回值、参数都有类型。 类型推断:很多时候可以用 ,让 Dart 自动推断类型。 空...
学习
flutter2026-07-01
Flutter 常用 Widget 入门
Flutter 的核心思想是:一切皆 Widget。文字、图片、按钮、页面结构、布局、间距、滚动、动画、手势,几乎都由 Widget 组合出来。 1\. Widget 先分成几类理解 | 类别 | 常用 Widget | 解决什么问题 | | | | | | 应用入口 | 、 | 搭建应用外壳、主题、路由 | | 页面骨架 | 、 、 | 标准页面结构 | | 基础显示 | 、 、 | 显示文字、图标、图片 | | 布局容器 | 、 、...
学习
flutter2024-11-21
在 Flutter 中使用 webview_flutter 4.0
1. 2. ,已入选 3. 4. 本文是第 4 篇,定位是新手入门,介绍和演示 webview 的基础用法。最后还介绍了事件处理的技巧。因为是补写的,所以本来应该首发的却发在最后了。 环境准备已经在 说过了,不再赘述。既然是新手入门,就会本着详尽的原则,而且会多配示例。 获取页面信息 获取页面 title 核心方法:controller.getTitle 完整示例,放在 main.dart 就能运行。运行示例,点击获取 title 的按...
学习
flutter2024-11-06
flutter android端运行报错Namespace not specified. Specify a namespace in the module‘s build file
在使用flutterSDK 3.24之后发现新建项目,项目默认都是基于AGP8了,由于 AGP 开始强制要求 namespace 配置,不仅仅是主工程,也包括第三方库都强制要求 namespace 。但是我们在引入第三方库的时候会发现部分库没能及时的去做相关配置,这也就导致了我们会出现标题错误: 出现这个问题,我们可能会通过去找到本地缓存的第三方库代码去修改它的build.gradle和AndroidManifest.xml来解决缺失...
学习
flutter2024-11-03
Flutter中如何实现APP升级功能背景
背景 每个App应用中一定会包含的功能 ,App的运行平台不同实现升级功能的方式也就不同,基本分类如下所示。本文主要聚焦在使用Flutter框架开发的应用在安卓系统内如何更新,以及所涉及要点梳理。 IOS系统 Andriod系统 官网下载 各类应用市场 (本文聚焦点) 功能清单(按步骤) UpgradeCard组件(展示升级内容) 进行新旧版本对比判断是否需要更新 下载更新然后安装应用 UpgradeCard组件 组件需要包含基本标题、...
学习
flutter2024-11-03
Flutter应用内更新App版本使用flutter_downloader而非ota_update
做当前App应用内更新的前提:用户可以在App更新的时候还可以使用软件,不能让他一直等待下载,关闭下载组件后,打开组件还能继续看到他的进度,并且用户锁屏或者短暂退出APP后需要保证任务不能总是挂掉,这里没有用到保活,而是需要用到生命周期去让他暂停和恢复,所以当前app还要有一个全局管理类保存任务id。UI图在最后 (插件文档说明可以通知栏显示,但是我用的这个版本在100%下完后总是failed,而不是complete,就不会很友好,后面...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录