Android項目實戰(二十四):項目包成jar文件,並且將工程中引用的jar一起打入新的jar文件中

来源:http://www.cnblogs.com/xqxacm/archive/2016/09/21/5893400.html
-Advertisement-
Play Games

前言: 關於.jar文件: 平時我們Android項目開發中經常會用到第三方的.jar文件。 其實.jar文件就是一個類似.zip文件的壓縮包,裡面包含了一些源代碼,註意的是.jar不包含資源文件(res、圖片等) 一、首先學習如何在Android studio中將android項目打成.jar文件 ...


前言:

關於.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文件。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、SpannableString、SpannableStringBuilder與String的關係 首先SpannableString、SpannableStringBuilder基本上與String差不多,也是用來存儲字元串,但它們倆的特殊就在於有一個SetSpan()函數,能給這些存儲的Str... ...
  • Android Weekly Issue #223 中文筆記, 本期內容包括: Offline時間戳處理; Accessibility的安全問題可能並不是個問題; 如何在單元測試和UI測試之間共用代碼; Android中的指紋認證; 編譯時間Kotlin vs Java; MVP結合RxJava,... ...
  • 前言: 單挑Android項目,最近即時通訊用到環信,集成sdk的時候 官方有一句 即:混淆規則。 自己沒寫過關於混淆打包的文章,在此補上。 下麵瞭解Android studio環境下 項目混淆打包的操作。 一、打包: 即 將Android項目生成.apk文件,讓用戶去安裝。 1、工具欄 Build ...
  • 官方地址: http://global.18wifibank.com/ github: https://github.com/yibawifi/wifisdk ...
  • 上一篇記錄了利用系統私有變數和方法實現右滑返回手勢功能:http://www.cnblogs.com/ALongWay/p/5893515.html 這篇繼續記錄另一種方案:利用UINavigationController的delegate方法。 核心代理方法有如下兩個: 第一個代理方法,要求在視圖 ...
  • Fragment是activity的界面中的一部分或一種行為。可以把多個Fragment組合到一個activity中來創建一個多界面並且可以在多個activity中重用一個Fragment。可以把Fragment任務模塊化的一段activity,它具有自己的生命周期,接收它自己的事件,並可以在act ...
  • runtime簡介 RunTime簡稱運行時。OC就是 ,也就是在運行時候的一些機制,其中最主要的是消息機制。 對於C語言, 。 對於OC的函數,屬於 ,在編譯的時候並不能決定真正調用哪個函數,只有在真正運行的時候才會根據函數的名稱找到對應的函數來調用。 事實證明: 在編譯階段,OC可以 ,即使這個 ...
  • 所謂"番外特別篇",就是系列文章更新期間內,隨機插入的一篇文章.目前我正在更新的系列文章是 [實現iOS圖片等資源文件的熱更新化](https://github.com/ios122/ios_assets_hot_update).但是,這兩天,被一個自己App中詭異的相冊讀取的Bug困擾,暫時延緩了... ...
一周排行
    -Advertisement-
    Play Games
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RTxxx系列MCU的新品i.MXRT700。 四年前恩智浦官宣了面向下一代智能穿戴設備的 i.MXRT500 系列,這個系列在智能手錶領域大獲成功,無數大小品牌智能手錶製造商(谷歌、佳明Garmin、華米Amazfit ...
  • 正點原子《ESP32物聯網項目實戰》全新培訓課程上線啦!正點原子工程師手把手教你學!通過多個項目實戰,掌握ESP32物聯網項目的開發! 一、課程介紹 本課程圍繞物聯網實戰項目展開教學,內容循序漸進,涵蓋了環境搭建、編程軟體使用、模塊基礎驅動、物聯網基礎知識和多個實戰項目等等。在物聯網項目的選擇上,我 ...
  • 執行 `arch -x86_64 zsh`報`arch: posix_spawnp: zsh: Bad CPU type in executable` 原因: 未安裝rosetta 執行`softwareupdate --install-rosetta`安裝rosetta報 ``` Package... ...
  • 此文檔的作用為:提供一個學習方法、例舉出一些有學習意義的學習視頻和文檔,供0基礎的你參考和學習。此處的學習可能有助於提升對於嵌入式整體的興趣和概念的瞭解。 ...
  • 一、簡介 zabbix是一個基於[WEB]界面的提供分散式[系統監視]以及網路監視功能的企業級的開源解決方案。zabbix能監視各種網路參數,保證[伺服器系統]的安全運營;並提供靈活的通知機制以讓[系統管理員]快速定位/解決存在的各種問題。 二、安裝配置 1. 關閉防火牆和selinux syste ...
  • C語言里提供了一組工具,他們叫做標準函數;每個標準函數用來解決一個常見問題 不同標準函數名字不同,可以在程式里編寫函數調用語句使用標準函數 printf標準函數可以用來把程式里的數字顯示在終端視窗里 為了使用這個標準函數需要包含stdio.h頭文件 可以在雙引號里使用占位符(%+類型)把數字轉移到雙 ...
  • scanf標準函數可以從鍵盤得到數字並記錄到存儲區里,為了使用這個標準函數需要包含stdio.h這個頭文件 在scanf函數調用語句里應該使用存儲區的地址表示存儲區;雙引號里使用占位符表示存儲區的類型, 在scanf函數調用語句里儘量不要寫不是占位符的內容,如果用戶輸入的格式和程式要求的格式不同 程 ...
  • 本文介紹在Windows電腦中,下載、配置MobaXterm軟體,從而連接、操作遠程伺服器的方法。 因為是在Windows操作系統的電腦中連接伺服器,所以建議使用MobaXterm、PuTTY等可視化的遠程電腦管理軟體,來實現對伺服器的連接與後續相關操作。在本文中,我們就選擇基於MobaXterm ...
  • #版本信息: NAME="openEuler"VERSION="22.03 (LTS-SP4)" #網卡信息: cat /etc/sysconfig/network-scripts/ifcfg-enp125s0f1TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY= ...
  • 位操作符: 可以直接操作二進位數位的內容;~是一個單目位操作符,它可以根據一個數字計算另外一個數字,這兩個數字所有二進位數位的內容都不同(按位取反),使用的時候這個符號應該寫在數字前面 雙目位操作符:包括按位與(&),按位或(|)以及按位異或(^),他們都可以把兩個數字對應二進位數位的內容做計算。 ...