把依賴庫(kù)打包進(jìn)JAR中的方法

引入

在自己為Android APP編寫需要的Java library的時(shí)候,往往會(huì)在library中依賴第三方的庫(kù),舉個(gè)例子:
做了一個(gè)賬號(hào)管理的library,其中由于需要使用http連接,所以library工程中有以下依賴

implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'commons-validator:commons-validator:1.6'
implementation 'io.reactivex.rxjava2:rxjava:2.1.10'

在功能開(kāi)發(fā)完成,編譯成class文件以后,如果只是使用jar來(lái)打包我們自己source file生成的class文件

jar cvf sample.jar -C sample_lib/build/intermediates/classes/release

問(wèn)題

當(dāng)把這樣生成JAR file放入APP工程后,由于JAR中沒(méi)有對(duì)應(yīng)的依賴,會(huì)有以下問(wèn)題:

  1. 在APP中使用時(shí)需要把JAR工程中的依賴在APP中再寫一次;
  2. 實(shí)測(cè)哪怕添加上了依賴,compile可以過(guò)以后,在運(yùn)行時(shí)會(huì)出現(xiàn)找不到類的runtime error;

那么在生成JAR包時(shí),把對(duì)應(yīng)library的依賴也一同打包進(jìn)JAR是比較好的解法。

解決方案 - 使用IDEA

使用Android Studio沒(méi)有找到現(xiàn)成的方法,目前對(duì)gradle也不夠熟悉,沒(méi)法自己動(dòng)手通過(guò)編寫gradle task來(lái)解決問(wèn)題。
那么使用IDEABuild Artifacts就成為一個(gè)很好的方法。

步驟

初始的時(shí)候,Build -> Build Artifacts是灰色的。

disabled-build-artifacts.jpg

此時(shí)需要在File -> Project Structure中進(jìn)行設(shè)置:
setting.jpg

create_JAR_from_module.jpg

不太清楚extract to the target JARcopy to the output diretory and link via manifest的區(qū)別,就直接采用默認(rèn)的第一項(xiàng),后續(xù)再來(lái)study差異。
繼續(xù)設(shè)置要要生成的JAR的名字后,選擇好要把哪一個(gè)module來(lái)打包JAR。
jar_name_and_module_select.jpg

設(shè)置完成后,Build -> Build Artifacts就已經(jīng)可用了
build_artifacts_enabled.jpg

直接通過(guò)這個(gè)菜單進(jìn)行JAR生成,然后在之前設(shè)置好的目錄下(設(shè)置JAR包名的步驟中)去找對(duì)應(yīng)的JAR就可以用了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,070評(píng)論 25 709
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,012評(píng)論 2 59
  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,157評(píng)論 1 62
  • 隧道視野,之前說(shuō)的不多,但坐井觀天你一定很熟悉!信息匱乏或者思考不全面是引發(fā)“隧道視野”的根本原因。置身...
    蜻蜓喵閱讀 253評(píng)論 1 2

友情鏈接更多精彩內(nèi)容