Flutter 3.x新版android端的build.gradle.kts文件配置arm64-v8a和armeabi-v7a等

新版的android端build.gradel采用了Kotlin ,语法和原先的Groovy 有点区别,build.gradle.kt 的配置结合了上层的settings.gradle.kts文件进行配置

新语法如图:

新版使用 externalNativeBuild、ndkBuild、getDefaultProguardFile

kotlin 复制代码
externalNativeBuild {
    ndkBuild {
        abiFilters.addAll(listOf("arm64-v8a", "armeabi-v7a"))
    }
} 
//  ndkBuild还可以是CMake,例如:
//  ndkBuild {
//     path = file("src/main/cpp/Android.mk")
//  }
kotlin 复制代码
// 原先的MinifyEnabled等也改了
isMinifyEnabled = true
isShrinkResources = true

// 新版getDefaultProguardFile
proguardFiles(
    getDefaultProguardFile("proguard-android-optimize.txt"),
    "proguard-rules.pro"
) 

下面是一些常用的配置,根据自己需求配置,大多数和原先大差不差

kotlin 复制代码
plugins {
    id("com.android.application")
    kotlin("android")
}

android {
    namespace = "com.example.app"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 21
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        // 如果使用 native 代码
        externalNativeBuild {
            ndkBuild {
                abiFilters.addAll(listOf("arm64-v8a", "armeabi-v7a"))
            }
        }

        // 多语言支持(可选)
        resourceConfigurations.addAll(listOf("en", "zh", "ja"))
    }

    // 建议将密码等敏感信息放入 gradle.properties 文件中
    // 并用 project.property("key") 读取
       signingConfigs { 
        create("release") { 
            storeFile = file(project.property("RELEASE_STORE_FILE") as String) 
            storePassword = project.property("RELEASE_STORE_PASSWORD") as String
            keyAlias = project.property("RELEASE_KEY_ALIAS") as String
            keyPassword = project.property("RELEASE_KEY_PASSWORD") as String
        }

    }
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        debug {
            isMinifyEnabled = false
            isShrinkResources = false
        }
    }

    // 构建 ABI 分包(可选)
    splits {
        abi {
            isEnable = true
            reset()
            include("arm64-v8a", "armeabi-v7a")
            isUniversalApk = false
        }
    }

    // Flutter 兼容性设置(防止构建冲突)
    packaging {
        resources {
            excludes += setOf(
                "META-INF/**",
                "lib/**/libflutter.so",
                "**/*.kotlin_module"
            )
        }
    }

    externalNativeBuild {
        ndkBuild {
            path = file("src/main/cpp/Android.mk") // 如果你使用 ndk-build
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.10")
    // 添加你需要的库
}

gradle.properties加入jks信息

properties 复制代码
RELEASE_STORE_FILE=keystore.jks
RELEASE_KEY_ALIAS=myKeyAlias
RELEASE_STORE_PASSWORD=yourStorePassword
RELEASE_KEY_PASSWORD=yourKeyPassword
相关推荐
brzhang3 分钟前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
reembarkation13 分钟前
自定义分页控件,只显示当前页码的前后N页
开发语言·前端·javascript
gerrgwg1 小时前
React Hooks入门
前端·javascript·react.js
ObjectX前端实验室1 小时前
【react18原理探究实践】调度机制之注册任务
前端·react.js
汉字萌萌哒1 小时前
【 HTML基础知识】
前端·javascript·windows
ObjectX前端实验室2 小时前
【React 原理探究实践】root.render 干了啥?——深入 render 函数
前端·react.js
2501_915918412 小时前
iOS 框架全解析,原生框架与跨平台框架对比、开发应用打包与 App Store 上架实战经验
android·ios·小程序·https·uni-app·iphone·webview
K24B;3 小时前
多模态大语言模型LISA++
android·人工智能·语言模型·分割·多模态大语言模型
北城以北88883 小时前
Vue--Vue基础(二)
前端·javascript·vue.js
ObjectX前端实验室3 小时前
【react18原理探究实践】更新调度的完整流程
前端·react.js