Android Studio打包apk,aar,jar包

weixin_34015860發表於2018-10-30

轉載請標明出處:一片楓葉的專欄

文字我們將講解android studio打包apk,aar,jar包的相關知識。apk包就是android系統的安裝包,這裡沒什麼好說的,aar包是android中獨有的類庫包,而jar包是java中特有的類庫包,在具體的介紹打包之前,我們先來aar包和jar包的區別。

jar包與aar包的區別

  • jar是java位元組碼檔案(class檔案)的歸檔檔案,其不包含android中的資原始檔等資訊;

  • aar是android中特有的歸檔檔案,既包含位元組碼檔案也包含android的資原始檔等;

區別:大家都知道jar檔案把,如果你有一個Android Library專案,可以很容易的匯出jar檔案,然後在其他專案中很方便的引用,aar和jar類似,區別就是一個Android Library專案匯出的jar檔案不能包含資原始檔,比如一些drawable檔案、xml資原始檔之類的,所以這就有很大的限制,在gradle之前我們要引用帶資原始檔的Android Library必須要把整個library匯入進來進行引用,但是有了gradle之後,Android Library專案可以直接匯出成aar,然後其他專案像引用jar的方式直接方便的引用。

具體可參看下圖:

  • aar包解壓之後的結構:
    這裡寫圖片描述

  • jar包解壓之後的目錄結構:
    這裡寫圖片描述

怎麼樣?jar包和aar包的區別很明顯吧。

打包apk檔案

在android studio中打包apk檔案有兩種方式:

  • 通過gradle配置輸出apk檔案

  • 執行Generate singed apk操作獲得apk檔案

下面我們將分別介紹一下這兩種方式的具體步驟,首先我們先看一下如何通過gradle配置的方式,輸出apk檔案。

android studio中配置打包指令碼

  • 配置打包型別
buildTypes {
        debug {
            // 顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            //混淆
            minifyEnabled false
            //Zipalign優化
            zipAlignEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            //載入預設混淆配置檔案
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //簽名
            signingConfig signingConfigs.debug
        }
        release {
            // 不顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //混淆
            minifyEnabled true
            //Zipalign優化
            zipAlignEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            //載入預設混淆配置檔案
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //簽名
            signingConfig signingConfigs.relealse
        }
    }

可以發現這裡的buildType中配置了release包和debug包,以及各自的簽名資訊:

singingConfig singingConfigs.release

更加具體的簽名資訊配置在singingCongis中,下面我們來看一下其實如何設定的

  • 配置簽名資訊
//簽名
    signingConfigs {
        debug {
            storeFile file("aaa.keystore")
            storePassword "111111111"
            keyAlias "aaa.keystore"
            keyPassword "111111111"
        }
        relealse {
            storeFile file("aaa.keystore")
            storePassword "111111111"
            keyAlias "aaa.keystore"
            keyPassword "111111111"
        }
    }

這樣我們就配置好了apk打包的簽名資訊,然後我們可以開啟Build Variants操作框了…

  • 配置Build Variants

這裡寫圖片描述

這裡可以看到我們在mobile module中定義了兩個buildType,其中debug和release Type,並且其打包時預設使用的簽名資訊就是我們剛剛配置的各自的簽名資訊。

這裡需要說明的是android studio中module預設都會有debug和release兩個buildType,就算你什麼都不配置的話,這裡也會存在這兩個buildType,而且,除了這兩個之外你還可以配置額外的定製化的buildType,比如你想打一個資訊的debug01包,使用另外的一套簽名資訊:

  • 在buildType節點下新增
debug01 {
            // 顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            //混淆
            minifyEnabled false
            //Zipalign優化
            zipAlignEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            //載入預設混淆配置檔案
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //簽名
            signingConfig signingConfigs.debug01
        }
  • 新增新的簽名資訊
debug01 {
            storeFile file("bbb.keystore")
            storePassword "222222222"
            keyAlias "bbb.keystore"
            keyPassword "222222222"
        }
  • 配置Build Variants

這裡寫圖片描述

可以發現這時候Build Variant中mobile module多了一個buildType:debug01,其就是我們剛剛配置的debug01 buildType,並且使用的是另外的一套簽名資訊,若我們選中debug01,則android studio預設run或者是build apk的時候就會編譯debug01版本的apk了。

  • 執行run app或者是Build apk操作

這裡寫圖片描述

這樣我們最終就能夠輸出一個apk格式的安裝包了。

執行Generate singned apk操作

除了上面的通過gradle配置的方式生成apk檔案,我們還可以執行Generate singned apk操作,通過這樣的操作,我們也可以獲得一個apk的輸出檔案,具體步驟如下:

  • 執行Build –> Generate singed apk操作

  • 填寫相應的簽名資訊
    這裡寫圖片描述

  • 選擇打包的型別
    這裡寫圖片描述

好吧,上面就是我們所要介紹的打包apk的兩種方式。下面我們在講解一下如何通過android studio打包aar和jar。

android studio如何打jar包

目前通過android studio打包jar,基本有兩種方式:

  • 建立module,然後編譯完成之後 module中自動的建立了相關的jar檔案

這裡寫圖片描述

這裡的classes.jar就是module相關的jar包,我們可以將其更改名稱之後拷貝到app下的lib目錄中;

  • 另一種方式其實跟第一種方式是一樣的,只不過其是通過gradle指令碼實現的

app為我們的主工程,librarydemo是我們要將其生成jar包的model.
在librarydemo中加入如下程式碼:

task makeJar(type: Copy) {
    delete 'build/libs/mysdk.jar'
    from('build/intermediates/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'mysdk.jar')
}

makeJar.dependsOn(build)
//在終端執行生成JAR包
// gradlew makeJar

在Terminal中鍵入 gradlew makeJar 回車看到如下所示就OK了:
這裡寫圖片描述

當然在主工程App的build中要加入librarys 這個依賴model:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile project(':librarys')
}

(二)android studio如何打aar包
其實打aar包和jar包類似,只不過是其目錄變化了而已:

這裡寫圖片描述

可以看到同樣需要其作為library,而且其生成的目錄為:/build/output/aar/

好了,以上就是如何通過androd studio打包apk,aar和jar的相關內容了。

相關文章