1. 程式人生 > >安卓studio打jar包,匯入第三方jar包,ant合併jar包

安卓studio打jar包,匯入第三方jar包,ant合併jar包

說明

此文件主要為了解決安卓打jar包問題,當我們使用了第三方jar包的時候,有時候需要將第三方jar包一塊打包到自己的jar包中,但是如果處理不好會出現“com.android.dx.cf.iface.ParseException: class name (…) does not match path(…)”問題,這個問題就是路徑配置有問題,為了解決這個問題我使用了ant來合併兩個jar包。如果我們的jar包給其他小夥伴使用,那麼我們jar包中使用的第三方jar包可能會和小夥伴專案中的jar衝突,比如gson包,我通過jarjar.jar來給第三方jar包改名,這樣就解決了重複的問題。

安卓studio打jar包配置

在當前moudle的builde檔案中配置:

android{
...
}
//打包任務
task makeJar(type: Jar) {
//指定生成的jar名
baseName 'pickup'
//從哪裡打包class檔案,你可以自己選擇,有的小夥伴是build/intermediates/bundles/release(debug)/
from('build/intermediates/classes/debug/com/x/x')
//from(project.zipTree('libs/mygson.jar')) //gson包
//打包到jar後的目錄結構
into('com/x/x/')
//去掉不需要打包的目錄和檔案
exclude('BuildConfig.class', 'R.class')
//去掉R$開頭的檔案
exclude { it.name.startsWith('R$') }
}
makeJar.dependsOn(clearJar, build)

在studio的Terminal執行gradlew makejar命令執行打jar包操作,成功之後build的libs下找到打完的jar包

注意: //from(project.zipTree(‘libs/mygson.jar’)) //gson包

我註釋的這一行要跟各位解釋一下,我本來使用jarjar.jar將gson改成了mygson,然後沒通過ant合併jar包,我想哪用這麼麻煩,就使用了兩個from來獲取class檔案,神奇的是Gradle真的可以打出來,使用也沒出現問題,但是給別人打包的時候就丟擲了com.android.dx.cf.iface.ParseException: class name (…) does not match path(…)這個bug。點開這種方法打出來的jar包,發現他的目錄結構的確是有問題,比如我的jar包結構是a.b.c,而mygson的包名是x.y.z,最後gson下的class類就成了 a.b.c.x.y.z 下的,但是gson下的類包名卻沒有變成這種,而是和原先一樣還是x.y.z,最後就導致了打包時產生了路徑不匹配的錯誤,於是我拋棄了Gradle合併打包的思路,轉投了ant。

使用jarjar來更改jar包包名以解決jar包衝突問題

這裡我們以 gson.jar 為例,在 gson.jar 包目錄下新建一個文字檔案,名字隨意,例如 rule.txt,寫入下面的內容。

rule com.google.gson.** [email protected]

上面寫的就是修改規則,我們將包名中的 gson 修改為 mygson。開啟命令列,輸入如下命令。

java -jar jarjar-1.4.jar process rule.txt gson.jar mygson.jar

命令執行完畢,同目錄下會多出一下 mygson.jar,這個就是修改包名之後的 jar 檔案,我們專案匯入這個 jar 包使用即可。

使用ant來合併兩個jar包

1.配置環境變數

注意將bin和lib目錄都加入到path中

2.構建build.xml檔案用於執行ant命令

<?xml version="1.0" encoding="utf-8"?>
<project
name="hosa"                            //不用改       ,注意:這裡的所有註釋在 build.xml檔案中 都不要有  是我為了給你們看解釋寫的
basedir="H:\soft\jar"                  //生成的jar存放的位置,並且將要合併的所有.jar檔案也放在該目錄下
default="makeSuperJar" >               //不用改

<target
    name="makeSuperJar"                //不用改  
    description="description" >        //不用改

   	<jar destfile="npickup.jar" >                    //合併後的jar檔案的名稱
    <zipfileset src="mygson.jar" />              // <zipfileset >標籤的都是要參與合併的子jar包
    <zipfileset src="pickup.jar" />
     </jar>
</target>
</project>

3.cmd執行合併命令

ant -buildfile E:\android\gson\build.xml

4.下面是參考資料,而我只是程式碼的搬運工: