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
參考這篇作法 How to handle big repositories with git
git clone --depth depth remote-url
另外 repo 也可以
repo init --depth=DEPTH
參考 Convert shallow clone to full clone
git fetch --unshallow
新的 build 系統加了 applicationId 這東西
簡單的說, 他要解決不同版本 (free/pro) 如何產出 apk 的問題
例如說兩個版本
在舊的 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
build.gradle
加入
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xbootclasspath/p:$projectDir/libs/hidden.jar:$projectDir/libs/hidden2.jar"
}
}
}
BSP 在 resource 會使用 product="XXXX" 去分別不同的 target
例如 phone / tablet
在 Eclipse 時代還相安無事
可是 gradle 根本沒有考慮這個情形
(看了一下 source code, 大概吧?)
regex saved my life again !
find res/ -name strings.xml | xargs -n 1 sed -i "" -E '/product="tablet"/d'
Android 的 layout renderer 並沒有聰明到可以自動去取消每一個 runtime 的程式碼
所以很多時候 onFinishLayout() 裡,onAttachToWindow() 裡
常會有一些 runtime 才會拿得到的東西
這會造成 layout renderer 直接死給你看
解法很簡單
用 isInEditMode() 去把這些 renderer 無法處理的東西包起來
(或者是直接 early return)
或者是之前講的這個...要在 renderer 裡顯示沒有的東西 View.isInEditMode()
很遺憾的是...連 Google 自己都不鳥這個 =__=
看到 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 一整個想翻桌
2d14654 HEAD@{0}: commit (amend): Other's patch
428555b HEAD@{1}: commit: Other's patch
bd33767 HEAD@{2}: commit: Previous one
$ git reset --hard HEAD~1
HEAD is now at bd33767 Previous one
$ git cherry-pick 428555b
....
$ git diff 428555b 2d14654 | git apply -
這時打 git status 就可以發現當初的修改回來 unstage 的狀態了, 重新 git commit
$ git commit
完成