什麼是Google Certified Associate Android Developer認證?
2016年5月Google I/O大會上,首次發表Google Certified Associate Android Developer官方認證(或簡稱AAD),會場引起非常多Android開發人的關注,這第一個Google開發認證的目的,設定一個能讓目前的Android開發人員能爭取的目標,一個能代表開發能力的標準。Google想要的不是背誦、選擇題之類的能力,它希望能幫助這些通過認證的人能在事業、工作面都能代表他能夠全面性的完成開發工作。
2016年開始,Google開始思考如何補足或為這個鴻溝架起橋樑
以效能導向方式設計Google認證,你只需要依照規定寫APP,通過認證
AAD不只是驗證知識,而是測驗你是否能真正的開發APP。
詳細介紹請參考: Google I/O大會發表Android認證(Associate Android Developer)介紹
認證考試內容
以線上考試的方式,在4824小時之內提送完成它所設定需求的Android APP專案,在幾天內確認你的Android開發能力的一個新型認證項目。是的,沒有選擇題這種東西,就是下載一個未完成的專案,就開始改它、寫功能、調整與新增功能,最後將完成的專案上傳。
一開始題目會告訴我們,這個APP的用途與目的,請你完成這個仍在開發中的專案,有連結可下載專案壓縮檔,解開後在最近版的Android Studio中New/Import Project即可。在4824小時內,完成所有的需求(Features與Requirements)與問題(bugs),並建立一個UI Test,最後再將完成的專案壓縮成zip檔,上傳提交即可。
註: 2017年8月開始,考試時間縮減為24小時
每個人考的題目都不大相同,大致上分為幾個要項:
Project Requirements(專案規範)
這是我認為很重要的一點,在考試之前就可以事先準備的,會列出明確的環境與SDK工具等版本要求,一定要符合哦,否則專案一import進去還要下載、安裝,很煩人的。項目如Android Studio的版本、Android SDK Platform-tools、SDK Tools、SDK Build Tools、Android Support Repository、Platform的版本等,請一定要熟悉這些工具的更新方法,因為環境的準備是開發人員最重要的能力之一。
APP Design Requirements(應用程式設計需求)
這裡面會有幾個子項目,如功能、主畫面、子畫面、設定畫面、通知等需求,通常會有截圖幫助你瞭解它要的是什麼,使用什麼資源(Resource)、要定什麼字串,都很詳細,照著需求一一實作完成。
Feature Tasks(功能開發)
這項目會以英文描述它想要你實作什麼樣的功能,例如請你實作某個類別中還沒寫好的方法,有時二個或三個方法,會明確告訴你它想要這些方法能夠處理什麼格式的資料,例如實作一個Content Provider類別(繼承ContentProvider)並實作query、insert、delete、update等方法,而query要能處理多筆查詢,也要能單筆資料查詢這類的描述。
也會請你建立一個Activity並設計它所想要的版面配置,如幾個TextView、字的大小、對齊等。除這些外,有時會請你加入ActionBar、實作通知、實作一個RecyclerView與事件這類常見的開發工作。
Testing Tasks(測試工作)
通常會請你設計一個UI Test以驗證APP的畫面元件點擊後應該有的動作,比如說點擊按鈕後變更某個元件的內容,或是按下浮動按鈕(FloatingActionButton)後,是否正確的開啟另一個Activity。這些都能由Android instrumented Unit Test完成。它並未指定使用那一個類別庫完成,我是選擇使用Espresso,只要build.gradle內的設定正確,在androidTest中建立一個測試類別後,再寫個兩三行的測試程式大概就能夠完成(使用onView、withId、match等方法)。
Debugging Tasks(除錯工作)
QA人員回報一些bug的描述,由這些描述中找到原專案中的問題,有可能是兩個資料欄儲存後相反了,也可能是設定了定時工作(去改一個android.app.job.JobService的子類別)後沒反應,或者是資料庫一開始就沒建立,也沒初始資料記錄等問題。
如何準備認證?
Associate Android Developer(AAD)認證如何準備呢? 應該換個說法與做法,它不適合一般所認識的認證考試的「準備」,實務能力不是準備來的,而是「磨」出來的。應該說,「具備什麼程度的能力,再去考」才是重點。
Testing and Debugging(測試與除錯能力)
設計某個特定需求的JUnit Test(Local JVM Test)或Android Instrumented Test,通常會與畫面轉換或元件的內容相關,所以一定要熟悉數種類別庫中的其中一項,我的建議是Espresso,雖然使用它時得要正確的import(static)方法與類別,但熟悉後,幾乎能處理大部份的情境與需求。
它要求受試者要擁有找到程式失敗的原因,並改正它的bug或解決造成記憶體漏洞的問題。在找問題的時候可使用Log來檢視過程,但如果我們會使用Debugger除錯器,那當然會加快找到出錯的原因。
Application User Interface(UI) and User Experience(UX)
使用者介面與使用者經驗相關的實作能力,如建立一個版面配置(layout)並使用一些基礎元件,如TextView、EditText等,也包含設計一個客製作的元件layout,用於RecyclerView中的項目列。使用者經驗則包括定義樣式(style)與各類的Theme屬性,並將這些屬性套用在APP中的畫面中。
有些時候APP也需要語系的設定,在不同語系中顯示不同的文字,這都需要能將字串、大小、顏色等屬性以資源方式儲存。除此之外,也會要求能夠實作Menu(ActionBar)或者抽屜式展開的瀏覽介面。
這個項目也要求受試者要有能力將本地資料庫的資料筆數以RecyclerView呈現,所以在養成這些能力並不像字面上(UI & UX)如此容易,要對Java語言的活用有概念,才會容易上手。
Fundamental Application Components (基礎元件)
基礎元件指的是Activity、Service、Broadcast Receiver與Content Provider這四大類型元件,懂得這四大元件個別的生命週期(方法的執行時機)是很重要的,重點是,一個APP中可能使用了這四種元件中的三種,如何能看懂APP的全面架構,那個功能使用了一個Service,目的是什麼? 那裏產生了Broadcast Receiver,用途是什麼? 出了什麼問題,能用那一個元件解決這個問題。並不像一般市面教科書所教的,按照步驟產生這些元件,而是元件早就在這個APP中的好多地方使用了,要如何找到問題並調適它們。
這個項目需要受試者能夠產生Activity並設計layout、使用Loader在背景執行緒取得資料,並從Loader中將資料送到畫面中的元件上、使用鬧鐘(alarms)或JobScheduler類別產生排程工作,還能夠在Service中執行背景工作等。
Persistent Data Storage (資料儲存)
針對每個考題所訂定出的案例實作合適的儲存方案,例如假設要儲存的是使用者輸入的值或設定,可使用SharedPreferences,若是有結構性的資料,則應選擇SQLite資料庫。當然,在何時儲存、何地儲存就要靠程式設計能力去判斷現有的程式碼的問題,一一解決這些問題。
SQLiteOpenHelper是一定要熟悉的基本知識,尤其是onCreate的執行時機,如何insert初始資料,包括建立表格、欄位還有索引。APP中通常已經定義了表格的規格,所以需要從資源的文字檔中讀取初始資料(大都是JSON格式),使用迴圈將一個個解析完成的JSON物件新增到表格中。
另一個較進階的能力是設計APP的Content Provider機制,能夠提供自身APP中查詢、新增、更新與刪除。另外,有時會要求受試者將這個Content Provider提供給外部使用,也要稍微熟悉一下作法。
設定畫面也是每個考題都會有的項目,會有一個APP的設定Activity,項目不會很多個,大概一兩個,有時會是由使用者輸入資料,有時是開關式的設定,但一定要在設定值改變時設計出相對應的程式邏輯,例如Switch開啟時,要自動在一段時間後發出通知。
Enhanced System Integration(加強與系統的整合度)
APP與手機系統介面的整合,也就是Android待機主畫面中的「小工具」Widget,以及Android上方的通知列,利用NotificationManager與Notification.Builder產生通知物件,並在裏面放置PendingIntent等工作是必要的能力。通常Widget會先設計好,只是內容與行為並不正確,受試者需要修改或加入程式碼,好讓它能符合規定的需求,如一段時間後要自動更新Widget中的內容,或是一段固定時間後要出現通知。
不論是Notification或Widget,點擊後都要能夠加入符合規定的動作,如開啟特定的Activity等需求。
如何準備?
AAD的考題中所給的問題,通常是有連貫性、相關性的,如果只會處理一個或兩個項目是不夠的,會在遇到下一個解不出來的問題所拖累,而造成功能不完整。在過程中,當然可以查書、查網路的資料來試著解決問題,但還是需要足夠的實務經驗,否則,很容易窮忙一場而毫無建樹。
不斷的實例練習,是最好提昇能力的方法,如果你是個身經百戰的開發人員,當然早就擁有這些能力,但如果練習不足,或是之前的基礎並不穩固,那就先加強基礎能力後,再加強專業能力,也就是練習不同需求的解決方法,也成為身經百戰的人,相信不會有問題的。
有人會想說,那找人代考呢? 這問題在國外不常見,通過一個認證取得證照是一種證明自己的途徑,也不會因為這樣就能進入某公司,因為一進去大概1個小時就掛了,開發能力是假不來的。若是被發現是假的,一輩子大概就得背著這個作假的包袱,划不來的,假的~
Exit Interview(通關面談)
通過專案審核後,考試最後一關叫做exit interview,當你的成績通過標準後,會安排線上面談確認作答者與提供的身份證明是同一人,也會在過程中提問確認有關專案的實作的方法與問題。
很多人會擔心線上面談(Exit interview),其實只要專案是你自己完成的,是不用擔心面談的,都是由Google內的開發人員進行面談擔任面試官。面試官想知道的不只是你怎麼完成考題專案,他也想瞭解你在一般處理Android APP開發時的問題的方法,可依你之前的開發經驗回答即可。至於,英文溝通問題,只要能抓到幾個重要關鍵字,溝通並不是那麼大的難題。
想挑戰自己的Android開發能力嗎? 一起與有志同好努力達成開發人的重要里程埤吧! 由第一時間即取得Google Certified Associate Android Developer認證標章的Hank老師精心設計的強化能力課程,帶你進入進階的Android開發世界,磨練、取得業界所需要的開發能力。