顯示具有 gradle 標籤的文章。 顯示所有文章
顯示具有 gradle 標籤的文章。 顯示所有文章

2014年10月22日 星期三

Android 開發(七十一) Gradle 查詢可執行command

常常會遇到要下gradle command的時候卻不知道該怎麼去下command

例如我今天想要看 dependencies tree ,可是卻不知道該如何下commnad

gradle 有內建一個非常方便的功能

gradle -q task --all

這個commnad會將所有可執行的task 列出來,有點像是ls的感覺...

你可以利用這個command找到你希望執行的command


以下是我下 gradle -q task --all的部分可執行 command

Android tasks
-------------
actionbarsherlock:androidDependencies - Displays the Android dependencies of the project
app:androidDependencies - Displays the Android dependencies of the project
DataDroid:androidDependencies - Displays the Android dependencies of the project
FacebookSDK:androidDependencies - Displays the Android dependencies of the project
slideMenu:androidDependencies - Displays the Android dependencies of the project
viewpager:androidDependencies - Displays the Android dependencies of the project


從上面可以很清楚的知道,假設我要看我project的 dependencies
我只需要執行  gradle  app:androidDependencies 




2014年9月10日 星期三

Android 開發(六十六) gradle rebuild 但是修改的參數並沒有被更改

利用 gradle build --rerun-tasks 例如: 在build.gradle 裡寫入這樣的參數 ext { ga_apptracker = "UA-123456-1" ga_global_logLevel = "verbose" ga_global_dryRun = "true" } 然後利用gradle replace掉特定的參數 這個情形在第一次的時候會順利更改資料,但是不知道為何之後就不會再被更改, 即使rebuild也沒有用,我猜測是因為 android studio 將該檔案視為 update to date 所以並不會重新被更動 這樣可以確保project重新 rebuild ,雖然這樣會很花費時間, 但是可以確保build.gradle檔案裡的資料會被更新成最新版本的資料 不過...如果只是要確保每次都會執行,目前有較好的做法 task GABuildValueCopy <<{ copy { ...dosomething } } 在android studio 0.8.6 這樣寫就可以確保每次執行該task都會被執行到

2014年8月21日 星期四

Android 開發(六十五) Gradle 出現 unable to locate a java runtime to invoke

在command line key這些指令之後
$ chmod +x ./gradlew
$ ./gradlew assembleDebug
再重新build即可

目前還不知道為何會發生這個事情...

Android 開發 (六十四) Gradle replace and copy file

在prebuild時要如何修改 xml 裡的檔案?
例如  我們有個buildvalue變數  希望在build的時候做修正




首先必須先創建一個template 接著template中的字串做match 並replace之後將檔案複製到原本的build folder中










照著上面的方法寫,我們必須手動的在build之前打入指令
gradle myCopy
然後等到他完成之後才可以執行 grdle build
也就是說task並不會自動被執行

所以我們可以在gradle file中加入






這代表著在prebuild之前必須先執行 myCopy結果如下
















:app:myCopy代表有跑到myCopy這個task
這樣就會完整執行到我想做的事情了

Android 開發 (六十三) Gradle Flavor

Flavor  利用flavor 可以修改 packageName versionCode versionName
在build.gradle 下新增 productFlavors 設定希望的值
並且在Manifest中做相關設定即可
例如   applicationId 在這邊為 packagename   然後在 manifest中 將參數寫成 ${applicationId}  在build的時候就會置換































利用上面的方式,我們能夠輕鬆的替換package name
接著該如何利用不同的flavor替換不同的ui呢?


假設我們有100間店,以及1000種ui
那我們就需要兩個參數來控制色碼和店家
首先我們先在 flavorDimensions  中定義 color and shopNum 




接著定義各個color 以及 shopNum要吃的參數
如下  color1的 flavorDimension 為color代表著  color1 是代表color參數而
shop1 的 flavorDimension為 shopNum代表著 shop1代表著shopNum的參數
可以看到我們在color1 以及shop1 中各定義了一些參數














由於我們必須換圖 為了達到這個目的,我們只需要在folder中創建 color1 and color2 














接著當我們要build的時候  只需點選左下角的 build Variants  接著選取我們要build的項目即可,
color1Shop1Debug  or  color2Shop2Debug ...etc

2014年7月9日 星期三

Android 開發 (五十六) Gradle 如何增加lib

Gradle 跟eclipse的行為很不一樣,在eclipse中當我們缺少lib,需要將lib檔加入 libs folder或者加入 android lib中


但是在 android studio中一切都變了,如今...要import library變得更簡單,我們不再需要繁瑣的import 沒用的project,也不需要每次為了幫別人架設環境用半天了

在 Android Studio 中我們可以利用 file -> Project Structure -> Dependencies 增加我們需要的lib


假設我們需要import external的lib,變得更簡單了,以前我們可能必須import一大堆的project到我們的專案中,現在這一切已經不再必要,你只需要知道版本號之後只需要在上面的search欄中填入你的lib 並且點選ok就完成了,舉個簡單的例子,例如我的project想要import eventbus這個功能
我只需要將 
dependencies {
    compile 'de.greenrobot:eventbus:2.2.1'
}
加入我的dependencies中即可,剩下的gradle會幫你解決所有的問題。

真的是超級方便啊,不過最近在0.81 版本上遇到一個問題,

Manifest merger failed : uses-sdk:minSdkVersion xx cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1

感覺是0.8的bug,看起來是因為gradle設定檔內使用
compile 'com.android.support:support-v4:+' 造成 gradle去使用最新版本的 support-v4 然而最新版本的 support-v4似乎只支援 L, 所以必須將上面的 dependencies 改成  compile 'com.android.support:support-v4:20.0.0' 這樣就解決了。

Android studio真的很方便,而且也進入beta了,如果是寫新app的人可以直接切過來了,至於必須維護舊app的人,這條路也是必經之路,現在這個時間點也是可以考慮切換的時候了,畢竟eclipse真的很麻煩啊XD。