MF99 coding 💻

keep learning; keep coding;

android

智慧音箱 OS 設計

2015 年,Amazon Echo 讓世人展現了 Smart Speaker 的威力, 2016 年 Google 也推出了自己的 Google Home 系列,頂著 IoT Smart Hub 的光環以及利用藍牙音箱這個已知需求為載體,智慧音箱一躍成為當紅炸子雞。 在這個背景下,當時作為專注於提供兒童/父母數…

ME-App:我的履歷 App

終於能來寫這篇了~ 最近在工作轉換期的空擋。之前自己一直很想寫一些東西,一來當作個人作品,二來也可以練習一些之前一直想玩,但是工作上沒用到的一些東西。 所以最近剛好有時間了,就來安排一下~ Play Store 已上架完成 play.google.com 要做一個 App,…

MVVM 經驗分享

關於 MVVM 的基本概念,可以回顧一下上一篇 這篇直接就我之前工作上的一個實際案例,分享一下我們當初使用 MVVM 建構這個產品的一些經驗

MVVM 概念篇

當一個應用開發的越來越大,越來越複雜的時候 除了開發團隊人員會越來越多之外,開發新功能,修正 Bug 的複雜度通常也是呈現指數成長 如何在產品持續營運/擴張的情況下,讓產品本身的代碼有著高度的可讀性,可維護性。 這時候第一步,通常就會搬出祖傳的 MVC…

App 內建 VPN/DNS service

Android 其實提供了 VPN 服務,讓 App 可以在需要時在用戶同意的情況下開啟 VPN 服務

SMS 簡訊自動攔截/解析

OTP 驗證越來越常見後,與其讓用戶收到訊息後還要去查看簡訊,然後把簡訊中的驗證碼記住或是複製,再回到你的 App 做輸入。 不如自動擷取簡訊,然後把驗證碼自動幫用戶帶入對應的欄位。

使用 Android Studio 中的 Build variants (productFlavors)

Android Studio 真的是越玩越好玩~ 之前開始研究了一些 build.gradle 裡面的基本功能,像是設定、修改 default config 等。 但是有時候常常在實務開發上,同時可能會需要 build 好幾個不同版本,最簡單的就是 debug / release 版本,或是有連接 Server 的應…

使用 Widevine DRM

隨著 Android 越來越普及, DRM 的需求也越來越大。 所以 Google 原生支援的 Widevine DRM 的使用率也越來越高。 這邊就稍微記錄一下如果要播放 Widevine 影片的話,要怎麼取得 Widevine DRM 的 access right 以及如何播放。

Android 鍵盤中 CTRL/SHIFT/Caps Lock 按鍵狀態

這次經手的案子,其中有處理到外接(實體)鍵盤的部份,所以難免的就會出現一些相關的問題。 這次是鍵盤中的一些特殊按鍵,也就是 CTRL / SHIFT / Caps Lock / Number Lock 的問題,所以就 Trace 了這邊的 code,也記錄一下這幾個特殊組合按鍵在 Android 中是…

如何在 Log 中印出 Call stack

這邊提供一個最近學到的小技巧,有時候常常需要在 Trace code 的時候打印 Log 來追蹤變數的變化、或是 function 的 call flow。 但是有時候常常除了知道某個 function 被 call 的時候送進來的參數以外,還想要知道到底是 「誰」 Call 的。 像是這樣: D/Debu…

製作 fastboot 的 Boot logo

由於 Linux 在啟動的時候,無法處理 File IO 以及 image decode 這種複雜動作,所以其實開機圖示其實並不是一張 PNG 圖放進去叫他秀在螢幕上這麼單純,所以這邊就記錄一下如何從一張圖製作開機的 Logo。

Android 的開機動畫

基本上開機的靜態畫面是存在於 bootloader 中,所以這部份一般的使用者,甚至是開發者都不太能去動。 但是在開機動畫的部份倒是保留了讓系統商甚至使用者客製化的部份。

Android ANR 的 debug 方法

在做 Android Application 或是整合 system 的時候,常常會遇到的兩種問題就是 Crash 跟 ANR (Application-No-Response) Crash 通常很好解,只要透過 logcat 並尋找 AndroidRuntime 這個tag 就可以看到明確 crash 的 call stack,並找出發生 Exception 的…

Android 的 KeyCode : 從 RawEvent 到 KeyEvent

KeyCode 這東西其實在底層跟在 Android上層是不一樣的值,是透過一個 Mapping 的機制去轉換,才會得到 Android Developer 上 KeyEvent.java 中定義的 KeyCode 值。 這邊也藉機追了一下 KeyCode 的轉換過程。

Android 的 KeyEvent : 從 EventHub 到 PhoneWindowManager

最近追蹤了一下 Android 4.3 的 source,並且追蹤了 KeyEvent 一路從 EventHub.cpp 到 PhoneWondowManager.java 的流程 這邊順便記錄一下。