2015年3月17日 星期二

日本賞櫻大爆走

2015 年賞櫻計畫

猶豫不決,龜龜毛毛
結果機票有點貴
不過後來還是花錢買了
3/28~4/9 關西機場進,成田機場出

  • 3/28 下午的飛機,到難波已經要睡了
  • 3/29 姬路城, 明石公園, 夙川綠地
  • 3/30 萬博公園, 毛馬桜之宮公園, 大阪城
  • 3/31 奈良: 郡山城跡, 興福寺, 冰室神寺, 奈良公園, 宇治
  • 4/1 京都: 嵐山, 天龍寺, 仁和寺, 二条城 or 平野神社夜櫻
  • 4/2 京都: 醍醐寺, 山科疏水, 衹園週邊, 哲學之道

很自虐的夜巴到東京

  • 4/3 東京市內
  • 4/4 東京市內
  • 4/5 東京市內
  • 4/6 河口湖
  • 4/6 河口湖
  • 4/7 東京市內
  • 4/8 鎌倉一日遊
  • 4/9 東京市內

看這行程能成功多少

2015年3月12日 星期四

Signing release key in AndroidStudio

Put this into ~/.gradle/gradle.properties

RELEASE_STORE_FILE={path to your keystore}
RELEASE_STORE_PASSWORD=*****
RELEASE_KEY_ALIAS=*****
RELEASE_KEY_PASSWORD=*****

注意!RELEASE_STORE_FILE 的路徑要是絕對路徑 Android Studio 很笨的會把 ~/.... 串起來, 然後找不到

signingConfigs {

   release {
       storeFile file(RELEASE_STORE_FILE)
       storePassword RELEASE_STORE_PASSWORD
       keyAlias RELEASE_KEY_ALIAS
       keyPassword RELEASE_KEY_PASSWORD
   }
}

buildTypes {
        release {
            signingConfig signingConfigs.release
        }
}

ref: StackOverflow

2015年2月11日 星期三

Android Studio multiple sourcesets problem

解決了一個困擾我三個月的事...

gradle 可以把 src code 分成不同的目錄
然後可以用 build variants 分別去要不要 include 這個東西

android.sourceSets.main {}  
android.sourceSets.XXX {}

因為我們現在開發只會用到 XXX
main 也被污染了, 一定要用到 XXX 裡的 code

每次 import project 時,我的 Mac 總是會選到 XXX 的 build variants
所以我的 Android Studio 可以 build 出來
用指令 gradle build 也是正常...

可是其它人的 Windows 總是會選到 main 的那個 build variants
所以他們總是 build 不過 (不過我重灌後的 Windows 上竟然可以!?)
只能改 gradle 把 XXX 裡的目錄加到 main 裡

可是這樣 Project view 時沒辦法把 src set 切開看,很醜

... 反正結論就是 UI 上把 build variant 選成 XXXDebug 就好了
害我為了要看不同 src set local 的 gradle 檔要跟別人不一樣
(只有我用 Mac)

今天為啥會解決這件事呢...
因為我的 Android Studio project 突然爛了
重 import source set 竟然跑回 main 了
而且怎弄都是這樣
才又把 windows 上的 iml 檔拿來 diff
靈機一動想到這回事
原來只是我運氣好(!?) ... -___-

這鳥東西竟然困擾我三個月
幹!

太蠢了,寫起來記錄

2014年11月10日 星期一

git shallow clone

shallow clone

參考這篇作法 How to handle big repositories with git

git clone --depth depth remote-url

另外 repo 也可以

repo init --depth=DEPTH

unshallow

參考 Convert shallow clone to full clone

git fetch --unshallow

2014年11月4日 星期二

ApplicationId

新的 build 系統加了 applicationId 這東西

link

簡單的說, 他要解決不同版本 (free/pro) 如何產出 apk 的問題

例如說兩個版本

  • com.example.my.app.free
  • com.example.my.app.pro

在舊的 build tool 上, 要把 AndroidManifest.xml 分別用不用的 packageName 分開
… 想到就很痛苦

新的 build 系統讓 source code 幾乎都不改的情形下
只修改 .gradle 檔

app/build.gradle:

productFlavors {
    pro {
        applicationId = "com.example.my.pkg.pro"
    }
    free {
        applicationId = "com.example.my.pkg.free"
    }
}
buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}
....

注意的點在於,雖然不用改 manifest 裡的 pkg name
可是實際上 package name 已經改了

$ aapt d badging app-release.apk
package: name='com.example.my.pkg.free' versionCode='1' versionName='1.0' platformBuildVersionName=''
sdkVersion:'15'
targetSdkVersion:'20'

如果是直接指定 component 的情形下,要小心

adb shell am start -n com.example.my.pkg/.MainActivity 已經無法使用

要改成

adb shell am start -n com.example.my.pkg.free/com.example.my.pkg.MainActivity

2014年9月23日 星期二

use private API in gradle

build.gradle

加入

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xbootclasspath/p:$projectDir/libs/hidden.jar:$projectDir/libs/hidden2.jar"
        }
    }
}

Gradle duplicated resource error

BSP 在 resource 會使用 product="XXXX" 去分別不同的 target
例如 phone / tablet

在 Eclipse 時代還相安無事
可是 gradle 根本沒有考慮這個情形
(看了一下 source code, 大概吧?)

註: Merge resource check

regex saved my life again !

find res/ -name strings.xml | xargs -n 1 sed -i "" -E '/product="tablet"/d'

2014年8月18日 星期一

Respect View.isInEditMode()

Android 的 layout renderer 並沒有聰明到可以自動去取消每一個 runtime 的程式碼

所以很多時候 onFinishLayout() 裡,onAttachToWindow() 裡
常會有一些 runtime 才會拿得到的東西
這會造成 layout renderer 直接死給你看

解法很簡單
用 isInEditMode() 去把這些 renderer 無法處理的東西包起來
(或者是直接 early return)

或者是之前講的這個...要在 renderer 裡顯示沒有的東西 View.isInEditMode()

很遺憾的是...連 Google 自己都不鳥這個 =__=

2014年8月4日 星期一

early return

看到 BSP 裡不知道在修啥 bug, 把 aosp 原來的 code wrap 了一個 null check 本來可以寫成 early return 結果硬要用 if-else 包起來

private int getWidgetPosition(int id) {
    if (mAppWidgetContainer != null) {
                 // 原來的 code
    } else {
        return -1;
    }
}

一般的 git show or diff 跑出洋洋灑灑的一大片無意義的的畫面 雖然可以下參數避掉, 不過一般還是會用 raw diff 看有沒有多的垃圾

整排indent 的結果 造成整個 diff 多了十行 每次看到這種 code 一整個想翻桌

2014年6月12日 星期四

MacOS skype input lag

自從不知道哪個版本後 Skype 沒事打字就會頓 之前試過只留 main log 再蓋回去有效 可是過陣子又會爛 剛生氣又找了一下,發現這個方法 感覺有效...也沒有之前那麼麻煩
  • Quit Skype
  • rm -rf ~/Library/Caches/com.skype.skype
http://community.skype.com/t5/Mac/Skype-increasing-lagging-and-using-too-much-CPU/td-p/2011405

Fuck you Microsoft