天天看點

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

jar和aar在Android Studio中的生成和使用

目前環境

Android Studio3.0

jdk1.8

認識jar和aar

jar:java application resource 隻包含class檔案和清單檔案

aar:Android application resource 包含class檔案和其他所有的資源檔案

如此便一目了然了,如果你的庫需要資源檔案的話,jar是滿足不了的,隻能使用aar。

生成jar和aar

  1. 建立工程
  2. 建立moudle(library類型)

    建立之後我們看下moudle的目錄,主要是在build-intermediates這層目錄下!

    jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用
  3. 編譯一下項目,此時再來看moudle的目錄
    jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

經過以上簡單的三步,已經看到了我們的jar和aar的生成過程和存放目錄。是不是很簡單,繼續往下看!

4. 用jd-jui打開我們的jar,如圖:

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

哈哈,我們什麼也沒寫。接下來我們在myLibTest這個moudle裡邊編寫一個檔案JarTest,再編譯得到jar,繼續打開這個jar

編寫的内容是:

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

再次打開jar後是這樣的:

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

這次終于看到内容了,但或許你又會說,BuildConfig這是幹嘛的,都沒用,不想要。我們再來看一個目錄:

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

編譯之後,所有的檔案都會生成對應的.class檔案,我們的jar包也就是将這些class檔案都打進去了。

問題1:像R.class和BuildConfig.class這些沒用的不需要打進去。那麼能否設定過濾。

問題2:這個jar的名字能否自己指定,以及存放的路徑能否自己指定

針對以上問題,我們來了解一下修改gradle來生成jar包

gradle代碼示例:

//Copy類型
    task makeJar(type: Copy) {
        //删除存在的
        delete 'build/libs/myLib.jar'
        //設定要拷貝的檔案的目錄。debug or release
        from('build/intermediates/bundles/debug/')
        //拷貝到的那個目錄
        into('build/libs/')
        //将classes.jar放入build/libs/目錄下
        //include ,exclude參數來設定過濾
        include('classes.jar')
        exclude('**/R.class')
        exclude('**/BuildConfig.class')
        exclude { it.name.startsWith('R$')}
        //重命名
        rename ('classes.jar', 'myLib.jar')
    }
    //生成jar
    makeJar.dependsOn(build)
           

接下來在我們的指令終端Terminal輸入gradlew makeJar執行一下就ok了。然後再來看我們的目錄結構:

jar和aar在Android Studio中的生成和使用jar和aar在Android Studio中的生成和使用

如代碼中所述,在build下多出了libs目錄,我們重新命名後的jar包就在這個目錄下。

jar和aar的使用

  1. jar的使用

    方法1:将jar拷貝到app中的libs,右鍵add as library選擇app即可。然後在你的gradle中會增加上依賴的那句話。

    方法2:通過studio的試圖添加,步驟自行百度谷歌

  2. aar的使用

    同樣,還是拷貝到app的libs下。然後在gradle中配置如下

//指定在libs目錄下的檔案
repositories {
     flatDir {
      dirs 'libs'
     }
}
//添加依賴
dependencies {
    compile(name: 'aar的名字', ext: 'aar')
}
           

ps:如果有引入其他的第三方lib,是打不進aar中的。是以如果有引用的話,app中除了aar外的其他第三方庫也需要拷貝過來引用上!

繼續閱讀