介绍一位不太熟的老友: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的技术干货内容

相关文章
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
288 1
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
283 2
|
3月前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
68 5
|
4月前
|
Dart Android开发
Android Studio New里面没有New Flutter Project
Android Studio New里面没有New Flutter Project
152 1
Android Studio New里面没有New Flutter Project
|
4月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
59 1
|
4月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
1469 0
Android Studio: 解决Gradle sync failed 错误
|
4月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
147 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
4月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
276 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
4月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
336 4
|
4月前
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置