2024年最全10天学会flutter DAY9 flutter自定义组件Plugin(3),面试前必看的一本书书籍
找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。多练。(视频优势是互动感强,容易集中注意力)你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!以下是总结出来的字节经典面试题目,包含:计算机网
最后
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
lib/hello.dart: -
Package的Dart代码
-
test/hello_test.dart: -
Package的单元测试代码.
-
实现package
-
对于纯Dart包,只需在主lib/.dart文件内或lib目录中的文件中添加功能 。
-
要测试软件包,请在test目录中添加unit tests。
开发 plugin packages
Step 1: 创建 package
-
要创建插件包,请使用
--template=plugin参数执行flutter create -
使用–org选项指定您的组织,并使用反向域名表示法。该值用于生成的Android和iOS代码中的各种包和包标识符。
flutter create --org com.example --template=plugin hello
-
这将在hello/文件夹下创建一个具有以下专用内容的插件工程:
-
lib/hello.dart:
-
插件包的Dart API.
-
android/src/main/java/com/yourcompany/hello/HelloPlugin.java:
-
插件包API的Android实现.
-
ios/Classes/HelloPlugin.m:
-
插件包API的ios实现.
-
example/:
-
一个依赖于该插件的Flutter应用程序,来说明如何使用它
默认情况下,插件项目针对iOS代码使用Objective-C,Android代码使用Java。如果您更喜欢Swift或Kotlin,则可以使用-i 或 -a 为iOS或Android指定语言。例如:
flutter create --template=plugin -i swift -a kotlin hello
Step 2: 实现包 package
-
由于插件包中包含用多种编程语言编写的多个平台的代码,因此需要一些特定的步骤来确保顺畅的体验。
-
Step 2a: 定义包API(.dart)
插件包的API在Dart代码中定义。打开主文件夹hello/ 。找到lib/hello.dart
- Step 2b: 添加Android平台代码(.java / .kt)
我们建议您使用Android Studio编辑Android代码。
在Android Studio中编辑Android平台代码之前,首先确保代码至少已经构建过一次(例如,从IntelliJ运行示例应用程序或在终端执行cd hello/example; flutter build apk)
-
启动Android Studio
-
在’Welcome to Android Studio’对话框选择 ‘Import project’, 或者在菜单栏 ‘File > New > Import Project…‘,然后选择hello/example/android/build.gradle文件.
-
在’Gradle Sync’ 对话框, 选择 ‘OK’.
-
在’Android Gradle Plugin Update’ 对话框, 选择 ‘Don’t remind me again for this project’.
您插件的Android平台代码位于 hello/java/com.yourcompany.hello/HelloPlugin.
您可以通过按下 ▶ 按钮从Android Studio运行示例应用程序.
- Step 2d: 连接API和平台代码
最后,您需要将用Dart代码编写的API与平台特定的实现连接起来。这是通过platform channels完成的。
添加文档
建议将以下文档添加到所有软件包:
-
README.md:介绍包的文件
-
CHANGELOG.md 记录每个版本中的更改
-
LICENSE 包含软件包许可条款的文件
发布 packages
一旦你实现了一个包,你可以在Pub上发布它 ,这样其他开发人员就可以轻松使用它
在发布之前,检查pubspec.yaml、README.md以及CHANGELOG.md文件,以确保其内容的完整性和正确性。
然后, 运行 dry-run 命令以查看是否都准备OK了:
flutter packages pub publish --dry-run
最后, 运行发布命令:
flutter packages pub publish
- 在介绍Plugin前,我们先简单了解一下Flutter:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gm91FJq-1652166967069)(./img/flutter.png)]](https://i-blog.csdnimg.cn/blog_migrate/241e389f8f8192bd3c179c66d5fde5f8.png)
-
Flutter框架包括:Framework和Engine,他们运行在各自的Platform上。
-
Framework是Dart语言开发的,包括Material Design风格的Widgets和Cupertino(iOS-style)风格的Widgets,以及文本、图片、按钮等基础Widgets;还包括渲染、动画、绘制、手势等基础能力。
-
Engine是C++实现的,包括Skia(二维图形库);Dart VM(Dart Runtime);Text(文本渲染)等。
实际上,Flutter的上层能力都是Engine提供的。Flutter正是通过Engine将各个Platform的差异化抹平。而我们今天要讲的Plugin,正是通过Engine提供的Platform Channel实现的通信。
- Plugin其实就是一个特殊的Package。Flutter Plugin提供Android或者iOS的底层封装,在Flutter层提供组件功能,使Flutter可以较
方便的调取Native的模块。很多平台相关性或者对于Flutter实现起来比较复杂的部分,都可以封装成Plugin。其原理如下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGdENMPl-1652166967071)(./img/flutter_channel.png)]](https://i-blog.csdnimg.cn/blog_migrate/053f236ddb777ac131ff14341e152a7a.png)
通过上图,我们看到Flutter App是通过Plugin创建的Platform Channel调用的Native APIs。
Platform Channel:
-
Flutter App (Client),通过MethodChannel类向Platform发送调用消息;
-
Android Platform (Host),通过MethodChannel类接收调用消息;
-
iOS Platform (Host),通过FlutterMethodChannel类接收调用消息。
PS:消息编解码器,是JSON格式的二进制序列化,所以调用方法的参数类型必须是可JSON序列化的。
PS:方法调用,也可以反向发送调用消息。
- Android Platform
FlutterActivity,是Android的Plugin管理器,它记录了所有的Plugin,并将Plugin绑定到FlutterView。
- 理解Platform Channel工作原理
-
Flutter定义了三种不同类型的Channel,它们分别是
-
BasicMessageChannel:用于传递字符串和半结构化的信息。
-
MethodChannel:用于传递方法调用(method invocation)。
-
EventChannel: 用于数据流(event streams)的通信。
三种Channel之间互相独立,各有用途,但它们在设计上却非常相近。每种Channel均有三个重要成员变量:
- name: String类型,代表Channel的名字,也是其唯一标识符。
最后
我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。
字节高级Android经典面试题和答案


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img-YAvGQ4JW-1715836421809)]
[外链图片转存中…(img-iwQhZolB-1715836421810)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐




所有评论(0)