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

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------

相關文章
相關標籤/搜索