A. 如何在android Studio中使用Maven
方法一:
找到項目的maven配置文件pom.xml。
在pom.xml上點擊右鍵->Maven->Reimport就可以刷新maven依賴。
方法二:
點擊android studio主界面右邊的「maven projects」菜單。
在打開的界面中,點擊刷新的圖標,就可以刷新依賴。
B. CompilationFailedException解決
在Gradle版本升級後,編譯運行項目時,提示org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;但沒有列出錯誤的具體原因。我們無法根據現有的編譯log找陵槐出錯誤所在,如下:
根據報錯內容,可以看出是執行compileDebugjavaWithJava任務時報的錯誤。異常為:TaskExecutionException(任務執行錯誤)並被告知編譯失敗異常(CompilationFailedException)。
我們可以使用gradlew命令在命令行中來單獨執行報錯任務,並列印出具體錯誤信息,我遇到的報錯的taskName為compileDebugJavaWithJavac,那麼命令如下:
運行後會尺搭友看到具體的錯誤,如下:
我這邊遇到的問題單獨執行報錯任務後,也沒有具體詳細的錯誤信息(大部分異常可以直接看到詳細的錯誤信息)
但是可以看到lib_common模塊下databinding相關的報錯信息,於是解決android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)相關的異常,這個異常是因為在xml文件中使用了get()方法,去掉get()方法後重新編譯,編譯成功。
android.databinding.tool.expr.Expr.resolveListeners異常解決鏈接:
在編譯時遇到CompilationFailedException,並沒有詳細報錯信息時,單獨執行報錯任務
然後獲取到具體報錯信息後,解決相應的枝喊報錯問題,重新編譯。
C. android studio的gradle里的東西怎麼用
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。
根目錄下的腳本文件是針對mole的全局配置,它的作用閾所包含的所有 mole 是通過settings.gradle來配置。
app文件夾就是一個mole,如果在當前工程中添加了一個新的mole -- lib,就需要在settings.gralde文件中包含這個新的mole。
gradle腳本的基本結構
用我現在的工程舉例來說,根目錄的build.gradle的內容如下所示:
// Top-level build file where you can add configuration options common to all sub-projects/moles.
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 indivial mole 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就是項目包含的一個mole,如果有多個mole,可以在為 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
}
}
proctFlavors {
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'
// 項目相關(已刪除)
}
Groovy 的基本語法
方法調用
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'
}
}
常見使用方法
包依賴(aar)
使用aar時可以分為兩種情況
① aar位於本地目錄
首先在 android 的參數閉包中添加調用方法 repositories
repositories {
flatDir {
dirs 'libs'
}
}
然後在 dependencies 的參數閉包中添加
compile name: 'volley', ext: 'aar'
② aar位於遠程倉庫
這里以maven為例,當然也可以使用其他類型的倉庫,例如 Ivy。
只需要在jar包引用方式後面添加一個@aar就可以了
compile 'com.alibaba:fastjson:latest.integration@aar'
包依賴(jar)
compile group: 'com.alibaba', mole: 'fastjson', version: 'latest.integration'
可以簡寫成
compile 'com.alibaba:fastjson:latest.integration'
latest.integration可以替換成具體的版本號,這里是獲取伺服器上的最新版本。
去掉重復依賴
compile 'com.alibaba.fastjson.latest.integration' {
exclude mole: 'annotations', group: 'com.google.android'
}
使用 Java7
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
proctFlavors
針對不同的APP分發渠道,我們可以定義不同的 proct flavor。也可以定義內部版本和外部版本,內部版本中包含了一些調試代碼,這些代碼在發布時並不會被編譯進最後的APP中。而且可以分別為內部版本和外部版本指定不同的ApplicationId,這樣在同一個設備上可以同時安裝兩個版本以方便調試。
命令行執行Gradle腳本
在Android工程根目錄下會自動生成一個shell腳本 - gradlew,執行之前記得加上x屬性 - chomod +x gradlew
gradle腳本中包含了很多 task,可以通過task名來指定需要執行的task。
./gradlew build./gradlew assemble./gradlew assembleInnderDebug
總結
不得不說,Gradle實在太好用了!雖然 Gradle 可以與 Ant 或 maven 配合使用,但是其簡潔和功能性遠遠超過其他兩個。我現在開發的項目普遍使用的是 maven,不知道什麼原因,使用Gradle時經常會遇到一些無法獲取遠程依賴包的問題,最簡單的解決辦法就是把依賴包下載的本地。