編輯:關於Android編程
Gradle是可以用於Android開發的新一代的 Build System, 也是 Android Studio默認的build工具。
Gradle腳本是基於一種JVM語言 -- Groovy,再加上DSL(領域特定語言)組成的。
因為Groovy是JVM語言,所以可以使用大部分的Java語言庫。所謂DSL就是專門針對Android開發的插件,比如標准Gradle之外的一些新的方法(Method)、閉包(Closure)等。
由於Gradle的語法足夠簡潔,而且可以使用大部分的java包,當之無愧地成為新一代 Build System。
使用Android Studio新建一個工程後,默認會生成兩個build.gralde文件,一個位於工程根目錄,一個位於app目錄下。還有另外一個文件 --settings.gradle。
根目錄下的腳本文件是針對module的全局配置,它的作用阈所包含的所有 module 是通過settings.gradle來配置。
app文件夾就是一個module,如果在當前工程中添加了一個新的module -- lib,就需要在settings.gralde文件中包含這個新的module。
用我現在的工程舉例來說,根目錄的build.gradle的內容如下所示:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0-rc4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() maven { url 'http://mvnrepo.xxx.com/mvn/repository' } } }
classpath 'com.android.tools.build:gradle:1.0.0-rc4'
就是Android特有的插件,maven倉庫位於通過方法jCenter() 獲取,這也是默認的maven倉庫。當然也可以添加額外的maven倉庫地址,例如以上文件中的
maven { url 'http://mvnrepo.xxx.com/mvn/repository' }
然後是 settings.gradle 文件:
include ':app'
app就是項目包含的一個module,如果有多個module,可以在為 include 方法添加多個參數。
最後是app/build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.1" compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } defaultConfig { applicationId "your.application.id" minSdkVersion 14 targetSdkVersion 21 versionCode 2 versionName "2.0.0" } signingConfigs { release { storeFile file('release.keystore') storePassword "yourstorepassword" keyAlias "yourkeyalias" keyPassword "yourkeypassword" } debug { storeFile file('debug.keystore') } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { signingConfig signingConfigs.debug } } productFlavors { inner { applicationId "your.application.inner.id" versionName "2.0.0" } market { } } } repositories { flatDir { dirs 'libs' } } dependencies { // 通用 compile name: 'volley', ext: 'aar' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.alibaba:fastjson:latest.integration' // 項目相關(已刪除) }
apply plugin: 'com.android.application'
以上語句中的apply
是一個方法,給它傳遞了一個參數plugin
,plugin
的值是'com.android.application'
。
如果有多個參數,則以逗號隔開,例如
compile name: 'volley', ext: 'aar'
Groovy中花括號包含的部分成為一個閉包(Closure)。例如下面的代碼
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }
compileOptions
是一個 Method, 它的參數是一個閉包,這個閉包內依次執行了兩個方法 -- sourceCompatibility
和targetCompatibility
, 參數都是JavaVersion.VERSION17
。
閉包也可以嵌套包含
repositories { flatDir { dirs 'libs' } }
首先在 android 的參數閉包中添加調用方法 repositories
repositories { flatDir { dirs 'libs' } }
然後在 dependencies 的參數閉包中添加
compile name: 'volley', ext: 'aar'
這裡以maven為例,當然也可以使用其他類型的倉庫,例如 Ivy。
只需要在jar包引用方式後面添加一個@aar
就可以了
compile 'com.alibaba:fastjson:latest.integration@aar'
compile group: 'com.alibaba', module: 'fastjson', version: 'latest.integration'
可以簡寫成
compile 'com.alibaba:fastjson:latest.integration'
latest.integration
可以替換成具體的版本號,這裡是獲取服務器上的最新版本。
compile 'com.alibaba.fastjson.latest.integration' { exclude module: 'annotations', group: 'com.google.android' }
compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 }
針對不同的APP分發渠道,我們可以定義不同的 product flavor。也可以定義內部版本和外部版本,內部版本中包含了一些調試代碼,這些代碼在發布時並不會被編譯進最後的APP中。而且可以分別為內部版本和外部版本指定不同的ApplicationId
,這樣在同一個設備上可以同時安裝兩個版本以方便調試。
在Android工程根目錄下會自動生成一個shell腳本 - gradlew,執行之前記得加上x屬性 - chomod +x gradlew
gradle腳本中包含了很多 task,可以通過task名來指定需要執行的task。
./gradlew build./gradlew assemble./gradlew assembleInnderDebug不得不說,Gradle實在太好用了!雖然 Gradle 可以與 Ant 或 maven 配合使用,但是其簡潔和功能性遠遠超過其他兩個。我現在開發的項目普遍使用的是 maven,不知道什麼原因,使用Gradle時經常會遇到一些無法獲取遠程依賴包的問題,最簡單的解決辦法就是把依賴包下載的本地。
先給大家展示下效果圖,如果大家感覺還不錯,請參考實現代碼很簡單的一個例子,點擊刷新驗證碼,刷新當前顯示的驗證碼,點擊確定,如果輸入的和顯示的匹配,就會跳轉到下一個界面中,
擴展自定義相機應用程序 在我看來,Android 上的內置相機應用程序缺少幾個基本特征。其中之一是,延遲一小段時間,10或者30秒,之後進行拍攝。此種功能對於那些可以安裝
在配置好NDK開發之後就可以使用C/C++開發android了。下面以一個HelloWorld項目來說明1.新建一個Android工程新建一個HelloWorld工程代碼
Android M指紋的資料太少,經過一段時間閱讀原生Android代碼,寫了以下例子,貢獻出來給需要幫助的人。以下內容基於64位的高通CPU,搭載fpc1020芯片,此