簡體   English   中英

Android 存檔庫 (aar) 與標准 jar

[英]Android Archive Library (aar) vs standard jar

我一直在閱讀一些關於新采用 Gradle 作為 Android 應用程序的標准構建系統的文章。 好吧,來自標准 Java 開發,我通常依賴jar文件來構建我的項目。 然而似乎安卓也有AAR包,這是等同於Windows操作系統的dll文件,提到這里

首先,您必須意識到Android平台不允許應用程序級“共享庫”。 在“傳統”編程語言平台中,C、C++、Java 等等,我們都有這種共享運行時庫的機制。 (例如,Windows 上的 DLL、Unix 上的 DSO、JVM 上的 Jar 等)。 但是,在 Android 上,您不能這樣做,除非您是 Google 或手機制造商(請參閱下面的腳注 1)。 作為應用程序開發人員,這可能是一個基本限制。 在構建時和運行時“共享”或“重用”代碼是軟件工程實踐中非常重要的一部分。 由於上述限制,這在 Android 上相當困難(並非不可能,只是更難)。

但是,我對這個概念有些懷疑。 我的意思是,開發人員什么時候應該有興趣在其應用程序中包含aar依賴項? 此依賴項是否已收緊到某些 SDK 最低版本?

例如,在一個項目中,我訪問了一個 COM 端口,我使用NDK 預編譯的.so庫。 如果我想共享此實用程序,是否必須創建一個 aar?

AAR文件更類似於Jar不是Dll ,原因如下:

Dll可以在應用程序之間共享,因為AAR和 jar 與您的應用程序打包在一起。

AAR s 與Jar s:

JarAAR之間的主要區別在於AAR包含layouts, drawables等資源。這使得創建獨立的可視組件變得更加容易。 例如,如果您有多個使用相同登錄屏幕的應用程序,使用Jar可以共享類,但不能共享布局、樣式等,您仍然必須復制它們。 有了AAR一切都捆綁在一個整潔的包中。

總之, AAR是朝着正確方向邁出的一大步。

筆記:
使用apk-lib進行了類似的嘗試,但它們現在已經過時了,因為AAR更好。

聲明“ Jar 和 AAR 之間的主要區別在於 AAR 包括布局、可繪制等資源”不符合 JAR 文件規范,因此不是事實。 根據JAR 文件規范

JAR 文件是一種基於流行的 ZIP 文件格式的文件格式,用於將多個文件聚合為一個。 JAR 文件本質上是一個 zip 文件,其中包含一個可選的 META-INF 目錄。

如您所見,沒有內容限制禁止在 JAR 文件中包含布局、可繪制等資源。 有關更多詳細信息,請參閱 The Java® Virtual Machine Specification 的文章 5.3“創建和加載”。

所以關於 Android Archive Library (aar) vs 標准 jar 的問題。 答案取決於您使用的是什么構建工具。

如果您使用 Android Studio 作為構建工具(分別作為項目組織者),您絕對最好使用 *.aar 文件在 Android 項目之間共享封裝的資源。 AAR 文件格式是 Android Studio 構建的一部分,正如這里的其他評論中所評論的那樣,其用戶界面支持 Android 庫的 aar 格式。

但是除了 Android Studio 之外,世界其他地方都不知道 aar 文件(工件)是什么東西。 例如,如果您的 Android 構建基於 Maven,則資源共享的首選文件將是 jar,因為這是本機 Maven java 項目工件,並且沒有限制在標准 jar 文件中放置什么。 此外,還有一種方法可以解釋 Maven 任何文件格式,通過使用具有新組件的生命周期增強來包含 aar。 此處提供了一個簡單示例如何為 Maven 創建新的打包類型?

問題中的引文與當前的現實沒有任何共同之處。 當然,可以在 Android 中使用外部庫,並且有很多可用的庫。 也許他們想說每個應用程序必須捆綁它需要的所有庫,但是在構建時重用庫(靜態鏈接)確實不是問題。

.aar從不同.jar不超過.jar從不同.zip 它有一些關於應該在那里期望什么樣的內容的概念,但是.jar.aar最常包含編譯的類和它們的資源。 .aar只是指定庫是 Android 特定的並且具有一些預期的結構,對於此類庫是合理的(嗯, .jar也有一些預期的結構)。

.aar 僅受 Android Studio 支持的觀點也已棄用。 這些庫可以部署到 Maven Central,像 gradle 這樣的工具可以使用 @aar 后綴來引用它們,例如:

dependencies {
    compile ('io.github.andviane:uncover:2.0.1@aar')
    ..
}  

引用Maven 中央部署。

JAR 與 AAR

JAR – Java 檔案。 包含.class , java 資源

AAR – 安卓存檔。 包含classes.jar和其他 Android 相關文件,如 AndroidManifest.xml、R.txt、proguard.txt、res 文件夾(布局、值、可繪制)等。

Android 可以處理jaraar兩個文件。 作為庫開發人員,通常aar用於共享 Android 資源,否則 - jar更輕量級和通用的分發aar方式。

由於aar包含jar你可以使用它[關於]

區別:

主要區別是 aar 在 android 內部被拆分為 jar。

如果您的應用僅在 android studio 中的用戶應用中使用,則首選 aar。

如果您計划應用程序與 c/c++ 編譯的 lib.so 文件進行通信,則首選 jar。

使用 jar 和 aar 根據要求 aar 工作容易,jar 更靈活。

這是我對 android 5 棒棒糖的了解。 新版本我不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM