您好,登錄后才能下訂單哦!
今天小編給大家分享一下怎么在Android studio中將Module打包成Jar的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
一、默認自動生成的 jar 包
眾所周知 android studio 會在library所依賴的 app運行 或 build 之后自動生成 jar 包,路徑為 Module根目錄/build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這個問題。
注意:
若發(fā)現(xiàn) Android Studio 項目 bundle 文件夾下沒有 release目錄,可能是沒有將 module 添加到主 module 依賴中。
方式1:主module右鍵 --> 倒數(shù)第二個Open Module Setting--> 上面最后一個選項Dependencies-->右邊綠色加號-->Module dependency......然后確定
方式2:主Module的gradle的dependencies(平時添加第三方庫的地方)中加上 compile project(':lib-zxing')
二、自定義生成 jar 包
首先,需要將待打包 module 項目中的 build.gradld 文件進行修改,如下圖:
其次,在 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/') //從這個目錄下取出默認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' //從哪里打包class文件 from('build/intermediates/bundles/default/') //打包到jar后的目錄結構 into('build/') //去掉不需要打包的目錄和文件 exclude('test/', 'BuildConfig.class', 'R.class') //去掉R開頭的文件 exclude{it.name.startsWith('R');} } makeJar.dependsOn(clearJar, build)
注意:
以上配置信息要與 android {…….} 配置的腳本成平級關系。
其中 _BASENAME = "TestJar"; _VERSION = "_V1.0"; 是定義生成 jar 包的名字為TestJar_V1.0.jar。
配置好以后就可以編譯jar包了,有兩種方式:
方式 A :點擊 Android Studio 右側(一般在這個位置)的 Gradle 面板,在項目或者該類庫的目錄中找到 Tasks -> other -> makeJar 命令,雙擊這個makeJar之后等一會就會編譯好jar包?! ?/p>
打包成功后:在配置的指定目錄下生成jar包
方式 B :通過 cmd 命令行,在項目根目錄下,執(zhí)行 gradlew makeJar 命令,看到編譯完成的信息以后就OK了,也能生成一樣的jar包,和直接使用①中的方式是等價的?! ?/p>
注意:使用此方式前要配置好 gradle 的“ 環(huán)境變量 ”,否則直接在項目根目錄下找不到這個命令。使用 cmd 比較費勁,不推薦?! ?/p>
方式 C :在 Android Studio 終端窗口中輸入 gradlew makeJar 命令?! ?/p>
打包成功如下圖:
打包成功后:在配置的指定目錄下生成jar包
注意:
問題1:
對于以上配置 form 默認 jar 包部分,在用目錄是 from('build/intermediates/bundles/release/') ,注意粗體部分,最初我也是按照這個目錄寫的,確實沒問題。但后來,也就是Android Studio 更新到2.3以后,發(fā)現(xiàn)這個目錄沒有了,取而代之的是 default 和 debug 目錄,debug目錄之前也是有的,沒有變化,只是原來的release目錄被現(xiàn)在的default目錄代替了。這導致我后來生成jar包的時候始終沒有找到jar包,報上圖所示錯誤。
原因就是沒有了 release 目錄,找不到默認的 classes.jar 文件,所以也就沒有生成自定義名字的jar包,改為 default 或者 debug 目錄以后就能正常生成jar包了,要注意這點變化。
問題2
Execution failed for task ':mylibrary:lint'.
> Lint found errors in the project; aborting build.
解決在 build.gradle 文件中,加入下面的代碼塊(注意代碼塊所在的位置),重新執(zhí)行 gradlew makeJar 命令。
android { lintOptions { abortOnError false } ... }
最后注意:
將被嵌入的應用打包成 jar 包,但是這樣的方式有局限性,無法將被嵌入的應用所使用的資源性文件一起打包。下面介紹 aar 打包方式。
三、直接使用 aar 包
將被嵌入的應用打包成 aar 包,這也是 Android Studio 的一種新特性,可以將應用所使用的資源性文件一起打包。編譯即可打包生成 aar 包,而且也不用擔心漏掉資源問題。
如果Project 中 Module 是一個應用,則在 Module 的 build.gradle 文件中定義屬性為:apply plugin: 'com.android.application';而如果 Mudule 是一個被引用的依賴 lib 庫的話,則在 Module 的 build.gradle 文件中定義屬性為:apply plugin: 'com.android.library;所以當我們將應用 Module 打包出 aar 文件的時候,需要修改類型屬性。正常情況下,直接重新編譯 Module,生成的 aar 包在 Module 根目錄的/build/outputs/aar/,如下圖:
下面介紹將 aar 包添加到其他 Android 工程:
首先,將 aar 包復制到 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') }
以上就是“怎么在Android studio中將Module打包成Jar”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。