October 29, 2010

在finder中開啟終端機

先前曾經找過從finder直接開啟該目錄下的終端機的作法。今天又找了一個用小機器人(Automator)達到這件事的作法。參考網址

照參考網址做大概就可以了。只不過有一點小問題就是,在新的automator中並沒有save as plugin的選項。後來找到這篇討論裡面提到新的automator把這個選項取消掉了,所以如果要做同樣的事情,請在新增的時候選擇"服務"就可以了。

具體的步驟如下
1.打開automator,開啟一個新的服務。
2.從左邊拉一個AppleScript進來,script內容如下。on run {input, parameters}
tell application "Terminal"
activate
if (the (count of the window) = 0) or ¬
(the busy of window 1 = true) then
tell application "System Events"
keystroke "n" using command down
end tell
end if
do script "cd \"" & (POSIX path of ¬
(input as string)) & "\"" in window 1
end tell
return input
end run

3.存檔即可。

操作畫面如下。

直接用action script的作法有一個缺點就是,每次開起來都會多開一個在~/底下的terminal,雖然無礙,但是惱人。用小機器人的這個作法雖然不會出現兩個視窗了,但缺點就是有一點慢... orz 實在是有一好沒有兩好呀...

10/31後記。
仔細研究過兩邊的apple script之後找出可以讓他開出來只有一個視窗的辦法。雖然有點笨,不過總算可以達到目的。
程式碼如下-- this subroutine processes does the actual work
--
on process_item(this_item)
set thePath to quoted form of POSIX path of this_item
tell application "Terminal"
activate
if (the (count of the window) = 1) then
tell application "System Events"
keystroke "w" using command down
end tell
end if
do script with command "source ~/.bashrc; cd " & thePath
tell window frontmost
set custom title to this_item
end tell
end tell
end process_item

其中tell application "System Events"
keystroke "w" using command down
end tell
這一段就是把前一個視窗關掉的指令。
這樣就不會再跑兩個視窗出來了。

October 27, 2010

eclipse syntax highlight settings

今天把工作環境搞死了... (昏)

花半天時間重新建過eclipse+ADT,最後要把eclipse裡面改過用的很習慣的黑色底色的syntax highlighting移植到新的workspace裡,找到這篇有詳細的設定存放位置。

具體的位置在workspace內.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs這個位置。複製到新的workspace即可。

後記。
eclipse中所有跟syntax highlight相關的設定如底下圖中這些檔案。(當然去掉.bak才是對的。)

October 26, 2010

ProGuard on android LVL

今天一整天被android的混淆搞的烏煙瘴氣,害我又浪費掉一整天的時間。

最近先前的案子要發佈到android market上,臨時說禮拜五前要上,於是昨天花了一天弄那包LVL,下半前終於搞定。本以為今天只要再做個混淆就可以release了,沒想到ProGuard又耗了我一天。

終究原因如下。在google所release的market licensing的那包library裡面有用到enum這個東西。由於先前聽說在android上使用enum會有某些奇怪的問題,所以我們自己寫的code一律都是使用static final int來做。

沒想到的是,就在這包android的ref design裡面竟然有用到enum。混淆之後enum的value/valueof被混淆過,於是就不能用了。

在ProGuard官方網站裡面有提到這點,詳細請參考這邊

具體的作法就是把-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
這段加到ant build的xml中ProGuard那段裡面即可。

反組譯android app

其實這篇強者學長的文章更值得參考!反組譯並修改 Android 應用程式實例

今天在用ProGuard混淆的時候遇到一點機車的問題,搞不清處問題到底出在哪裡,於是同事建議我把build出來的東西反組譯回去看看是不是該混的都混了,不該混的沒有混。上次其實同事就教過我用,但最近腦筋不好都忘光光,於是自己搜尋一次果然找到相關文章。具體要反組譯android class的作法如下。
1. 到smali下載baksmali.jar檔。

2. 把.apk檔用解壓縮工具解開來,就可以看到裡面有如下圖這樣的目錄結構。
3. 把jar檔跟classes.dex放在一起之後執行底下指令#java -jar baksmali.jar classes.dex 之後就會得到一個out的資料夾,內含如下圖的smali檔。
然後接下來要做什麼就看各人囉。

October 14, 2010

monkey test

今天才知道,原來android有提供一個測試的tool叫做monkey,用來作UI的測試。執行之後會送給機器一連串的command,用來測試軟體的可靠度。

要跑monkey test需要從adb去下指令。指令格式如下:$ adb shell monkey [options] [event-count]例如:$ adb shell monkey -p your.package.name -v 500

跑下去之後就看到手機像發瘋一樣一直亂動,還會叫音樂播放軟體起來,其實還挺有趣的。剛測了一下前幾天剛release的軟體頗正常,沒有掛掉。

官方網頁看這邊

October 13, 2010

雜感

最近莫名又有點惶恐,覺得好像太過依賴強者同事,導致自己的進步趨緩,等於退步了。

今天認真了一天,雖然很慢,但多多少少也有回升一點自信。也許也不是那麼糟糕,總之開始努力是怎麼都不嫌晚的。

總是以不要後悔作為思考未來決定的關鍵,可偏偏有些決定在當下似乎不管選了哪一邊都可能會有所失去。果然人生的難題也不是用單一把鑰匙就可以解開全部謎題。

build android native code on eclipse -II

上次這篇還是單純的build native code的部份。昨天又找到一篇寫到java code跟native code在同一個專案import進來,一起build的作法。
具體的作法大概就是,先將含有jni folder的專案import進來之後,建一個native-builder負責jni code的building動作。windows上的相關設定參考這篇。第一支Android NDK程式--HelloJni
若在mac上可以參考底下。

eclipse crash on OS X 10.6 Snow Leopard

最近在mac上開發的project需要用到jni。無奈環境設定好之後,eclipse老是莫名掛掉,照這樣根本沒辦法工作下去。google了老半天,終於找到一篇相關文章。
看起來意思似乎是新的eclipse跟1.6的JVM有某種衝突,所以不能用1.6的版本。而在機器上的1.5的java是直接link到1.6上,故需要自己安裝1.5.0的JVM,然後再把1.5的調到比較優先的位置。
詳細的具體做法可以參考這一篇:Snow Leopard Java problems (and fix)
照樣做完之後如果還是一樣會發生crash的問題,請檢查eclipse.ini裡面是否有底下這個參數。若有請把它設成1.5-Dosgi.requiredJavaVersion=1.5理論上這樣應該就可以正常了。

後記。
今天小麥上出現了Java更新,更新之後之前做的修改就都不見了。不過似乎更新之後crash的問題也沒再發生,天下太平了,可喜可賀。