介绍一位不太熟的老友: Android Studio Assistant | 开发者说·DTalk

本文原作者:   Gemini, 原文发布于微信公众号: mPaaS 

https://mp.weixin.qq.com/s/DKJgwAqM-H1mWMoyajJAWw

Android Studio 3.6 发布了,又有新的特性可以让人感觉热血沸腾了,小 M 开开心心地点完「 Check for Updates 」按钮,把 Android Studio 安装完,开启了新一轮探索之旅。

多次 "邂逅"

"咦,Google 到底更新了什么呢?听说优化了很多内容,可是一下子也想不起来啊,要是错过了某些特性会让人很遗憾。" 心里这样想着,便打开了刚更新完的 Android Studio:

What's New in 3.6 哇,这不是就是我要的东西吗?赶紧浏览下。这里面提到了 Design tools/Android Gradle plugin 3.6.0 updates/Emulators/... 等等内容。这个 Assistant 有点好玩呀,嵌入式的类 WebView 的信息展示体验给我留下了非常好的印象。

攀谈甚欢

今天,我接到一个任务,公司要为海外用户开发的 App 接入 Google Firebase 组件。印象里 Firebase 依靠 Google Play Services 提供了许多能力,这么多内容,接入会不会很复杂呢?国内的一些公司提供的单业务 SDK 全部是靠分发 gradle 坐标依赖的方式提供给用户接入,Firebase 不会也这样吧?

我打开了 Android Developer 官网,想查询下如何接入 Firebase SDK,找到了如下内容:

哈!又是 Assistant,和刚刚的东西是一样的吗?于是根据以上指南,我打开了 Firebase 提供的 Assistant:

哇,这次的内容比刚刚的 What's New 丰富多了,还有链接可以点击。每一节都是不同的组件,点开一个组件后,我们可以看到如下的教程:

这里的交互就丰富多了,不仅有按钮,还有代码片段,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

今天接到了一个任务,公司有一个 SDK 需要输出到外网,我再次想起了 Assistant 工具,要是我们也能提供一个 Assistant 界面,那该多好呀,和 PD 讨论了下,PD 非常赞成,于是就开始调研如何利用 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 这个类,等我们把文案填充好之后,就出现了一个完整的可以包含步骤的界面了。

我们利用了 Android Studio 提供的 Assistant 快速开发完了 mPaaS Android 的接入方案,目前已经对外发布啦,这是我们面向公有云 快速接入 的最新尝试,希望 mPaaS 提供的 SDK 能越来越符合所有开发者的胃口,mPaaS 提供的能力能更好的服务到所有的移动开发者。

长按右侧二维码

查看更多开发者精彩分享

"开发者说·DTalk" 面向中国开发者们征集 Google  移动应用 (apps & games) 相关的产品/技术内容。欢迎大家前来分享您对移动应用的行业洞察或见解、移动开发过程中的心得或新发现、以及应用出海的实战经验总结和相关产品的使用反馈等。我们由衷地希望可以给这些出众的中国开发者们提供更好展现自己、充分发挥自己特长的平台。我们将通过大家的技术内容着重选出优秀案例进行谷歌开发技术专家 (GDE) 的推荐。

  点击屏末  |   | 即刻报名参与  " 开发者说 · DTalk" 

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章