Android工程打包成jar檔案,並且將工程中引用的jar一起打入新的jar檔案中,androidjar
前言:
關於.jar檔案:
平時我們Android項目開發中經常會用到第三方的.jar檔案。
其實.jar檔案就是一個類似.zip檔案的壓縮包,裡麵包含了一些原始碼,注意的是.jar不包含資源檔(res、圖片等)
---------------------------------------------------------------------------------------------------------
一、首先學習如何在Android studio中將android項目打成.jar檔案
1、在app目錄下的 build.gradle檔案中 添加如下紅色字型代碼:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
task makeJar(type: Copy) {
delete 'build/libs/mysdk.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'myjar.jar')
}
makeJar.dependsOn(build)
2、產生.jar檔案
在Android studio 的下面有 Terminal 選項,可以看到這個命令列的形式
我們在此 輸入 “gradle makeJar” 然後斷行符號。等待片刻,變會產生 .jar檔案
該.jar檔案的地址為:
build/intermediates/bundles/release/
至此,我們就可以將產生的.jar放在別的項目中使用了。
二、深入探索
問題:
存在這麼一種情況:
我們要打包的android項目中已經引用了一個或多個第三方.jar檔案。那麼我們按上面的方法打成.jar檔案,在引入到別的項目中使用中,
會發現出現錯誤:
NoClassDefFoundError
定位到錯誤碼位置,會發現 產生.jar檔案的原始android項目中引用的第三方.jar檔案中的類找不到。
這裡可以猜測,使用上述方法將android項目打成.jar檔案的過程中,並沒有將android項目原來引用的第三方.jar檔案也一起打入到新的.jar檔案中。
可以測試一下,將android項目打成的.jar檔案解壓縮,會發現只有java代碼相關檔案,而沒有原來android項目中引用的第三方.jar檔案
解決方案:
1、首先 問題產生的原因就是 產生.jar檔案的android項目原先引用的第三方.jar檔案沒有被打入到 新的.jar檔案中
那麼我們想:怎麼在android項目打成.jar檔案的時候 順帶把 android項目引用的第三方.jar文化也一併打入到新的.jar檔案?
試了幾天,目前沒有找到解決辦法。。。此路不通
2、既然android項目原來引用的.jar檔案打不進 要產生的.jar檔案中去,我們是否可以手動的將android項目引用的第三方項目整合到android項目打成的.jar檔案中去?
即 將android項目打成的.jar檔案和android項目自身引用的.jar檔案合并成一個.jar檔案
網上查詢了一番: 可以使用 ANT 工具實現 將兩個或多個.jar檔案合并成一個.jar檔案
Apache Ant是一個基於Java的產生工具。據最初的創始人James Duncan Davidson的介紹,這個工具的名稱是another neat tool(另一個整潔的工具)的首字母的縮寫。
實現步驟:
(1)、下載ANT,這個網上百度一堆
(2)、配置環境變數
(3)、檢測是否配置成功
點擊 開始 -> 運行 -> 輸入cmd
開啟命令視窗,
輸入如下命令:ant
如果出現如下內容,說明安裝成功:
Buildfile: build.xml does not exist!
Build failed
注意:因為ant預設運行build.xml檔案,這個檔案需要我們建立。
如果不想命名為build.xml,運行時可以使用 ant -buildfile test.xml 命令指明要啟動並執行構建檔案。
(4)、編輯xml檔案,命名隨意,這裡命名build.xml
開啟檔案編輯:
<?xml version="1.0" encoding="utf-8"?><project name="hosa" //不用改 basedir="H:\soft\jar" //產生的jar存放的位置,並且將要合并的所有.jar檔案也放在該目錄下 default="makeSuperJar" > //不用改 <target name="makeSuperJar" //不用改 description="description" > //不用改 <jar destfile="standingbanlanceFB.jar" > //合并後的jar檔案的名稱 <zipfileset src="avoscloud-sdk-v3.14.5.jar" /> // <zipfileset >標籤的都是要參與合并的子jar包 <zipfileset src="fastjson.jar" /> <zipfileset src="okhttp-2.6.0-leancloud.jar" /> <zipfileset src="standingbanlance.jar" /> <zipfileset src="okio-1.6.0-leancloud.jar" /> </jar> </target></project>
(5)、命令列執行合併作業,輸入第一行命令,紅色部分是我們編輯的build.xml檔案的地址
(6)、開啟build.xml檔案中 basedir="H:\soft\jar" 該目錄,即可看到合并後的jar檔案。