Flutter 打包aar

作者: 月未雪 | 来源:发表于2020-01-08 10:58 被阅读0次

    在Flutter的混合开发中,我们通过Flutter_module 嵌入原生,这样原生开发都需要配置Flutter环境,所以为了减少开发成本,我们需要把Flutter_module 打包成一个库直接供原生使用。

    下面我们学习一下Flutter打包aar的步骤:

    • 项目app下build.gradle配置

    配置成 apply plugin: 'com.android.library',为了解决第三方库不能一起打包在aar的问题,需要配置 apply plugin: 'com.kezong.fat-aar' ,

           def localProperties = new Properties()
       def localPropertiesFile = rootProject.file('local.properties')
       if (localPropertiesFile.exists()) {
           localPropertiesFile.withReader('UTF-8') { reader ->
            localProperties.load(reader)
           }
       }
    
    
    def flutterRoot = localProperties.getProperty('flutter.sdk')
    if (flutterRoot == null) {
        throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
    }
    
    def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
    if (flutterVersionCode == null) {
        flutterVersionCode = '1'
    }
    
    def flutterVersionName = localProperties.getProperty('flutter.versionName')
    if (flutterVersionName == null) {
        flutterVersionName = '1.0'
    }
    
    def isLib = true
    
    if(isLib) {
        apply plugin: 'com.android.library'
    } else  {
        apply plugin: 'com.android.application'
    }
    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    if(isLib) {
        apply plugin: 'com.kezong.fat-aar'
    }
    
    android {
        compileSdkVersion 28
    
        lintOptions {
            disable 'InvalidPackage'
        }
        
        defaultConfig {
            
            if (!isLib){
                applicationId "com.moom.flutter_app_module"
            }
        
            minSdkVersion 16
            targetSdkVersion 28
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        
        buildTypes {
            release {
                // TODO: Add your own signing config for the release build.
                // Signing with the debug keys for now, so `flutter run --release` works.
                signingConfig signingConfigs.debug
            }
        }
    }
    
    flutter {
        source '../..'
    }
    
    dependencies {
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test:runner:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
        if(isLib) {
            def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
            def plugins = new Properties()
            def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
            if (pluginsFile.exists()) {
                pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
            }
            plugins.each { name, _ ->
                println name
                embed project(path: ":$name", configuration: 'default')
            }
        }
    }
    
    
    • 在项目根build.gradle 配置

    为了解决第三方库,一起不能打包到aar文件中,还需要在项目根build.gradle 配置
    classpath 'com.kezong:fat-aar:1.0.3'

           buildscript {
        repositories {
            google()
            jcenter()
        }
        
        dependencies {
            classpath 'com.android.tools.build:gradle:3.2.1'
            classpath 'com.kezong:fat-aar:1.0.3'
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    rootProject.buildDir = '../build'
    subprojects {
        project.buildDir = "${rootProject.buildDir}/${project.name}"
    }
    subprojects {
        project.evaluationDependsOn(':app')
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    
    
    
    • 在项目终端下,切换到cd android ,执行打包命令,build下生成release的aar文件
           ./gradlew assembleRelease
    

    通过以上的步骤,我们就可以把Flutter项目打包成aar库。

    相关文章

      网友评论

        本文标题:Flutter 打包aar

        本文链接:https://www.haomeiwen.com/subject/epgjactx.html