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]作用域安全 [2]惰性載入 [3]函數綁定 前面的話 函數對任何一門語言來說都是一個核心的概念,在javascript中更是如此。前面曾以深入理解函數系列的形式介紹了函數的相關內容,本文將再深入一步,介紹函數的3個高級技巧 技巧一:作用域安全的構造函數 構造函數其實就是一個使用new ...
  • 首先看演示: FrameLayout框架佈局是最簡單的佈局形式。所有添加到這個佈局中的視圖都以層疊的方式顯示。第一個添加的控制項被放在最底層,最後一個添加到框架佈局中的視圖顯示在最頂層,上一層的控制項會覆蓋下一層的控制項。這種顯示方式有些類似於堆棧。 當我們往裡面添加組件的時候,所有的組件都會放置於這塊區 ...
  • 這個類提供了對於音頻文件的描述An audio stream is a continuous series of data that represents a sound, such as a song.A channel is a discrete track of monophonic audi... ...
  • 幀動畫——FrameAnimation 將一系列圖片有序播放,形成動畫的效果。其本質是一個Drawable,是一系列圖片的集合,本身可以當做一個圖片一樣使用 在Drawable文件夾下,創建animation-list為根節點的資源文件 <animation-list android:oneshot ...
  • PhotoKit 是ios9以後取代 ALAssetLibrary 的一種新框架,註意是框架不是頭文件,不是可掉出來的系統名只是一個框架名,代表一個框架種類。所以你在xcode中你輸photoKit什麼也沒有,當你輸了n遍試了n遍之後你會發現什麼有沒有。納里什麼鬼,呵呵你被坑了吧。那麼大家就要問了怎 ...
  • 在程式開發中,數據層永遠是程式的核心結構之一。我們將現實事物進行抽象,使之變成一個個數據。對這些數據的加工處理是代碼中能體現技術水平的一大模塊,比如數據的請求、解析、緩存、持久化等等。適當的對數據進行持久化存儲可以實現應用的離線功能,以此提高用戶體驗。在iOS開發中,蘋果提供了四種持久化方案供我們選 ...
  • iOS7以後,導航控制器,自帶了從屏幕左邊緣右滑返回的手勢功能。 但是,如果自定義了導航欄返回按鈕,這項功能就失效了,需要自行實現。又如果需要修改手勢觸發範圍,還是需要自行實現。 廣泛應用的一種實現方案是,採用私有變數和Api,完成手勢交互和返回功能,自定義手勢觸發條件和額外功能。 另一種實現方案是 ...
  • 生命周期:因為Presenter是View創建的,我們需要確保完全地理解View的生命周期,特別是因為它將最有可能去處理狀態更新和非同步數據。舉個例子,每一個Presenter應該在View destroyed的情況下有一個取消非同步任務的方式,或者應該在用戶暫停或者恢復視圖事件時重置到原始狀態等等。最 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...