美文网首页
路运通Android端以aar形式集成flutter登陆注册模块

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

作者: 太阳晒得我丶好干瘪 | 来源:发表于2020-02-07 16:32 被阅读0次

    首先这种方式对代码的侵入性是最小的,也不需要有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文件
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.zhuandian.flutterapp">
    
        <uses-permission android:name="android.permission.INTERNET" />
       
        <!--1.项目作为子项目寄存于原生app中,不需要icon、label等属性,这里直接省去各种配置即可-->
        <application>
            <!--android:name="io.flutter.app.FlutterApplication"-->
            <!--android:icon="@mipmap/ic_launcher"-->
            <!--android:label="flutter_app">-->
            <activity
                android:name=".MainActivity"
                android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
                android:hardwareAccelerated="true"
                android:launchMode="singleTop"
                android:theme="@style/LaunchTheme"
                android:windowSoftInputMode="adjustResize">
    
    
                <!--2.项目作为子项目寄存于原生app中,入口acitvity不需要配置LAUNCHER,不然应用集成到宿主app中,启动会在桌面上生成两个应用图标-->
               
                <!--<meta-data-->
                    <!--android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"-->
                    <!--android:value="true" />-->
    
                <!--<intent-filter>-->
                    <!--<action android:name="android.intent.action.MAIN" />-->
    
                    <!--<category android:name="android.intent.category.LAUNCHER" />-->
                <!--</intent-filter>-->
            </activity>
            <activity android:name=".SecondActivity"></activity>
        </application>
    
    </manifest>
    

    现在通过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登陆注册模块

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