1. 程式人生 > >Android Studio 使用Gradle引入第三方庫檔案的總結

Android Studio 使用Gradle引入第三方庫檔案的總結

refs:

jar檔案

將jar檔案複製至app module目錄下的libs資料夾下,然後開啟app module目錄下的build.gradle配置檔案,在dependencies項中新增配置命令,這裡有兩種配置方式可供選擇:

  • 一次性引入libs目錄下所有jar檔案
compile fileTree(include: ['*.jar'], dir: 'libs')
  • 單個逐一引入jar檔案
compile files('libs/universal-image-loader-1.8.6-with-sources.jar')

so檔案

  • Gradle 舊版本

將so檔案(包含arm64等資料夾)複製app module下面的libs資料夾中,和jar檔案類似,然後在build.gradle的android

欄目下新增一個task:指定so檔案的目錄,並將其轉化為Jar檔案。命令如下:

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {  
        destinationDir file("$projectDir/libs")  
        baseName "Native_Libs2"  
        extension "jar"  
        from fileTree(dir: "libs", include: "**/*.so")  
        into "lib"  
    }  
  
    tasks.withType(JavaCompile) {  
        compileTask -> compileTask.dependsOn(nativeLibsToJar)  
    }  
  • Gradle 新版本

新版Gradle實現了自動打包編譯so檔案的功能,並且為so檔案指定了預設的目錄app/src/main/jniLibs,當然預設是沒有這個資料夾的,我們只需要新建一個jniLibs資料夾,並將so檔案複製到該資料夾下,編譯執行即可。

通常,為了更好地管理第三方庫檔案,或者更簡單地將Eclipse專案轉化為Android Studio專案,建議將jar檔案和so檔案放在一起,統一擱置在app/libs目錄下,此時,我們只需要在build.gradle的android一欄中新增如命令,指定so檔案的目錄即可:

    sourceSets {
        main {
                jniLibs.srcDirs = ['libs']
        }
    }

通過這種方式,編譯過後,將專案目錄切換至Android試圖,可以看到,app目錄下多了一個jniLibs資料夾,裡面包含了引入的so檔案和jar包,如下圖所示,表示整合成功。

Library庫檔案

將第三方Library庫檔案複製到專案根目錄下,開啟專案根目錄下的settings.gradle檔案,新增配置命令,如:

include ':app', ':PullToRefresh'

然後開啟app module目錄下的build.gradle,新增配置命令,如:

compile project(':PullToRefresh')

小技巧:推薦在專案根目錄下新建一個資料夾,如extras資料夾,將所有Library庫檔案都複製到該檔案下,方便統一瀏覽管理,這樣上面兩步對應的配置命令將變成:

include ':app', ':extras:PullToRefresh'

compile project(':extras:PullToRefresh')

aar檔案

aar其實也是一個壓縮檔案,相比jar檔案,它能夠含帶res資原始檔等,aar檔案的引入方式有兩種:

  • Module形式引入

選擇File選單,或者開啟Project Structure介面,新增新的Module(New Module...),選擇Import .JAR/.AAR Package,選擇目標aar檔案匯入。匯入之後,在專案根目錄下會自動生成一個新的資料夾放置aar檔案及其配置檔案,如:

aar檔案引入方式一.png

然後開啟app module目錄下的build.gradle配置檔案,在dependencies依賴項中新增配置即可:

compile project(':qiniu-android-sdk-7.2.0')

注意:這種引入方式無法檢視aar檔案中的程式碼和資源等檔案。

  • libs目錄中引入

將aar檔案複製到app module目錄下的libs資料夾中,然後開啟app module目錄下的build.gradle配置檔案,在android一欄中新增依賴:

repositories {
    flatDir {
        dirs 'libs'
    }
}

然後再在dependencies一欄中新增:

compile(name:'qiniu-android-sdk-7.2.0', ext:'aar')

對應完整的app module目錄下的build.gradle配置檔案如:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.feng.demo"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    repositories {
        flatDir {
            dirs 'libs'
        }
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile project(':extras:PullToRefresh')
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile(name:'qiniu-android-sdk-7.2.0', ext:'aar')
}

重新同步,編譯工程,然後可以在app的build目錄下生成對應aar的臨時檔案,可以看到aar檔案中的jar檔案、資原始檔等,看上去更像是一個解壓縮資料夾:

aar檔案引入方式二.png

jcenter、maven倉庫檔案

在專案根目錄的build.gradle檔案中新增倉庫,如:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

然後再各個Module的build.gradle配置檔案的dependencies項中新增依賴,格式為`compile 'name:version'`,如:

compile 'com.squareup.okhttp3:okhttp:3.2.0'

總結

以上便是針對Android Studio引入第三方庫檔案的幾種方式,它們各有利弊,總結來看,就是在包含內容、原始碼修改、版本更新三方面上的差異。Jar檔案只包含java程式碼,不像aar等其他檔案能夠包含res資原始檔;Library檔案形式的引入可以讓開發人員根據自己的需求修改庫檔案原始碼,以達到適應自己專案的目的;而遠端倉庫形式的引入可以實現版本的自動檢測更新,保證自己專案使用的第三方庫檔案始終是最新版本。



作者:亦楓
連結:https://www.jianshu.com/p/0c592fff5d89
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。