介绍一位不太熟的老友:Android Studio Assistant

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: 最熟悉的陌生人:Android Studio Assistant

0.jpg

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


① 多次「邂逅」

“咦, Google 到底更新了什么呢?听说优化了很多内容,可是一下子也想不起来啊,要是错过了某些特性会让人很遗憾。”小M心里这样想着,他打开了他刚更新完的 Android Studio:
640.png
What's New in 3.6 哇,这不是就是小M要的东西吗?赶紧浏览下。这里面提到了 Design tools/Android Gradle plugin 3.6.0 updates/Emulators/... 等等内容。这个 Assistant 有点好玩呀,嵌入式的类 WebView 的信息展示体验给小M留下了非常好的印象。


② 攀谈甚欢

今天,小M接到一个任务,公司要为海外用户开发的 App 接入 Google Firebase 组件。印象里 Firebase 依靠 Google Play Services 提供了许多能力,这么多内容,接入会不会很复杂呢?国内的一些公司提供的单业务 SDK 全部是靠分发 gradle 坐标依赖的方式提供给用户接入,Firebase 不会也这样吧?
小M打开了 Android Developer 官网,想查询下如何接入 Firebase SDK,找到了如下内容:
640 (1).png
哈!又是 Assistant,和刚刚的东西是一样的吗?于是根据以上指南,小 M 打开了 Firebase 提供的 Assistant:
640 (2).png
哇,这次的内容比刚刚的 What's New 丰富多了,还有链接可以点击。每一节都是不同的组件,点开一个组件后,我们可以看到如下的教程:
640 (3).png
这里的交互就丰富多了,不仅有按钮,还有代码片段,Step 1/2/3/4 的结构很清晰,简直像 Google 在手把手教你接入 Firebase,这种体验比我们看只有干货的文档要舒服多了。首先要在 Android Studio 中登录好 Google 账户,然后点击「Connect to Firebase」,选择好项目之后,我们发现我们的 App 工程下面就多了本来需要手动接入的 google-services.json
640 (4).png
回来看下 Assistant 中,第一步显示完成了:
640 (5).png
哇,这样我都不用自己去检查了,那么继续点击第二步,出现了一个对话框:
640 (6).png
这个是告诉了我们,如果我们应用变更后,我们的项目会发生哪些变化,点完「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”
640 (7).png
一下子就明白了,我们的 Assistant 界面事实上是 Android Studio 分析这个 xml 生成相关的 UI 组件产生的 —— 因为 IDEA 是由 Swing 构建的, Swing UI 并未提供 WebView,我们无法得到原生 WebView 的能力。
我们可以再搜索 firebase_tutorial_bundle.xml 查看哪里使用了这个 xml
640 (8).png
再往上查,发现这个类就在 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」 就完成了。
640 (9).png


④ 部署「教程」

我们再回头看 firebase_tutorial_bundle.xml 里面有 feature/description/tutorial/step 等节点,不同的节点有不同的展现形式,等我们把文案填充好之后,就出现了一个完整的可以包含步骤的界面了。如果你想看看还有什么结点可以用的话,可以看下 com.android.tools.idea.assistant.DefaultTutorialBundle 这个类,等我们把文案填充好之后,就出现了一个完整的可以包含步骤的界面了。
640 (10).png
小M利用了 Android Studio 提供的 Assistant 快速开发完了 mPaaS Android 的接入方案,目前已经对外发布啦,这是我们面向公有云快速接入的最新尝试,希望 mPaaS 提供的 SDK 能越来越符合所有开发者的胃口,mPaaS 提供的能力能更好的服务到所有的移动开发者。


作者名片.jpg
动态-logo.gif
公众号媒体导流矩阵.jpg

访问2020阿里巴巴双11技术全观专题页
了解更多关于2020双11的技术干货内容

相关文章
|
11月前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
641 1
|
11月前
|
Ubuntu Linux Android开发
Android Studio支持多种操作系统
Android Studio支持多种操作系统
514 1
|
6月前
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
1483 61
|
5月前
|
Android开发 Windows
Android studio 报错Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused: connect(已解决)
这是一篇关于解决Android Studio报错“Connect to 127.0.0.1:8888 failed: Connection refused”的文章。问题通常因系统代理设置被Android Studio自动保存导致。解决方法是找到系统中Android Studio使用的gradle.properties文件(位于Windows的C:\Users\你的电脑用户名\.gradle或Mac的/Users/.{你的用户目录}/.gradle),删除或注释掉多余的代理配置后保存并重新Sync项目。希望此经验能帮助快速解决同类问题!
777 36
|
5月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
498 19
|
8月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
223 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
941 1
|
8月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
218 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
318 8
|
11月前
|
数据可视化 开发工具 Android开发
Android Studio
Android Studio
698 1

热门文章

最新文章