2013年1月24日 星期四

Android UI 特效實戰 (1) Cross Fading

分享一下最近實作Android App的一些小經驗, 手法都不是新的, 但還是記錄一下, 希望能夠幫上有同樣需求的人

特效 (1) CrossFade
一個很常見的特效, 簡單來說就是利用動畫效果讓A View切到B View時視覺效果不要太突兀, 比如說A View 漸出(Fade out) B View 漸入(Fade in), 讓切換的畫面是連續的.

2012年4月5日 星期四

Android decompile and recompile

最近在用一些Free Android App發現有廣告十分的礙眼, 加上之前有報導這些Ad時相當的耗電, 於是有了自行將Ad拿掉的念頭, 以下的紀錄都是實驗性質, 進行非法行為本人既不負責, 謝謝.

  1. 反組譯(Decompile) :
    工具其實比想象的多, 之前因為工作需要也碰過幾種, 剛好翻到一篇文章列出有名的幾種. 大部分都能夠取得apk內res目錄下的資源, 如圖案, 字串, xml等.
    • Apktool : 本篇文章使用此種, 將apk轉換成android的組語smali格式.
    • dex2jar + jdgui : 這個超強, 只要程式不要太複雜, 可以看到完整的java code.
    • baksmali : 也能產生smali code.
    • dexdumptest : 沒用過, 不過是原生提供的工具.

2011年12月29日 星期四

如何編譯Android Ice Cream Sandwich

此篇文章主要記錄在Macbook Pro(mbp), OSX Lion上編譯ICS的Android source code的步驟, 不過應該Linux系統上也相同, 而且簡單許多, OSX上需要多做一些修改.

基本步驟
  1. 按照官網下載source code並設定環境
  2. 設定ccache, 原因是能夠加速c/c++的compiler速度(官網)
    $ export USE_CCACHE=1
    $ export CCACHE_DIR=/<path_of_your_choice>/.ccache
    $ prebuilt/linux-x86/ccache/ccache -M 20G
  3. 下載廠商提供的binary檔案, 我的手機是Nexus S, 所以Google提供
  4. 準備編譯
    1. 先將環境清乾淨
      make clobber
      
    2. 設定環境變數
      source build/envsetup.sh
    3. 設定編譯選項
      lunch
  5. 編譯
    make -j 4
    

2011年11月2日 星期三

2011年10月28日 星期五

Change KKBOX download path in OSX

自從我把電腦的硬碟換成SSD後, 就很在意APP資料的儲存位置, 分享一下如何把KKBOX的下載位置換到其他地方.

cd ~/Library/Application Support/KKBOX/
mv Downloaded\ Music /Volumes/Data/music/kkbox/Downloaded\ Music
ln -s /Volumes/Data/music/kkbox/Downloaded\ Music .

就大功告成啦, 其實只要知道下載的位子在那邊就好辦了
ps:/Volumes/Data/music/kkbox/Downloaded\ Music 是我的hdd位子, 有參考的朋友們自行換成想要放的位子喔

2011年8月2日 星期二

Android dpi / px / dp / 研究

最近工作上剛好遇到Android dpi 相關的問題, 紀錄一下研究筆記.
  • 基本觀念:
    • Resolution(px): 就是我們熟知的解析度, 如1024x600.
    • Size(dp/dip): 在Android上實際看到的大小, 若定義100dp, 實際在各種尺寸, dpi定義正確的裝置上, 看起來的實際大小應該要差不多.
    • Density(dpi): Dot Per Inch, 每一英寸有幾個點.
    • px = dp * (dpi / 160) Android官方公式
  • 問題: DPI設定錯誤會發生什麼事情
    • 在開發Android Platform時必須要決定dpi的數值, 錯誤的dpi會讓程式UI比例呈現異常, 如Galaxy Tab 7". (該device設定dpi為240, 表示螢幕每一英寸應該要能夠顯示240個點, 但根據DPI Calculator, 7" 1024x600每一英寸只能顯示169個點, 所以當ui resource是用dp定義width/ length的話, 經過公式換算後, 實際看到都會被放大約1.5倍)
  • 研究 : 今天如果我們有個裝置是7" 1280x800解析度, 那我們的dpi到底該定義多少?
    • 若根據DPI Calculator, 該裝置每一英寸能看到215個點, 反推螢幕上能顯示的大小
      • 寬1280 = dp * (215/160), dp約為 952dp
      • 高  800 = dp * (215/160), dp約為 595dp
    • Android Developer - Configuration Example, 直接定義了各尺寸螢幕該容納的dp大小
      • 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
      • 480dp: a tweener tablet like the Streak (480x800 mdpi).
      • 600dp: a 7” tablet (600x1024 mdpi).
      • 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).
    • 若為7"裝置, 所以就用600 dp來反推dpi
      • 高 800 = 600 * (dpi/160), dpi約為 213dp
    • 之所以是用寬度width反推, 而不是高度height反推是因為, 在操作畫面的時候, 垂直空間不足時, 上下滑動是很直覺的操作, 但左右移動卻比較罕見, 寬度width定義大小必須要比較注意.
      • 所以Android Developer新增了Declaring Tablet Layouts for Android 3.2, 優先考慮smallest width dp(layout-swXXXdp)
    • 因此得知7" 1280x800的顯示空間為961dp * 600dp, 須設定為213dpi
  • 個人結論
    • UI到底要用怎麼設計? 
      • 目標裝置解析度是1280x800就畫1280x800 px的圖. 
      • 在定義layout resource時, 要用dip/dp指定長寬, 而非px. (利用px = dp * (213/160)可推出dp)
      • 使用Relative Layout, 而非Absolute Layout
    • 想要支援dp較小的裝置要怎麼辦?
      • 定義不同的layout吧, 如layout-normal.
Ref:
1. http://developer.android.com/guide/practices/screens_support.html
2. http://developer.android.com/guide/topics/resources/providing-resources.html
3. http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html
4. DPI Caclulator

Synergy 多電腦分享輸入裝置好工具

Synergy讓你能夠用延伸桌面的方式來操作兩台不同的電腦
當有兩台螢幕分別接到不同電腦時, 你的滑鼠可以自由來去之間爽度是非常高的!!(不過當然要在同一區域網路XD)

官網: http://synergy-foss.org/
支援很多平台, 我是使用Ubuntu + OSX

Ubuntu 可以用 aptitude 安裝
sudo aptitude install synergy
OSX可以用 brew
brew install synergy
裝好之後在鍵盤滑鼠所接到的那台電腦上(簡稱控制端)還需要加入config檔案, 看官網好像很複雜, 其實沒有要設定什麼特殊功能的話, 只要指定好hostname跟相對方位而已
附上我的設定檔跟簡單說明
section: screens
    #指定你的電腦名稱
    jason-mbp.local:   #這台是我的mac
    jason-pc:               #Ubuntu
end 
section: links
    #指定你的螢幕相對位置, 我的ubuntu在左邊, mac在右邊
    jason-mbp.local:
        left = jason-pc
    jason-pc:
        right = jason-mbp.local
end

電腦名稱在OSX/Ubuntu的 ternimal下輸入hostname就可以知道, windows好像就是系統名稱
設定檔弄好之後在控制端電腦輸入
synergys -c /usr/local/Cellar/synergy/1.3.6/bin/synergy.conf -a 192.168.1.122
設定檔位置跟本機ip記得換成自己的

遙控端輸入
synergyc 192.168.1.122
就可以享受偽雙螢幕啦lol

Special Thanks: Yuren ju
我本來用很蠢的遠端桌面超痛苦, 這樣好用多了