Tuesday, January 19, 2016

Migrate FindLocation (WhereAreYou) project to Android Studio 1.5.1

做完 "Migrate MyLocation (IAmHere) project to Android Studio 1.5.1", 有左經驗, 諗住 FindLocation (WhereAreYou) 都係照做就攪掂....但係, 現實永遠無咁順利既.

唔想花太多時間, 如果同 MyLocation 一樣既就唔再詳細講點做了.
由於 FindLocation 後期改過 D 野, 有 D 地方版本比 MyLocation 新, 不過都無分別, 已經係舊版, 都係要再上最新版.

(1) SDK Path changed.
 - 同 MyLocation 一樣.


(2) Failed to find Build Tools revision 21.0.2
- 同 MyLocation 一樣, 只不過之前 FindLocation 用左 21.0.2, 都係改番 23 同 23.0.2.


(3) The project is using an unsupported version of the Android Grade plug-in (0.13.2).  The recommended version is 1.5.0
- 同 MyLocation 一樣, 只不過之前 FindLocation 用左 0.13.2, 都係自動 fix.


(4) Gradle DSL method not found: 'runProguard()'
 - 同 MyLocation 一樣, 改成 minifyEnabled 就解決了.


(5) Oh.....無野睇既?
- 初時諗住, build 到就掂喇.  點知.....


呢度其實有兩個問題:
(1)  Google Maps 既 API Key 未加入呢部電腦既資料
(2)  我係用 AVD 行既, 而個 network 係有 proxy, AVD 出 proxy 既 setting 未攪掂.



Migrate MyLocation (IAmHere) project to Android Studio 1.5.1

MyLocation (IAmHere)

最初個 project 叫左 MyLocation, 後尾同佢改左個人性化D既名 IAmHere, 不過個 project 無變, 仲係 MyLocation.

呢部份算係簡單少少, 因為只係接收 SMS, 讀取 GPS 再回傳, 唔需要開地圖, 唔駛攪 Google Maps API d 野.


(1) SDK Path changed.  
呢個小事, 佢會自動修正.  我準備以後都係裝落 C:\Android\SDK , 希望下次唔駛再 prompt.

(之後可能會問 proxy setting, 自動執正佢就算了)


(2) Failed to find Build Tools revision 20.0.0


由於之前係 20.0.0, 家陣係 23.0.2, build tools 既 version 唔會有大影響, 安全起建, 有新用新都得.
除非你轉用新 version 有問題, 否則, 無謂叫佢裝番個舊版了.

開番 app\build.gradle 改左佢就得了:


如果唔係用 project view, 用 Android view 既話, 開 Gradle Scripts 下面既 build.gradle (Module: app) 都係一樣既:



將佢改成 compileSdkVersion 23 同埋 buildToolsVersion "23.0.2", 之後 Click 右上既 "Try Again" 再試.



(3) The project is using an unsupported version of the Android Grade plug-in (0.13.0).  The recommended version is 1.5.0


呢度叫佢自己改番正就得了, 直接 click "Fix plugin version and sync project".
佢就會自動 fix 然後再 build 個 project....

當然, 又會再碰到到另一個問題:

(4) Gradle DSL method not found: 'runProguard()'

呢個問題, 在 Stackoverflow 有講 ( Stackoverflow 有關既帖  相關改動既資料 )
好簡單, 開番 app\build.gradle, 將 runProguard 改成 minifyEnabled 再 "Try Again" 就得了.


之後 MyLocation 應該可以用得了.

Android 搵人程式 (一) 序

本身唔係寫開 Android apps, 但係每隔幾年都會寫下野.
Google 就年年變更, 每次再寫都要重頭黎過.

搵人程式的由來

n 年前 Google 既地圖中, 提供左搵人既功能.
只要你批准左, 對方就可以隨時搵到你既位置.
後尾呢個功能取消左, 只好自己寫番個搵人程式個出黎.

當時個程式, 為左唔想長期上網, 將網路通訊改為 SMS.
因為通常電話 Plan 都會有 SMS 送, 基本上都用唔哂.
而且, SMS 可以收發既範圍, 肯定比 data network 大好多.
甚至出左國都可以免費接收.
不過, 海外既 SMS 要比錢發送, 用唔到街上或者酒店既免費 WiFi.  有利又有弊.


基本流程

整個流程好簡單, 主要分開左兩個程式:  WhereAreYou 同埋 IAmHere
睇個名都應該估到, WhereAreYou 就係去搵人既程式, 而 IAmHere 就係回報地點既程式.
首先 WhereAreYou 會將一個 keyword 經 SMS 發送比一個電話, 然後等待回應.
如果呢個電話本身裝左 IAmHere 行緊既, 就會自動檢查 SMS,
如果發現 SMS 內容係自身設定既 keyword, 就會作出回應.
IAmHere 會先讀取當時既 GPS 位置, 再經 SMS 回傳番去比發出 keyword 既電話.
而 WhereAreYou 收到呢個回傅既訊息, 就會將位置在 Google Map 上顯示出黎.


再次修改的原因

自從有左個程式之後, 老虎好放心比阿仔自己番放學.
但係, 由於 GPS 接收, 受到好多因素影響, 特別係香港多高樓大廈, 有時會出現好大既誤差.
之前就試過無端端回報左好遠既地點, 嚇親隻老虎, 好在後尾自己修正番.

其實幾年前, Android 機除左可以有 GPS 位置 (provider 分左 gps 同 network 既) 外, 仲有個 fused location.
Fused location 如果無理解錯, 應該係根據附近既網絡裝置, 對比 Google 既資料庫, 推算出你當前既位置.
準確度未必差過 gps, 而且唔會太受高樓大廈影響, 出現超大誤差既機會比較細.
之前有玩過 GPS 定位既朋友應該知道, 以往等 GPS 定位都要時間, 仲要睇下接收到幾多個人造衛星既訊號, 同埋訊號既強度是否足夠, 先至可以定到位, 穿插高樓大廈就肯定好差.
家陣一開 Google maps, 幾乎即時定到位, 就算鬧市中的可以幾準下.  分別真係好大.

所以, 準備研究下, 點樣可以同時接收埋 fused location 回傳番去.
而 WhereAreYou 就同時顯示 gps 同 fused locattion 既位置作參考.
由於位國來源不出, 如果相距不遠, 就證明應該都幾可信.
否則, 如果一個東一個西, 就可以自行判斷.
至於點解唔直用 Fused location, 因為.....都唔知點講, 感覺上 GPS 可以去到比較精確既位置, 而且比多個參考都無壞....


修改歷程

由於每次再改都會隔幾年, 期間 Google 又改左唔少野.
加上自己無攪幾年, 幾乎連一D android apps 既基本概念都唔記得哂.
今次嘗試重頭黎過, 希望可以記低 D 重點.
呢度會用黎將有關既既連結放埋一齊, 下次再改時, 就唔駛四維搵料.



Android Studio 1.5.0 把Q火筆記 - Google Maps API Demo

有時真係好佩服 Android Developers, 每次 google 改下野, 我都總係會有問題既.
不過, 可能因為我係無聊至寫下 Android program, 所以好多野唔同一排又唔記我左.

趁住今次裝完機, 重裝 Android Studio, 就將 D 用到把 Q 火既瘀野記低佢, 希望下次再玩果陣可以參考番.

由於我要用 Google Map, 所以用左 Google Maps 既 API Demo, 諗住用 Google 自己既 sample, 應該順利 D 掛, 點知.....

(一) Gradle: Resolve dependencies .......stuck   (Stackoverflow 既參考資料)
唉....唔知點解, 由公司開 Android Studio, 永遠一開始, 下面就停o係 "Gradle: Resolve dependencies .....".  呢個 Gradle 真係玩到我死, 次次升級都總係有 D 野改下.
由於新裝完機, D dependencies 要自動扯落黎, 唔可以一開始就 off-line 左佢...只好 等, 等, 等.....
屋企開會快好多好多, 唔知關唔關公司個 proxy 既事, 公司係慢到想死 (扯左兩粒幾鐘至完).  扯完 d dependencies 真係一定要 offline 左佢.

(二)  Failed to resolve: junit:junit:4.12   (Stackoverflow 既參考資料)
扯完 D dependencies, 第一眼就見 Error


最簡單既方法, Delete 左 testCompile 'junit:junit:4.12'  果行


Clean 左個 Project 再 Rebuild 一次, 見到個 Gradle Build Running  又係 等等等......
今次行左成粒鐘都仲係 Gradle Build Running, 條 bar 未行過....決定停左佢再黎.  Kill Task!

Kill Task 再開, 好似順少少, 不過.....由於仲未 offline 個 Gradle, 當然又係慢慢 resolve dependencies.

唔想再等 2 粒鐘, 既然之前都扯左落黎, 即是走去 offline 左佢, 然後又 Kill Task 再黎.
Offline 既方法 (Android Studio 既 Menu 可能會變, 以下可能只適用於 1.5.0, 自己執生)

File->Setting 會開左個  Settings 既 Windows
左邊選 "Build, Execution, Deployment" -> "Build Tools" -> "Gradle"
再 check 左右邊既 "Offline work", [OK] 完事.



唔鬼等佢了, 再 Kill Task.

可能你會話....識唔識用電腦架, 成日 Kill Task 再開, D file 會花架...
如果你怕既話, 有時間每次等 2 粒鐘, 我都建議你唔好 Kill Task.
當然, 如果你個 network 夠快, 就唔駛咁 kill 法喇.  有時 D 野, 唔係想像中咁美好既.

如事者, Kill 完又再開番, 唔駛兩分鐘就 "Gradle build finished", 開心嗎?
經驗話比我聽, 世事唔會咁"順利"既......

當你開左個 AVD, 再行個 ApiDemo...嘩, 真係出現左喇.


但係當你 click 去 Basic Map...


左下出左 Google 既 logo, 但又無野睇, 即係點呀?
唔駛驚, 只係太耐無玩, 唔記得左用 Google Maps 之前, 要攪掂條 key.

(三) Google API Key
呢樣野, 真係完全唔記得左之前點整既.  首先上網搵番 D 料:

有時真係唔明, 本來可以只係幾個 step 做完, 次次都要睇長篇大論, 當中去搵 D 重點出黎.
點解 Google 唔可以開一版只係講點做點做, 簡簡單單開到三既, 唔駛解釋咁多 background 既野.

肺話唔講了, 簡單步驟:
1) 首先你要 build 一次, 佢會 generate 一個 debug.keystore 去你既 user folder
2) 去 jre folder 既 bin 入面, 行呢句野:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
咁你會見到一堆字, 重點只需要搵 SHA-1 果行...

3) 用 browser 去 Google Developer ConsoleAPI Manager, 左邊選 Credentials.

4) 如果你本身無 gen 過 key, 就真接 click 右邊個 [New credentials], 選 API key, 之後再選 [Android key]



5) 之後比個名佢, 再加 package name and fingerpint.
    如果你之前已經有 key, 在上面 click 番條 API Key, 都係入呢個畫面, 同樣係加 package name and fingerpint.

6) 填番你個 app 既 package name 同埋 之前 2) 見到果串 SHA-1 key, 再 click [Create] 就 會 gen 條 key 了.   如果本身有 key 既, 就會幫你加左個 project under 呢條 key 了.

7) 條 key 直接見到, 已經可以用了.

(四) Copy 條 Key 抄入去  app\res\values\google_maps_api.xml 入面.

(五) 再 Builder 一次, 今次應該無問題了.


Monday, January 18, 2016

安裝 Android Studio 1.5.1 並 upgrade 舊 project

每次升級 Android Studio, 都唔會有好結果.
自己平時都唔係成日寫 Android Apps, 好日都唔攪一次.
不過, 見個 Windows 又重裝左, Android Studio 又升左咁多次, 咪跟手升埋上去, 無理由仲裝番 0.8.6.

裝 Android Studio 唔係問題, 都係去呢度下載安裝.

Java SE (download JDK): http://www.oracle.com/technetwork/java/javase/downloads/index.html

家陣係 2016年 1月, 現時既版本係 1.5.1, 而 JDK 係 jdk-8u66, 下次再玩, 應該又唔同哂了.

次次升級完, 開番 D 舊版本既 project, 總係唔可以自動過渡, 實要出下 error 至安樂.
今次由 0.8.6 直上 1.5.0 亦都唔例外, 不過唔算多問題, 記低佢下再開舊 project 果陣識得轉番.

Gradle D 麻煩野唔駛講喇, 每次都等到天光至 Sync 得完, 之前已經用到媽媽聲, 今次可以更厲害, 試過等左兩粒鐘有多至 sync 完, 真係等到把 Q 火.  網上多數教你 sync 完一次, 記得 offline 左佢.  如果大家都 offline 既, Gradle 自動更新 library 既功能, 咪等同廢左囉.

呢度主要講下有程式乜野地方要改算了, 每次 rebuild 等左幾耐去 Sync 唔係問題, Google 的把火野去第度嘈.