安卓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