今天周末,也是剛起床,昨天晚上睡覺比較晚一點(diǎn)鐘才睡,為了就是實(shí)現(xiàn)一個(gè)SDK打包問題,雖然不是上班時(shí)間,但由于負(fù)責(zé)2項(xiàng)項(xiàng)目的研發(fā),用工作的時(shí)間明顯不夠用,而且這也是我第一次接觸到SDK開發(fā),內(nèi)心是有點(diǎn)抵觸的,但為了使自己能夠更加優(yōu)秀,就開始學(xué)習(xí)了SDK開發(fā)的基本的思路和知識(shí)點(diǎn)。
其實(shí)SDK開發(fā)和app的開發(fā)都差不多,主要的區(qū)別在于SDK開發(fā)需要集成。集成也有兩種方式一種是打包成jar包,另外一種是打包成aar文件,區(qū)別在于jar包的文件只有class類不包含資源文件,aar包含資源文件。
對(duì)于我們聊天的SDK里面是有聊天頁面的,所以我這里的打包方式是基于aar打包的方式
step one
1.打開gradle application改為library ?applicationId刪除。
2.打開清單文件。把紅框中的內(nèi)容去掉

3.選擇release 方法步驟如下圖

4.點(diǎn)擊androidstudio右上角的gradle 步驟如下 點(diǎn)擊 assembleRelease?

5.編譯成功后 找到aar

到這里aar的打包流程差不多已經(jīng)結(jié)束了,但如果你認(rèn)為這樣會(huì)就能成功,那還不如去百度搜打包aar一大把的資料,我還有必要寫這篇文章嗎?
答案顯然不是,當(dāng)你打包成功使用一個(gè)測(cè)試的項(xiàng)目進(jìn)行測(cè)試的時(shí)候你會(huì)發(fā)現(xiàn)很有問題。主要問題就是涉及到第三方依賴的問題,你會(huì)發(fā)現(xiàn),當(dāng)你引用SDK接口運(yùn)行的時(shí)候找不到aar中引用的三方庫,為什么呢?原因在于打包aar只是單純的引用library項(xiàng)目中的class和資源,對(duì)于需要的第三方依賴是沒有引入到aar中的,一種簡(jiǎn)單的方法就是在你的項(xiàng)目gradle中重新引入依賴,這樣是可以運(yùn)行的,但這本身就是一個(gè)問題,所以不推薦使用這種簡(jiǎn)單粗暴的方法
具體的方法我現(xiàn)在只知道兩種如果有小伙伴知道其他方法的可以交流一起學(xué)習(xí)成長(zhǎng),主要如下
一種是直接把三方庫作為jar包導(dǎo)入到你的SDK中,如果有很多的引入呢都用jar包 ?貌似也可以。但我這里不是這樣處理的,如果你有興趣的話可以嘗試一下,也可以跟我交流你是怎樣引入以及打包成SDK并能夠正常運(yùn)行的
還有一種就是使用maven,這種方式在很多地方都用到過,對(duì)于aar中有第三方依賴這種方法很實(shí)用,也很簡(jiǎn)單,雖然在實(shí)踐的過程中花費(fèi)了我大量的時(shí)間畢竟是第一次接觸SDK,通過這篇文章能夠讓更多的朋友少走彎路,節(jié)省大量時(shí)間,如果對(duì)你有幫助的話。記得給個(gè)小贊喲,閑話不多講,就是干
打開你的SDK。gradle文件配置如下
第一步

第二步 implementation'com.novoda:bintray-release:0.2.7'
點(diǎn)擊Android studio右上方的同步一下。 下面的重點(diǎn)來了 groupId 中的xxx是你公司的名稱這個(gè)對(duì)于程序員的你來說應(yīng)該都知道
下面這段放在依賴三方的下面。然后再點(diǎn)擊同步

publishing { publications { maven(MavenPublication) { groupId 'com.xxx.im' //You can either define these here or get them from project conf elsewhere artifactId 'IMLib' version '0.0.2-SNAPSHOT' artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish //generate pom nodes for dependencies pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') configurations.implementation.allDependencies.each { dependency -> if(!"unspecified".equals(dependenciesNode.name)){ def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', dependency.group) dependencyNode.appendNode('artifactId', dependency.name) dependencyNode.appendNode('version', dependency.version) } } } } } //publish to filesystem repo repositories{ maven { url "$buildDir/repo" } }}
同步完成后,點(diǎn)擊Android studio的右上角的grandle你會(huì)找到如下圖所示

點(diǎn)擊publish 編譯完成后,你會(huì)發(fā)現(xiàn)我們想要的aar文件和pom文件,簡(jiǎn)單介紹一下pom文件,這個(gè)文件就是我們的第三方引用文件。我們引用三方文件有兩種一種是compile 現(xiàn)在多用implementation或者api 區(qū)別可以在網(wǎng)上找這種很多的,當(dāng)你用這種方式的時(shí)候其實(shí)就是引用的jar包可以在External Libraries中找到,還有一種方式就是使用pom的方式引用這種主要是在進(jìn)行SDK開發(fā)的時(shí)候用的比較多,這個(gè)也是我第一次遇到

打開pom文件進(jìn)行查看你會(huì)發(fā)現(xiàn)你引用的三方的文件名稱版本號(hào)等

這樣打包SDK就算完成了,如果你有私服的話也可以把生成的文件放入到私服中,別人使用你的SDK的時(shí)候他也可以通過implements的方式來引用你的SDK了
打包完成。如何使用呢。很簡(jiǎn)單。在你的項(xiàng)目的根gradle中加入本地路徑

項(xiàng)目gradle中加入
implementation ('com.zhoafan.im:IMLib:0.0.2-SNAPSHOT@aar'){transitive=true}就可以了。?transitive=true的作用就是引用三方依賴pom文件
接入接口運(yùn)行 還是會(huì)出現(xiàn)一些問題 如你引用第三方資源失敗 主要是你沒有在根gradle中引入三方的相關(guān)庫如。?maven{url'https://jitpack.io'}等等
還有就是pom中需要把implementation'com.novoda:bintray-release:0.2.7依賴去掉 還有就是不相關(guān)的引用刪掉 ? 我出現(xiàn)的引用出現(xiàn)的問題也就是這兩種問題,如果對(duì)你有幫助 記得點(diǎn)個(gè)贊?? ?如有更好的關(guān)于SDK開發(fā)的文檔和資料也希望留言。如還是不行記得留言。還有就是這篇文章主要是SDK打包到本地使用 ?如有時(shí)間再來一篇關(guān)于上傳私服引用的SDK開發(fā)
祝大家周末愉快,也快到元旦了。提前祝大家元旦快樂!?。?/p>
最近有讀者問我如何將sdk生成的文件上傳到私服,為此做了一篇文章來講解介紹了下,如果有讀者對(duì)上傳到服務(wù)器有疑問的??梢圆榭次业牧硗庖黄P(guān)于如何上傳到服務(wù)器的文章http://www.itdecent.cn/p/68d2d4e217b5