Android 打包 APK,AAR,JAR

文本我們將講解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
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

可以發現這裏的buildType中配置了release包和debug包,以及各自的簽名信息:

singingConfig singingConfigs.release
  • 1

更加具體的簽名信息配置在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"
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

這樣我們就配置好了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
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 添加新的簽名信息
debug01 {
            storeFile file("YANGKUN.keystore")
            storePassword "123456"
            keyAlias "YANGKUN.keystore"
            keyPassword "123456"
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 配置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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在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')
}
  • 1
  • 2
  • 3
  • 4
  • 5

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

這裏寫圖片描述

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章