Posts Tagged ‘android root’

Google Android 3.0 的 Market 對 Google Analytics 丟資料

Thursday, April 28th, 2011

又一個 Root 手機的好理由.

最近在看 logcat 時, 常常會瞄到這些訊息:

04-28 12:30:43.770: DEBUG/NetworkRequestUtil/ConstructEventRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=1845718205&utmt=event&utme=5(details%3Fdoc%3Dcom.amazon.kindle*VIEW_ITEM*1743839399)&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

04-28 12:30:43.800: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=1672526910&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DRELATED%26c%3D&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

04-28 12:30:43.800: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=488885935&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DRELATED%26c%3D-1827484239&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

04-28 12:30:43.800: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=1226858699&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DDETAILS%26c%3D1743839399&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

04-28 12:30:43.800: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=564046613&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DRELATED%26c%3D&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

04-28 12:30:43.800: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(2275): /__utm.gif?utmwv=4.5ma&utmn=951601809&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DRELATED%26c%3D-1827484239&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963419.1303963501.42

起初不以為意, 但經過一而再再而三 log 的 “洗腦”, 越看越發覺得有些 keyword 很眼熟, 而在安裝 AdFree 之後才恍然大悟:

04-28 12:35:43.090: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(3253): /__utm.gif?utmwv=4.5ma&utmn=1709128022&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DBROWSE%26c%3D1743839399&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963501.1303965303.43

04-28 12:35:43.150: WARN/googleanalytics(3253): Problem with socket or streams.

04-28 12:35:43.150: WARN/googleanalytics(3253): java.net.ConnectException: www.google-analytics.com/127.0.0.1:80 - Connection refused

04-28 12:35:43.150: WARN/googleanalytics(3253):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:211)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at java.net.Socket.connect(Socket.java:901)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.PipelinedRequester.maybeOpenConnection(Unknown Source)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.PipelinedRequester.addRequest(Unknown Source)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.dispatchSomePendingEvents(Unknown Source)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.run(Unknown Source)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at android.os.Handler.handleCallback(Handler.java:587)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at android.os.Handler.dispatchMessage(Handler.java:92)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at android.os.Looper.loop(Looper.java:126)

04-28 12:35:43.150: WARN/googleanalytics(3253):     at android.os.HandlerThread.run(HandlerThread.java:60)

04-28 12:35:53.110: DEBUG/NetworkRequestUtil/ConstructPageviewRequestPath(3253): /__utm.gif?utmwv=4.5ma&utmn=1709128022&utmcs=UTF-8&utmsr=1280x800&utmul=en-US&utmp=%2Fhttp%3A%2F%2Fandroid.clients.google.com%2Ffdfe%3Fe%3DBROWSE%26c%3D1743839399&utmac=UA-19761900-1&utmcc=__utma%3D999.1840870358.1303223573.1303963501.1303965303.43

04-28 12:35:53.110: WARN/googleanalytics(3253): Problem with socket or streams.

04-28 12:35:53.110: WARN/googleanalytics(3253): java.net.ConnectException: www.google-analytics.com/127.0.0.1:80 - Connection refused

04-28 12:35:53.110: WARN/googleanalytics(3253):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:211)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at java.net.Socket.connect(Socket.java:901)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.PipelinedRequester.maybeOpenConnection(Unknown Source)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.PipelinedRequester.addRequest(Unknown Source)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.dispatchSomePendingEvents(Unknown Source)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.run(Unknown Source)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at android.os.Handler.handleCallback(Handler.java:587)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at android.os.Handler.dispatchMessage(Handler.java:92)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at android.os.Looper.loop(Looper.java:126)

04-28 12:35:53.110: WARN/googleanalytics(3253):     at android.os.HandlerThread.run(HandlerThread.java:60)

原來當你在使用 Android Market, 不管看過哪些程式, 安裝哪些軟體, 搜尋哪些遊戲, 這些動作通通都會回報給 Google .. 分析 (?), 也許拿來改善 Market 的設計, 又或者計算程式的排名.

不過我好不容易翻出 Android Market Terms of Service, 左看右看卻找不到會蒐集使用者資料的說明, 而印象中某 Google 工程師在介紹 Google Analytics for Mobile 時提到, 使用這個 API 一定得告知使用者, 最好還有個選項可以關閉資料的蒐集. (Software principles from Google Analytics API – Terms & Conditions) 但不知道是我眼殘, 還是這些說明及開關都埋在很深的 UI 裡面, 我怎麼也找不到他要我接受 ToS 的地方, 也找不到可以禁用 Google Analytics 的方法..

還好目前可以透過 Root 的方式使用 AdFree 把這類的連線 “關閉”, 雖然吃到飽的 3G 網路不會因為這點小封包受到影響, 但這種蒐集使用者習慣的方式讓人感到不是很舒服 (Android 2.3 之前的 Market 都沒這現象) 讓我 Root Android device 的理由再添上一筆 !

Root your Nexus One without using “fastboot oem unlock”

Saturday, June 26th, 2010

首先感謝 XDA Forum 上的諸位前輩: Booker-T, M9x3mos, Amon_RA, cyanogen, 沒有他們的努力就沒有這篇文章的產生 :-)

大家都知道 Nexus One 要刷自製的 ROM 得先做一次 fastboot oem unlock 才能開啟權限 (與破壞保固), 對於 geek / hacker 而言, 這根本算不了什麼. 不過還是有人希望能夠在不破壞保固的情況下仍可擁有root 權限, 所以一直有熱心人士不斷的在找尋方法. 當然以現在 Nexus One 可以使用功能強大的 Android Froyo 版本情況下, 似乎沒有必要非得擁有 root 權限, 不過對於我而言, 還是有那麼一絲絲 root 的理由:

  1. 使用 Market Enabler 購買 app / game.
  2. 備份購買的放在 app-private 的遊戲 (不過 Froyo 已經可以顯示在 Download 區為 Purchased, 即使你的 Market 無法實行購買機制)
  3. 觀察 app data 的狀況, 對於寫程式幫助不小.

而且, 開機出現鎖頭就是讓人覺得畫面很醜 (對, 我有潔癖 XD) 所以這個方法一出現, 馬上二話不說研究看看是否有機會使用, 目前看來.. 使用愉快 ! :)

首先我使用的是 Nexus One + Froyo FRF83 版本, 不過推測 2.1 之後應該都行. 電腦要安裝 Android SDK Tools, 另外請先下載 Root_N1.zip. 手上要有一張 SD 卡, 確定裡面沒有 update.zip. 再來是最重要的一步, 把 N1 電池靠近 SD 卡那側的凸起, 磨去一小塊, 這樣才能 “在電池使用狀態下, 插入 SD 卡”. 為什麼要這麼做 ? 因為進入 recovery mode 時, 如果沒放 SD 卡, 手機便可被 adb 識別在 recovery 狀態. 如果插了 SD 卡 adb 就抓不到手機, 也就無法進行 root. 當然有幸運的網友回報說, 他放了 SD 卡也可讓 adb 辨認出手機, 不過可能是我運氣不太好, 試了 3, 4 張 SD 卡 (class 2/4/6) 花了半天的時間, 仍舊無法成功, 只好靠電池磨平法在中途塞入 SD 卡.

一切就緒, 就可開始 root !

(more…)