flutter混编Android篇

Posted 勤奋的菜才是我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flutter混编Android篇相关的知识,希望对你有一定的参考价值。

android 混编的方式比较成熟,基本是以 aar 的方式。

aarAndroid Archive的缩写,而我们熟悉的jar则是Java Archive的缩写.说白了aar就是一种类似于Jar的打包格式。


目录:

一、aar

二、原生工程测试

三、总结


一、aar

首先,和 ios 一样,这里也有2个工程。原生 Android 工程和 flutter module 工程。在 module 工程下面执行 flutter build aar 构建 AAR 包:

 cd some/path/ flutter build aar

在Android原生工程 app/build.gradle 配置 aar 的位置:


repositories { maven { url 'some/path/my_flutter/build/host/outputs/repo' // This is relative to the location of the build.gradle file // if using a relative path. } maven { url 'https://storage.googleapis.com/download.flutter.io' }}


这样就结束了,Android 是不是比 iOS 简单太多,都是以包的形式引入原生工程。


二、原生工程测试

在 AndroidManifest.xml 中注册


<activity android:name="io.flutter.embedding.android.FlutterActivity" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" /> <activity android:name=".MyFlutterActivity" />


在主页时初始化flutter引擎

package com.example.myapplication; import android.content.Intent;import android.os.Bundle;import android.view.View; import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.floatingactionbutton.FloatingActionButton;import io.flutter.view.FlutterMain; public class MainActivity extends AppCompatActivity {  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FlutterMain.startInitialization(MainActivity.this.getApplicationContext()); FloatingActionButton fab = findViewById(R.id.fab);  fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MyFlutterActivity.class); startActivity(intent); } });  } }


在新页面打开flutter页面

package com.example.myapplication; import android.os.Bundle;import io.flutter.app.FlutterActivity;import io.flutter.plugin.common.MethodCall;import io.flutter.plugin.common.MethodChannel;import io.flutter.plugin.common.MethodChannel.MethodCallHandler;import io.flutter.plugin.common.MethodChannel.Result; public class MyFlutterActivity extends FlutterActivity { private static final String CHANNEL = "key***";  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);  new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodCallHandler() { @Override public void onMethodCall(MethodCall call, Result result) { if (call.method.equals("loginResult")) { // 获取Flutter传递的参数 //Log.e(call.arguments); System.out.println(call.arguments); // 回传给Flutter result.success(call.arguments); } } }); }}

之后在 Android Studio  里构建 app 就好了。(flutter登录的代码,此处略)


三、总结

aar 的方式集成十分方便;但是,版本的管理是否有更好的方案,以及其依赖第三方插件的打包配置...




上次和 Java 打交道已经是2年前啦,在 Mac 里安装 Java 我内心是拒绝的;其实 Android Studio 自带Java,所以不需要再单独安装了,那我还是很乐意的, Mac 里面配置一下环境变量即可使用。


java环境配置

想起大三的时候在宿舍那台 windows 本上,配置Java环境的场景,为啥我安装了Java,还要配环境变量呀


其实,就是执行命令的时候告诉计算机,Java 的位置,否则我们就需要把绝对路径带上。

以上是关于flutter混编Android篇的主要内容,如果未能解决你的问题,请参考以下文章

ios flutter 混编

Flutter - 将 Flutter 集成到现有项目(iOS - Framework篇)

Flutter混编工程之通讯之路

Flutter工程化之iOS混编集成

Flutter混编工程之通讯之路

Flutter混编工程之通讯之路