Gradle 初次使用


心靜志遠 | 技術會被淘汰,但思想會一直永存(多思考,多總結,多分享)

Gradle的簡介,這里就不羅嗦了,Google上一大堆,這里就說說它的基本使用吧(可以簡單的理解為它是Maven的高級版本,沒那么神秘)。

基本使用流程:

1. 下載 Gradle 到本地,並配置環境變量。

2. 在項目中創建 build.gradle文件

3. 編寫 build.grade 腳本

4. 執行grade 命令

快捷使用方法:

下載Android Studio,讓它幫我們搞定一切。

指定依賴:

1. 依賴倉庫中的jar

1 compile 'group:name:version'

2. 依賴本地jar文件夾

1 compile fileTree(dir, 'libs' ,include : '*.jar')

3. 依賴本地單個jar文件

1 compile file('libs/xxx')

3. 依賴工程

1 compile project(:xx:xx)

4. Android library依賴

需要把庫的build.gradle文件中apply plugin: ‘android’ 改為 apply plugin: ‘android-library’ ,否則會報以下錯誤:

 Gradle Error – Duplicate Files copied in APK AndroidManifest.xml

倉庫配置:

1. 從中央倉庫下載:mavenCentral()

2. 使用本地Maven倉庫:maven {  url “file://F:/githubrepo/releases”      }

3. 指定遠程倉庫:maven{url “https://xxx”}

多項目管理

1. 加入我們的項目結構如下:

MyProject/

+ app/

    + libraries/

         + lib1/

         + lib2/

2. 外層根配置setting.gradle ,引入各個項目

include ‘:app’, ’:libraries:lib1′, ’:libraries:lib2′

3. 每個項目會包含一個build.gradle文件聲明該項目的編譯過程

MyProject/

| settings.gradle

+ app/

    | build.gradle

+ libraries/

+ lib1/

            | build.gradle

       + lib2/

            | build.gradle

4. 隨后我們需要在:app這個項目中指名所依賴的項目

dependencies {

compile project(‘:libraries:lib1′)

compile project(‘:libraries:lib2′)

}

Android 項目的Gradle編譯:

我們通常會在build.gradle中配置 依賴的gradle的版本、android編譯版本、android構建工具版本,這三者配置的跟本地存在的有不一致就會導致gradle build失敗。

1. gradle版本依賴配置如下:

classpath ‘com.android.tools.build:gradle:0.12.+’

我們需要查看我們本地安裝的gradle的版本是否大於等於此版本號。(Android Studio推薦使用0.12+,所以推薦使用Android Studio,它會幫助我們下載響應版本的Android Studio)

2. android編譯版本

    compileSdkVersion 19

確保本地SDK中已近下載了相應版本的SDK API

3. android構建工具版本

buildToolsVersion “19.1.0″

對於android編譯版本,同樣推薦使用Android Studio,我們通過Gradle編譯,如果版本不匹配,它會提示無此版本工具,並提示下載,當然你也可以到SDK中手工下載(不推薦)。

Android studio 中 使用 gradle 加載本地 .so 庫:

方法一:添加自定義任務:
01 task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
02     destinationDir file("$buildDir/native-libs")
03     baseName 'native-libs'
04     extension 'jar'
05     from fileTree(dir: 'libs', include: '**/*.so')
06     into 'lib/'
07 }
08  
09 tasks.withType(Compile) {
10     compileTask -> compileTask.dependsOn(nativeLibsToJar)
11 }

上面的意思是,在編譯的過程中加入nativeLibsToJar任務,這個任務先在構建目錄中新建了一個native-libs的文件夾,然后進行重命名為native-libs.jar,將so文件都加入到jar文件中。

方法二:手動生成.Jar文件后自動解包到apk文件

這個方式需要自己手動進行.SO文件壓縮,具體步驟為:將所有需要使用的.so文件壓縮為.zip文件(zip中的文件目錄結構為: lib/armeabi/*.so)然后把zip文件后綴改為.Jar然后放到libs生成apk就ok

方法三:Gradle官方在新版已經自動實現了打包.SO文件

在sourceSets -> main 中加入一下代碼:

jniLibs.srcDirs = ['libs']

這樣就不需要手動拷貝了。我的項目是多工程依賴,android-library工程中含有so文件,采用方法一,打出的App包中無法加載so文件,哭呀,由於項目才用了黑匣子,這個問題排查了好幾天,shite,所以推薦Android項目加載so文件都使用jni的方式。

參考:http://blog.csdn.net/qiujuer/article/details/24209457

在dependencies 中加入編譯后的jar包:
1 dependencies {
2     compile fileTree(dir: 'libs', include: ['*.jar'])
3     compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
4 }

參考:http://stackoverflow.com/questions/16683775/include-so-library-in-apk-in-android-studio

使用Gradle 對android lib進行打包,打出可依賴的jar:

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    def task = project.tasks.create "jar${name.capitalize()}", Jar
    task.dependsOn variant.javaCompile
    task.from variant.javaCompile.destinationDir
    task.from configurations.compile.findAll {
        it.getName() != 'android.jar' && !it.getName().startsWith('junit') && !it.getName().startsWith('hamcrest')
    }.collect {
        it.isDirectory() ? it : zipTree(it)
    }
    artifacts.add('archives', task);
}

備注:

生成的lib文件夾有時候可能在Android Studio中看不到,所以建議采用打問文件目錄的方式產看生成的jar文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM