Android Studio 3.6 发布了,又有新的特性可让人感受热血沸腾了,小M开开心心地点完「Check for Updates」按钮,把 Android Studio 安装完,开启了新一轮探索之旅。
html
① 屡次「邂逅」java
“咦, Google 到底更新了什么呢?据说优化了不少内容,但是一会儿也想不起来啊,要是错过了某些特性会让人很遗憾。”小M内心这样想着,他打开了他刚更新完的 Android Studio:android
What's New in 3.6 哇,这不是就是小M要的东西吗?赶忙浏览下。这里面提到了 Design tools/Android Gradle plugin 3.6.0 updates/Emulators/... 等等内容。这个 Assistant 有点好玩呀,嵌入式的类 WebView 的信息展现体验给小M留下了很是好的印象。json
② 攀谈甚欢bash
今天,小M接到一个任务,公司要为海外用户开发的 App 接入 Google Firebase 组件。印象里 Firebase 依靠 Google Play Services 提供了许多能力,这么多内容,接入会不会很复杂呢?国内的一些公司提供的单业务 SDK 所有是靠分发 gradle 坐标依赖的方式提供给用户接入,Firebase 不会也这样吧?app
小M打开了 Android Developer 官网,想查询下如何接入 Firebase SDK,找到了以下内容:ide
哈!又是 Assistant,和刚刚的东西是同样的吗?因而根据以上指南,小 M 打开了 Firebase 提供的 Assistant:工具
哇,此次的内容比刚刚的 What's New 丰富多了,还有连接能够点击。每一节都是不一样的组件,点开一个组件后,咱们能够看到以下的教程:gradle
这里的交互就丰富多了,不只有按钮,还有代码片断,Step 1/2/3/4 的结构很清晰,简直像 Google 在手把手教你接入 Firebase,这种体验比咱们看只有干货的文档要舒服多了。首先要在 Android Studio 中登陆好 Google 帐户,而后点击「Connect to Firebase」,选择好项目以后,咱们发现咱们的 App 工程下面就多了原本须要手动接入的 google-services.json优化
回来看下 Assistant 中,第一步显示完成了:
哇,这样我都不用本身去检查了,那么继续点击第二步,出现了一个对话框:
这个是告诉了咱们,若是咱们应用变动后,咱们的项目会发生哪些变化,点完「Accept Changes」以后,咱们看一下 build.gradle,发现已经所有都应用好了:
//其他配置省略
apply plugin: 'com.google.gms.google-services'
android {
...
}
dependencies {
implementation 'com.google.firebase:firebase-auth:19.3.0'
}复制代码
这样,咱们想接入的 auth 组件就完成了,直接运行跑就行了。
这样的接入方式也太舒服了吧?
③ Say Hi
小 M 今天接到了一个任务,公司有一个 SDK 须要输出到外网,小 M 再次想起了 Assistant 工具,要是咱们也能提供一个 Assistant 界面,那该多好呀,和 PD 讨论了下,PD 很是同意,因而小 M 开始调研如何利用 IDEA Plugin 开发方式开发一个 Assistant 界面。
首先,IDEA Plugin 开发环境按照这个文档(https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html)配置好,由于 Assistant 机制是由 Android Studio 提供的,所以在开发过程当中须要添加对 Android Plugin 的支持,也就是在 intellij 这个 DSL 中添加:
intellij {
//.....省略
setPlugins("java", "gradle", "groovy", "terminal", "android")
}复制代码
添加完成以后,咱们就有了全部为 Android Studio 开发插件的环境,同时要有个心理准备,由于 IDEA 插件开发的环境比较恶劣,除了官方提供的 Plugin Development Guide 以外,没有其余详细的资料能够参考,对于 Assistant 相关的开发更是只能查看相关源码提供参考。
那么咱们参考两个源码,一个是 Firebase Plugin 的反编译源码,另一个是 Android Studio 里面的源码来实现,咱们先来看 Firebase Plugin 的反编译源码,把 Firebase Plugin 的 jar 包反编译后,而后只用查里面的关键字咱们就能找到 Assistant 界面描述的资料了,好比咱们搜“Firebase gives you the tools and infrastructure from Google to help you develop, grow and earn money from your app”
一会儿就明白了,咱们的 Assistant 界面事实上是 Android Studio 分析这个 xml 生成相关的 UI 组件产生的 —— 由于 IDEA 是由 Swing 构建的, Swing UI 并未提供 WebView,咱们没法获得原生 WebView 的能力。
咱们能够再搜索 firebase_tutorial_bundle.xml 查看哪里使用了这个 xml。
再往上查,发现这个类就在 plugin.xml 中注册了
<idea-plugin>
<!-- 省略不重要的节点 -->
<extensions defaultExtensionNs="com.android.tools.idea.assistant">
<assistantBundleCreator implementation="com.google.services.firebase.FirebaseBundleCreator"/>
<actionStateManager implementation="com.google.services.firebase.DependencyStateManager"/>
<actionHandler implementation="com.google.services.firebase.AddDependencyAction"/>
<actionStateManager implementation="com.google.services.firebase.FirebaseConnectStateManager"/>
<actionHandler implementation="com.google.services.firebase.FirebaseConnectAction"/>
<actionHandler implementation="com.google.services.firebase.RecordRoboScriptAction"/>
</extensions>
<actions>
<action
id="DeveloperServices.Firebase"
class="com.google.services.firebase.FirebaseOpenSidePanel"
text="Firebase"
description="Add Firebase to your app">
<add-to-group group-id="AndroidToolsGroupExtension"/>
</action>
</actions>
</idea-plugin>复制代码
以上已经省略了咱们暂时不关心的几个节点,能够看到注册的相关节点和 action,FirebaseOpenSidePanel 应该就是拿来打开小助手了,咱们看到 FirebaseBundleCreator 中有一行代码:
public class FirebaseBundleCreator implements AssistantBundleCreator {
private static final String TUTORIAL_CONFIG_FILENAME = "/firebase_tutorial_bundle.xml";
@NotNull
public String getBundleId() {
return "DeveloperServices.Firebase";
}
}复制代码
这里的 BundleId 恰好对应 FirebaseOpenSidePanel 这个 action 的 Id,这样 action 和这个 bundle 就关联上了。
仿照这几个类写好后,「Hello World」 就完成了。
④ 部署「教程」
咱们再回头看 firebase_tutorial_bundle.xml 里面有 feature/description/tutorial/step 等节点,不一样的节点有不一样的展示形式,等咱们把文案填充好以后,就出现了一个完整的能够包含步骤的界面了。若是你想看看还有什么结点能够用的话,能够看下 com.android.tools.idea.assistant.DefaultTutorialBundle 这个类,等咱们把文案填充好以后,就出现了一个完整的能够包含步骤的界面了。
小M利用了 Android Studio 提供的 Assistant 快速开发完了 mPaaS Android 的接入方案,目前已经对外发布啦,这是咱们面向公有云快速接入的最新尝试,但愿 mPaaS 提供的 SDK 能愈来愈符合全部开发者的胃口,mPaaS 提供的能力能更好的服务到全部的移动开发者。
------END------