flutter混编Android篇
Posted 勤奋的菜才是我
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flutter混编Android篇相关的知识,希望对你有一定的参考价值。
android 混编的方式比较成熟,基本是以 aar 的方式。
aar
是Android 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 {
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() {
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***";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodCallHandler() {
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篇的主要内容,如果未能解决你的问题,请参考以下文章