路运通Android端以aar形式集成flutter登陆注册模块

首先这种方式对代码的侵入性是最小的,也不需要有flutter的环境,因为相关资源已经打包进aar了,下面就来讲解下具体如何操作
1.flutter项目打包成aar
1.1修改Android下的 build.gradle


// 1. 生成aar产物,需要把`application`改为`library`
apply plugin: 'com.android.library'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 28

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // 2. flutter 作为寄存于其他app中的产物,所以不应该存在applicationId,所以注释掉该行.
        //applicationId "com.zhuandian.flutterapp"
        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
        }
    }
}
  1. 2 修改Androidmanifest.xml文件



    
   
    
    
        
        
        
        


            
           
            
                
                

            
                

                
            
        
        
    


现在通过Terminal中我执行gradlew assembleRelease编译出的产物会有原来的apk变成aar文件,文件输出目录为项目根目录下的/bulid/app/outputs/aar
1.3 Android端项目配置接入aar依赖
1.3.1 新建原生Android项目,我上述打包产出的aar文件作为依赖放入libs文件夹
1.3.2 修改dependencies节点下的fileTree依赖配置,支持引入aar依赖支持

implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
    ...
}

1.3.3 在原生Android项目中写一个简单的按钮测试flutter项目

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //初始化flutter运行环境
        FlutterMain.startInitialization(this)
        tv_test_aar.setOnClickListener {
            startActivity(Intent(this, com.zhuandian.flutterapp.MainActivity::class.java))
        }
    }
}

到此就结束了,不过因为flutter默认采用Androidx作为依赖库,所以如果主工程使用的是compat包则需要更新到Androidx,这也是一个不小的工作量

你可能感兴趣的:(路运通Android端以aar形式集成flutter登陆注册模块)