引入
在自己為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)題:
- 在APP中使用時(shí)需要把JAR工程中的依賴在APP中再寫一次;
- 實(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)題。
那么使用IDEA的Build 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 JAR和copy 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就可以用了。