如何在Androidstudio中將Module打包成Jar-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)如何在Android studio中將Module打包成Jar,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的忠縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一、默認(rèn)自動(dòng)生成的 jar 包

眾所周知 android studio 會(huì)在library所依賴的 app運(yùn)行 或 build 之后自動(dòng)生成 jar 包,路徑為 Module根目錄/build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這個(gè)問題。

注意:

若發(fā)現(xiàn) Android Studio 項(xiàng)目 bundle 文件夾下沒有 release目錄,可能是沒有將 module 添加到主 module 依賴中。

方式1:主module右鍵 --> 倒數(shù)第二個(gè)Open Module Setting--> 上面最后一個(gè)選項(xiàng)Dependencies-->右邊綠色加號(hào)-->Module dependency......然后確定

方式2:主Module的gradle的dependencies(平時(shí)添加第三方庫(kù)的地方)中加上 compile project(':lib-zxing')

二、自定義生成 jar 包

首先,需要將待打包 module 項(xiàng)目中的 build.gradld 文件進(jìn)行修改,如下圖:

如何在Android studio中將Module打包成Jar

其次,在 build.gradle 文件中加入如下代碼:

方式一:

def _BASENAME = "TestJar";
def _VERSION = "_V1.0";
def _DestinationPath = "build"; //生成jar包的位置
def zipFile = file('build/intermediates/bundles/default/classes.jar'); //待打包文件位置

task deleteBuild(type:Delete){
  delete _DestinationPath + _BASENAME + _VERSION + ".jar"
}

task makeJar(type:Jar){
  from zipTree(zipFile)
  from fileTree(dir:'src/main',includes:['assets/**']) //將assets目錄打入jar包 
  baseName = _BASENAME + _VERSION
  destinationDir = file(_DestinationPath)
}

makeJar.dependsOn(deleteBuild, build)

方式二:打包的 jar 只有源代碼的.class 文件,不包含資源文件

task makeJar(type: Copy) {
  delete 'build/TestJar_V1.0.jar' //刪除之前的舊jar包
  from('build/intermediates/bundles/default/') //從這個(gè)目錄下取出默認(rèn)jar包
  into('build/') //將jar包輸出到指定目錄下
  include('classes.jar')
  rename('classes.jar', 'TestJar_V1.0.jar') //自定義jar包的名字
}
makeJar.dependsOn(build)

方式三:

task clearJar(type: Delete) {
  delete 'build/TestJar_V1.0.jar' //jar包的名字,隨便命名 
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
  //指定生成的jar名 
  baseName 'TestJar_V1.0'
  //從哪里打包c(diǎn)lass文件 
  from('build/intermediates/bundles/default/')
  //打包到j(luò)ar后的目錄結(jié)構(gòu) 
  into('build/')
  //去掉不需要打包的目錄和文件 
  exclude('test/', 'BuildConfig.class', 'R.class')
  //去掉R開頭的文件 
  exclude{it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)

注意:

以上配置信息要與 android {…….} 配置的腳本成平級(jí)關(guān)系。

其中 _BASENAME = "TestJar"; _VERSION = "_V1.0"; 是定義生成 jar 包的名字為TestJar_V1.0.jar。

配置好以后就可以編譯jar包了,有兩種方式:

方式 A :點(diǎn)擊 Android Studio 右側(cè)(一般在這個(gè)位置)的 Gradle 面板,在項(xiàng)目或者該類庫(kù)的目錄中找到 Tasks -> other -> makeJar 命令,雙擊這個(gè)makeJar之后等一會(huì)就會(huì)編譯好jar包?! ?/p>

如何在Android studio中將Module打包成Jar

打包成功后:在配置的指定目錄下生成jar包

如何在Android studio中將Module打包成Jar

方式 B :通過 cmd 命令行,在項(xiàng)目根目錄下,執(zhí)行 gradlew makeJar 命令,看到編譯完成的信息以后就OK了,也能生成一樣的jar包,和直接使用①中的方式是等價(jià)的?! ?/p>

注意:使用此方式前要配置好 gradle 的“ 環(huán)境變量 ”,否則直接在項(xiàng)目根目錄下找不到這個(gè)命令。使用 cmd 比較費(fèi)勁,不推薦。  

方式 C :在 Android Studio 終端窗口中輸入 gradlew makeJar 命令?! ?/p>

如何在Android studio中將Module打包成Jar

打包成功如下圖:

如何在Android studio中將Module打包成Jar

打包成功后:在配置的指定目錄下生成jar包

如何在Android studio中將Module打包成Jar

注意:

問題1:  

如何在Android studio中將Module打包成Jar    

對(duì)于以上配置 form 默認(rèn) jar 包部分,在用目錄是 from('build/intermediates/bundles/release/') ,注意粗體部分,最初我也是按照這個(gè)目錄寫的,確實(shí)沒問題。但后來,也就是Android Studio 更新到2.3以后,發(fā)現(xiàn)這個(gè)目錄沒有了,取而代之的是 default 和 debug 目錄,debug目錄之前也是有的,沒有變化,只是原來的release目錄被現(xiàn)在的default目錄代替了。這導(dǎo)致我后來生成jar包的時(shí)候始終沒有找到j(luò)ar包,報(bào)上圖所示錯(cuò)誤。

原因就是沒有了 release 目錄,找不到默認(rèn)的 classes.jar 文件,所以也就沒有生成自定義名字的jar包,改為 default 或者 debug 目錄以后就能正常生成jar包了,要注意這點(diǎn)變化。

問題2

Execution failed for task ':mylibrary:lint'.
> Lint found errors in the project; aborting build.

解決在 build.gradle 文件中,加入下面的代碼塊(注意代碼塊所在的位置),重新執(zhí)行 gradlew makeJar 命令。

android {
  lintOptions {
    abortOnError false
  }
  ...
}

最后注意:

將被嵌入的應(yīng)用打包成 jar 包,但是這樣的方式有局限性,無法將被嵌入的應(yīng)用所使用的資源性文件一起打包。下面介紹 aar 打包方式。

三、直接使用 aar 包 

將被嵌入的應(yīng)用打包成 aar 包,這也是 Android Studio 的一種新特性,可以將應(yīng)用所使用的資源性文件一起打包。編譯即可打包生成 aar 包,而且也不用擔(dān)心漏掉資源問題。

如果Project 中 Module 是一個(gè)應(yīng)用,則在 Module 的 build.gradle 文件中定義屬性為:apply plugin: 'com.android.application';而如果 Mudule 是一個(gè)被引用的依賴 lib 庫(kù)的話,則在 Module 的 build.gradle 文件中定義屬性為:apply plugin: 'com.android.library;所以當(dāng)我們將應(yīng)用 Module 打包出 aar 文件的時(shí)候,需要修改類型屬性。正常情況下,直接重新編譯 Module,生成的 aar 包在 Module 根目錄的/build/outputs/aar/,如下圖:

  如何在Android studio中將Module打包成Jar

下面介紹將 aar 包添加到其他 Android 工程:

首先,將 aar 包復(fù)制到 libs 目錄下  

其次,配置build.gradle文件:

A 在 android 中加入,如下:

repositories { 
  flatDir { 
    dirs 'libs' 
  } 
}

B 在 dependencies中加入 compile(name:lib-zxing-release', ext:'aar')

完整 build.gradle 文件如下:

apply plugin: 'com.android.application' 
 
android { 
  ...
  repositories { 
    flatDir { 
      dirs 'libs' 
    } 
  } 
} 
 
dependencies { 
  ...
  compile(name:'lib-zxing-release', ext:'aar') 
}

看完上述內(nèi)容,你們對(duì)如何在Android studio中將Module打包成Jar有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

標(biāo)題名稱:如何在Androidstudio中將Module打包成Jar-創(chuàng)新互聯(lián)
本文路徑:http://muchs.cn/article18/cshidp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)微信公眾號(hào)企業(yè)網(wǎng)站制作、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司