Android笔记:在Flutter中嵌入原生View,手握5家大厂offer

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“#000000”
tools:context=“.MainActivity”>

</android.support.constraint.ConstraintLayout>

Flutter以一个View的方式被装载。

class MainActivity : AppCompatActivity() {

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableSlowWholeDocumentDraw()
setContentView(R.layout.activity_main)
val flutterView = Flutter.createView(this@MainActivity,lifecycle,“route1”)
ViewRegistrant().registerWith(flutterView.pluginRegistry)
val layout = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
content.addView(flutterView, layout)
initWebView()
}
@SuppressLint(“SetJavaScriptEnabled”)
private fun initWebView() {
var webSettings = web.settings
webSettings.javaScriptEnabled = true
webSettings.setSupportZoom(false)
web.requestFocusFromTouch()
web.isVerticalScrollBarEnabled = false
web.isHorizontalScrollBarEnabled = false
web.loadUrl(“https://www.baidu.com”)
}
}

使用val flutterView = Flutter.createView(this@MainActivity,lifecycle,"route1")生成一个FlutterView,然后Add到布局中。“route1”会被传入到Flutter中。

第一步

继承PlatformViewFactory在它的create()方法中返回一个在Flutter中要用的原生View。

这里我返回了一个ImageView

class NativeImageView(createArgsCodec: MessageCodec) : PlatformViewFactory(createArgsCodec) {
override fun create(context: Context, i: Int, o: Any?): PlatformView {
var imageView = ImageView(context)
imageView.layoutParams = ViewGroup.LayoutParams(100, 100)
imageView.background = context.resources.getDrawable(R.mipmap.ic_launcher)
return object : PlatformView {
override fun getView(): View {
return imageView
}
override fun dispose() {
}
}
}

}

第二步

写一个桥接器,把上面写好的View传进去。

class ViewRegistrant : PluginRegistry.PluginRegistrantCallback {
override fun registerWith(registry: PluginRegistry) {
val key = ViewRegistrant::class.java.canonicalName
if (registry.hasPlugin(key)) return
val registrar = registry.registrarFor(key)
registrar.platformViewRegistry().registerViewFactory(“imageView”, NativeImageView(StandardMessageCodec()))
}
}

这里的"imageView",会在Flutter中用到。

第三步

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

写在最后

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~

将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。

提升架构认知不是一蹴而就的,它离不开刻意学习和思考。

**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter 是谷歌开发的跨平台移动应用开发框架,它能够将 Dart 代码编译为本地平台的 ARM 代码,在 iOS 和 Android 平台上运行。Flutter 支持与原生代码混合使用,这使得开发人员可以使用 Flutter 开发 UI,同时使用原生代码处理一些高级功能。 如果你想将 Flutter 作为一个 aar 库嵌入Android 项目,可以按照以下步骤: 1. 在 Flutter 项目创建插件 Flutter 插件是一种将 Flutter 功能转换为原生代码的机制。插件包含了一个 Dart API 和一个原生 API,它们之间通过平台通道进行通信。要将 Flutter 项目作为 aar 库嵌入Android 项目,你需要将 Flutter 插件创建为一个 aar 库。 你可以通过运行以下命令创建一个 Flutter 插件: ``` flutter create --template=plugin my_flutter_plugin ``` 这将创建一个名为 my_flutter_plugin 的插件,并在其包含一个 Flutter 模块和一个 Android 模块。 2. 将 Flutter 插件打包为 aar 库 要将 Flutter 插件打包为 aar 库,你需要对 Android 模块进行一些修改。首先,将 Android 模块的 build.gradle 文件的 apply plugin 行更改为: ``` apply plugin: 'com.android.library' ``` 然后,将以下内容添加到 build.gradle 文件的末尾: ``` android { ... sourceSets { main.java.srcDirs += "${flutterRoot}/packages/flutter_module/src/main/java" } } task copyFlutterFramework(type: Copy) { from new File(project(':flutter').projectDir, 'build/app/outputs/flutter-apk/app-release-unsigned.apk') into('libs') { rename { 'app-release-unsigned.apk' } } } preBuild.dependsOn(copyFlutterFramework) ``` 这将允许你将 Flutter 模块的 Dart 代码编译为本地平台的代码,并将其打包到 aar 文件。 最后,在 Android 模块的 build.gradle 文件添加以下依赖项: ``` dependencies { implementation 'com.google.android.material:material:1.0.0' implementation project(':flutter') } ``` 3. 将 aar 库添加到 Android 项目 要将 aar 库添加到 Android 项目,你需要将 aar 文件复制到 Android 项目的 libs 目录,并将以下内容添加到 Android 项目的 build.gradle 文件: ``` repositories { flatDir { dirs 'libs' } } dependencies { implementation(name:'my_flutter_plugin', ext:'aar') } ``` 这将允许 Android 项目在构建时引用 aar 库。 这些步骤将允许你将 Flutter 作为一个 aar 库嵌入Android 项目。当你构建 Android 项目时,Flutter 将作为一个原生库被包含在内,可以通过平台通道与 Dart 代码进行通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值